OSDN Git Service

Initial revision
authorirox <irox>
Mon, 10 Sep 2001 00:22:29 +0000 (00:22 +0000)
committerirox <irox>
Mon, 10 Sep 2001 00:22:29 +0000 (00:22 +0000)
92 files changed:
tk/ToDo [new file with mode: 0644]
tk/cygtcl.m4 [new file with mode: 0644]
tk/doc/AddOption.3 [new file with mode: 0644]
tk/doc/BackgdErr.3 [new file with mode: 0644]
tk/doc/DoOneEvent.3 [new file with mode: 0644]
tk/doc/DoWhenIdle.3 [new file with mode: 0644]
tk/doc/GetDash.3 [new file with mode: 0644]
tk/doc/GetFontStr.3 [new file with mode: 0644]
tk/doc/GetHINSTANCE.3 [new file with mode: 0644]
tk/doc/GetHWND.3 [new file with mode: 0644]
tk/doc/Grab.3 [new file with mode: 0644]
tk/doc/HWNDToWindow.3 [new file with mode: 0644]
tk/doc/Notifier.3 [new file with mode: 0644]
tk/doc/Preserve.3 [new file with mode: 0644]
tk/doc/SetOptions.3 [new file with mode: 0644]
tk/doc/Sleep.3 [new file with mode: 0644]
tk/doc/Tcl.n [new file with mode: 0644]
tk/doc/TkInitStubs.3 [new file with mode: 0644]
tk/doc/after.n [new file with mode: 0644]
tk/doc/chooseDirectory.n [new file with mode: 0644]
tk/doc/colors.n [new file with mode: 0644]
tk/doc/cursors.n [new file with mode: 0644]
tk/doc/exit.n [new file with mode: 0644]
tk/doc/fileevent.n [new file with mode: 0644]
tk/doc/keysyms.n [new file with mode: 0644]
tk/doc/update.n [new file with mode: 0644]
tk/generic/patchlevel.h [new file with mode: 0644]
tk/generic/prolog.ps [new file with mode: 0644]
tk/generic/tk.decls [new file with mode: 0644]
tk/generic/tkDecls.h [new file with mode: 0644]
tk/generic/tkInt.decls [new file with mode: 0644]
tk/generic/tkIntDecls.h [new file with mode: 0644]
tk/generic/tkIntPlatDecls.h [new file with mode: 0644]
tk/generic/tkIntXlibDecls.h [new file with mode: 0644]
tk/generic/tkObj.c [new file with mode: 0644]
tk/generic/tkOldConfig.c [new file with mode: 0644]
tk/generic/tkPatch.h [new file with mode: 0644]
tk/generic/tkPlatDecls.h [new file with mode: 0644]
tk/generic/tkSend.c [new file with mode: 0644]
tk/generic/tkStubImg.c [new file with mode: 0644]
tk/generic/tkStubInit.c [new file with mode: 0644]
tk/generic/tkStubLib.c [new file with mode: 0644]
tk/generic/tkXId.c [new file with mode: 0644]
tk/library/choosedir.tcl [new file with mode: 0644]
tk/library/demos/images/mickey.gif [new file with mode: 0644]
tk/library/folder.gif [new file with mode: 0644]
tk/library/images/logo.eps [new file with mode: 0644]
tk/library/images/pspbrwse.jbf [new file with mode: 0755]
tk/library/images/pwrdLogo.eps [new file with mode: 0644]
tk/library/images/tai-ku.gif [new file with mode: 0644]
tk/library/textfile.gif [new file with mode: 0644]
tk/library/updir.xbm [new file with mode: 0644]
tk/mac/MW_TkHeader.h [new file with mode: 0644]
tk/mac/MW_TkOldImgHeader.h [new file with mode: 0644]
tk/mac/MW_TkTestHeader.h [new file with mode: 0644]
tk/mac/MW_TkTestHeader.pch [new file with mode: 0644]
tk/mac/tclets.r [new file with mode: 0644]
tk/mac/tkMacAppearanceStubs.c [new file with mode: 0644]
tk/mac/tkMacConfig.c [new file with mode: 0644]
tk/mac/tkMacProjects.sea.hqx [new file with mode: 0644]
tk/mac/tkMacScrollbar.c [new file with mode: 0644]
tk/tests/all.tcl [new file with mode: 0644]
tk/tests/bitmap.test [new file with mode: 0644]
tk/tests/border.test [new file with mode: 0644]
tk/tests/canvPsImg.tcl [new file with mode: 0644]
tk/tests/choosedir.test [new file with mode: 0644]
tk/tests/config.test [new file with mode: 0644]
tk/tests/cursor.test [new file with mode: 0644]
tk/tests/defs.tcl [new file with mode: 0644]
tk/tests/get.test [new file with mode: 0644]
tk/tests/unixSelect.test [new file with mode: 0644]
tk/tests/unixSend.test [new file with mode: 0644]
tk/tests/visual_bb.test [new file with mode: 0644]
tk/tests/winDialog.test [new file with mode: 0644]
tk/tests/winSend.test [new file with mode: 0644]
tk/tests/wm.test [new file with mode: 0644]
tk/tests/xmfbox.test [new file with mode: 0644]
tk/unix/aclocal.m4 [new file with mode: 0644]
tk/unix/porting.old [new file with mode: 0644]
tk/unix/tcl.m4 [new file with mode: 0644]
tk/unix/tkUnixConfig.c [new file with mode: 0644]
tk/unix/tkUnixKey.c [new file with mode: 0644]
tk/win/aclocal.m4 [new file with mode: 0644]
tk/win/rc/tk_base.rc [new file with mode: 0644]
tk/win/rc/tk_dll.rc [new file with mode: 0644]
tk/win/rc/wish_static.rc [new file with mode: 0644]
tk/win/tcl.m4 [new file with mode: 0644]
tk/win/tkConfig.sh.in [new file with mode: 0644]
tk/win/tkWinConfig.c [new file with mode: 0644]
tk/win/tkWinTest.c [new file with mode: 0644]
tk/win/winDumpExts.c [new file with mode: 0644]
tk/xlib/xcolors.h [new file with mode: 0644]

diff --git a/tk/ToDo b/tk/ToDo
new file mode 100644 (file)
index 0000000..683dc80
--- /dev/null
+++ b/tk/ToDo
@@ -0,0 +1,90 @@
+This file contains a list of bugs to fix and minor feature changes
+needed in the Tk toolkit.  The list is ordered by the time when the
+idea for the change first arose;  no priority should be inferred from
+the order.
+
+sccsid = SCCS: @(#) ToDo 1.8 96/02/16 10:55:14
+
+106. Add feature to buttons for automatic defaulting, where button
+allocates extra space for default ring.
+
+136. Implement mechanism for using existing window as main window for
+application, support with command-line argument in wish.
+
+139. Change canvas Postscript generation to be smarter about font names
+that have been abbreviated:  use X to look up the full name.
+
+147. Add "window" entry to menus.
+
+148. Add an "initProc" and a "freeProc" to TK_CONFIG_CUSTOM config types.
+
+150. In SYNONYM options, specify a command-line switch for the other
+option, not a database name.
+
+153. Some fonts (e.g. Times) have underline characters that extend
+*below* the official descent of the font.  Right now the underline
+is invisible for these fonts in text widgets.  Find a way to make
+this work in text?
+
+150. Change the bindings for menubuttons to watch mouse motion events
+and map them to menu or menubutton windows "by hand", so as to eliminate
+the need for a menu to be a descendant of the menubutton.
+
+151. Create an I/O event handler so that Tk can continue after a server
+connection is lost.
+
+153. Allow Tk applications to be embedded inside other Tk applications:
+    - Allow the window for a widget to be specified explicitly, rather
+      than being created automatically by Tk.  This would allow the
+      main window for one application to use an internal window that
+      already exists in another application.
+    - Modify wish's main.c to allow a window id for the main window to
+      be specified as a command-line argument.
+    - Build a special widget for embedding other applications, which will
+      implement the window-manager side of the ICCCM protocols, e.g.,
+      feeding requested size information up from the embedded application
+      into the enclosing widget hierarchy.
+
+154. Improvements to canvases:
+    - Allow items to be rotated?
+    - Allow polygons to be outlined.
+    - Make "raise" of window items work correctly.
+    - In the "find" widget option, make it possible to restrict search
+      to a particular tag.
+    - Allow items to become visible/invisible.
+
+156. Add a "wm anchor" option to make it easier to center windows.
+
+157. Various improvements to option database:
+    - Allow patterns to be read from database or deleted from database.
+    - Allow database to be cleared without automatically reloading from
+      .Xdefaults files.
+    - Allow additional info to be read from various window properties.
+    - Support new wildcards from X11R5.
+    - Allow mechanism to extend to cover cases where there isn't even
+      a window, or even an application by the name used in the option
+      get command.
+    - Allow options in database to override those specified on Tcl
+      command lines?
+    - Revert to X conflict-resolution scheme?
+
+158. Make it possible for wish to run without a display.
+
+159. Change option tables to be arrays of pointers, rather than arrays of
+entries?  Makes it easier to keep separate named structures for particular
+options, e.g. so that you can tell when an option has changed.
+
+160. Change text scrolling so that the top of the window can fall in
+the middle of a text line.
+
+161. Allow text tabs to be specified in units of characters, rather
+than just inches.
+
+162. Fix tk_strictMotif to make it easier to turn on and off (e.g.
+conditionalize the binding scripts, rather than the creation of
+the bindings).
+
+163. Change text bindings so that Enter and Leave events occur when
+the mouse moves between disjoint ranges with the same tag.
+
+164. Provide block insertion cursor in text widgets.
diff --git a/tk/cygtcl.m4 b/tk/cygtcl.m4
new file mode 100644 (file)
index 0000000..b74c2be
--- /dev/null
@@ -0,0 +1,310 @@
+# CYGNUS LOCAL
+#
+# This entire file is Cygnus local, it contains a set of cross
+# platform autoconf macros to be used by Tcl extensions.
+
+# FIXME: There seems to be a problem with variable
+# names that still need an expansion (like $foo_FILE)
+# since another eval might be needed in these macros.
+
+#--------------------------------------------------------------------
+# TCL_TOOL_PATH
+#
+#      Return a file path that the build system tool will understand.
+#      This path might be different than the path used in the
+#      Makefiles.
+#
+# Arguments:
+#      
+#      VAR
+#      PATH
+#      
+# Results:
+#
+#
+# Example:
+#
+# TCL_TOOL_PATH(TCL_CC_PATH, /usr/local/compiler)
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_PATH, [
+  val=$2
+
+  if test "$val" = "" ; then
+    AC_MSG_ERROR([Empty value for variable $1])
+  fi
+
+  case "${host}" in
+    *windows32* | *mingw32*)
+      if test "${CYGPATH}" = ""; then
+        AC_MSG_ERROR([CYGPATH variable is not defined.])
+      elif test "${CYGPATH}" = "echo"; then
+        # No cygpath when cross compiling
+        $1=$val
+      else
+        # store literal argument text in a variable
+        val=$val
+        # Convert Cygwin to Windows path (/tmp/foo -> C:\Tmp\foo)
+        val="`${CYGPATH} $val`"
+        # Convert path like C:\Tmp\foo to C:/Tmp/foo
+        $1="`echo $val | sed -e s#\\\\\\\\#/#g`"
+      fi
+    ;;
+    *)
+      # Default to a no-op under Unix or Cygwin gcc
+      $1=$val
+    ;;
+  esac
+])
+
+# FIXME: It would simplify things if no SUFFIX had to be passed
+# into these LONGNAME macros. Using the TCL_SHARED_LIB_SUFFIX
+# and TCL_UNSHARED_LIB_SUFFIX from tclConfig.sh might do the trick!
+
+#--------------------------------------------------------------------
+# TCL_TOOL_STATIC_LIB_LONGNAME
+#
+#      Return static library name in the "long format" understood by
+#      the build tools. This might involve prepending a suffix
+#      and appending version information to the library name.
+#
+# Arguments:
+#      
+#      VAR
+#      LIBNAME
+#      SUFFIX
+#      
+# Depends on:
+#      TCL_DBGX
+#      TCL_VENDOR_PREFIX
+#
+# Example:
+#
+# TCL_TOOL_STATIC_LIB_LONGNAME(TCL_LIB, tcl, $TCL_UNSHARED_LIB_SUFFIX)
+#
+# Results:
+#
+#      TCL_LIB=libtcl83.a
+#
+#      or
+#
+#      TCL_LIB=tcl83.lib
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_STATIC_LIB_LONGNAME, [
+  libname=$2
+  suffix=$3
+
+  case "${host}" in
+    *windows32* | *mingw32*)
+      if test "$GCC" != yes; then
+        eval "long_libname=\"${TCL_VENDOR_PREFIX}${libname}${suffix}\""
+      else
+        eval "long_libname=\"lib${TCL_VENDOR_PREFIX}${libname}${suffix}\""
+      fi
+    ;;
+    *)
+      eval "long_libname=\"lib${TCL_VENDOR_PREFIX}${libname}${suffix}\""
+    ;;
+  esac
+
+  eval "long_libname=${long_libname}"
+
+  # Trick to replace DBGX with TCL_DBGX
+  DBGX='${TCL_DBGX}'
+  eval "long_libname=${long_libname}"
+
+  $1=$long_libname
+])
+
+#--------------------------------------------------------------------
+# TCL_TOOL_SHARED_LIB_LONGNAME
+#
+#      Return the shared library name in the "long format" understood by
+#      the build tools. This might involve prepending a suffix
+#      and appending version information to the shared library name.
+#
+# Arguments:
+#      
+#      VAR
+#      LIBNAME
+#      SUFFIX
+#      
+# Depends on:
+#      TCL_DBGX
+#      TCL_VENDOR_PREFIX
+#
+# Example:
+#
+# TCL_TOOL_SHARED_LIB_LONGNAME(TCL_SHLIB, tcl, $TCL_SHARED_LIB_SUFFIX)
+#
+# Results:
+#      The above example could result in the following.
+#
+#      TCL_SHLIB=libtcl83.so
+#
+#      or
+#
+#      TCL_SHLIB=tcl83.dll
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_SHARED_LIB_LONGNAME, [
+  libname=$2
+  suffix=$3
+
+  case "${host}" in
+    *windows32* | *mingw32* | *cygwin*)
+      eval "long_libname=\"${TCL_VENDOR_PREFIX}${libname}${suffix}\""
+    ;;
+    *)
+      eval "long_libname=\"lib${TCL_VENDOR_PREFIX}${libname}${suffix}\""
+    ;;
+  esac
+
+  eval "long_libname=${long_libname}"
+
+  # Trick to replace DBGX with TCL_DBGX
+  DBGX='${TCL_DBGX}'
+  eval "long_libname=${long_libname}"
+
+  $1=$long_libname
+])
+
+#--------------------------------------------------------------------
+# TCL_TOOL_LIB_SHORTNAME
+#
+#      Return the library name in the "short format" understood by
+#      the build tools. This might involve prepending a suffix
+#      and appending version information to the library name.
+#      The VC++ compiler does not support short library names
+#      so we just use the static import lib name in that case.
+#
+# Arguments:
+#      
+#      VAR
+#      LIBNAME
+#      VERSION
+#      
+# Depends on:
+#      TCL_LIB_VERSIONS_OK
+#      TCL_DBGX
+#      SHARED_BUILD
+#      
+#
+# Example:
+#
+# TCL_TOOL_LIB_SHORTNAME(TCL_LIB, tcl, 8.3)
+#
+# Results:
+#      The above example could result in the following.
+#
+#      TCL_LIB=-ltcl83
+#
+#      or
+#
+#      TCL_LIB=tcl83.lib
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_LIB_SHORTNAME, [
+  libname=$2
+  version=$3
+
+  if test "$TCL_LIB_SUFFIX" = "" ; then
+    AC_MSG_ERROR([The TCL_LIB_SUFFIX variable is not defined])
+  fi
+
+  # If the . character is not allowed in lib name, remove it from version
+  if test "${TCL_LIB_VERSIONS_OK}" != "ok"; then
+        version=`echo $version | tr -d .`
+  fi
+
+  case "${host}" in
+    *windows32* | *mingw32*)
+      if test "$GCC" != yes; then
+        eval "short_libname=\"${TCL_VENDOR_PREFIX}${libname}${version}${TCL_LIB_SUFFIX}\""
+      else
+        short_libname="-l${TCL_VENDOR_PREFIX}${libname}${version}${TCL_DBGX}"
+      fi
+    ;;
+    *)
+      short_libname="-l${TCL_VENDOR_PREFIX}${libname}${version}\${TCL_DBGX}"
+    ;;
+  esac
+
+  $1=$short_libname
+])
+
+#--------------------------------------------------------------------
+# TCL_TOOL_LIB_SPEC
+#
+#      Return the "lib spec format" understood by the build tools.
+#
+# Arguments:
+#      
+#      VAR
+#      DIR
+#      LIBARG
+#      
+# Depends on:
+#      
+#
+# Example:
+#
+# TCL_TOOL_LIB_SPEC(SPEC, /usr/lib, -ltcl)
+#
+# Results:
+#      The above example could result in the following.
+#
+#      SPEC="-L/usr/lib -ltcl83"
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_LIB_SPEC, [
+  case "${host}" in
+    *windows32* | *mingw32*)
+      if test "$GCC" != yes; then
+        TCL_TOOL_PATH($1, "$2/$3")
+      else
+        TCL_TOOL_PATH(dirname, $2)
+        $1="-L${dirname} $3"
+      fi
+    ;;
+    *)
+      $1="-L$2 $3"
+    ;;
+  esac
+])
+
+#--------------------------------------------------------------------
+# TCL_TOOL_LIB_PATH
+#
+#      Return the "lib path format" understood by the build tools.
+#      Typically, this is the fully qualified path name of the library.
+#
+# Arguments:
+#      
+#      VAR
+#      DIR
+#      LIBARG
+#      
+# Depends on:
+#      
+#
+# Example:
+#
+# TCL_TOOL_LIB_PATH(TMP_PATH, /usr/lib, libtcl83.a)
+#
+# Results:
+#      The above example could result in the following.
+#
+#      TMP_PATH="/usr/lib/libtcl83.a"
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(TCL_TOOL_LIB_PATH, [
+  TCL_TOOL_PATH($1, "$2/$3")
+])
diff --git a/tk/doc/AddOption.3 b/tk/doc/AddOption.3
new file mode 100644 (file)
index 0000000..4aadf52
--- /dev/null
@@ -0,0 +1,60 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+'\"
+.so man.macros
+.TH Tk_AddOption 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_AddOption \- Add an option to the option database
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+void
+\fBTk_AddOption\fR(\fItkwin, name, value, priority\fR)
+.SH ARGUMENTS
+.AP Tk_Window tkwin in
+Token for window.
+.AP char *name in
+Multi-element name of option.
+.AP char *value in
+Value of option.
+.AP int priority in
+Overall priority level to use for option.
+.BE
+
+.SH DESCRIPTION
+.PP
+This procedure is invoked to add an option to the database
+associated with \fItkwin\fR's main window.  \fIName\fR
+contains the option being specified and consists of names and/or
+classes separated by asterisks or dots, in the usual X format.
+\fIValue\fR contains the text string to associate with \fIname\fR;
+this value will be returned in calls to \fBTk_GetOption\fR.
+\fIPriority\fR specifies the priority of the value; when options are
+queried using \fBTk_GetOption\fR, the value with the highest priority
+is returned.  \fIPriority\fR must be between 0 and TK_MAX_PRIO.  Some
+common priority values are:
+.TP
+20
+Used for default values hard-coded into widgets.
+.TP
+40
+Used for options specified in application-specific startup files.
+.TP
+60
+Used for options specified in user-specific defaults files, such as
+\fB.Xdefaults\fR, resource databases loaded into the X server, or
+user-specific startup files.
+.TP
+80
+Used for options specified interactively after the application starts
+running.
+.PP
+
+.SH KEYWORDS
+class, name, option, add
diff --git a/tk/doc/BackgdErr.3 b/tk/doc/BackgdErr.3
new file mode 100644 (file)
index 0000000..005f5b6
--- /dev/null
@@ -0,0 +1,58 @@
+'\"
+'\" Copyright (c) 1992-1994 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) BackgdErr.3 1.3 96/03/25 19:56:51
+'\" 
+.so man.macros
+.TH Tcl_BackgroundError 3 7.5 Tcl "Tcl Library Procedures"
+.BS
+.SH NAME
+Tcl_BackgroundError \- report Tcl error that occurred in background processing
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+\fBTcl_BackgroundError\fR(\fIinterp\fR)
+.SH ARGUMENTS
+.AS Tcl_Interp *interp
+.AP Tcl_Interp *interp in
+Interpreter in which the error occurred.
+.BE
+
+.SH DESCRIPTION
+.PP
+This procedure is typically invoked when a Tcl error occurs during
+``background processing'' such as executing an event handler.
+When such an error occurs, the error condition is reported to Tcl
+or to a widget or some other C code, and there is not usually any
+obvious way for that code to report the error to the user.
+In these cases the code calls \fBTcl_BackgroundError\fR with an
+\fIinterp\fR argument identifying the interpreter in which the
+error occurred.  At the time \fBTcl_BackgroundError\fR is invoked,
+\fIinterp->result\fR is expected to contain an error message.
+\fBTcl_BackgroundError\fR will invoke the \fBbgerror\fR
+Tcl command to report the error in an application-specific fashion.
+If no \fBbgerror\fR command exists, or if it returns with an error condition,
+then \fBTcl_BackgroundError\fR reports the error itself by printing
+a message on the standard error file.
+.PP
+\fBTcl_BackgroundError\fR does not invoke \fBbgerror\fR immediately
+because this could potentially interfere with scripts that are in process
+at the time the error occurred.
+Instead, it invokes \fBbgerror\fR later as an idle callback.
+\fBTcl_BackgroundError\fR saves the values of the \fBerrorInfo\fR and
+\fBerrorCode\fR variables and restores these values just before
+invoking \fBbgerror\fR.
+.PP
+It is possible for many background errors to accumulate before
+\fBbgerror\fR is invoked.  When this happens, each of the errors
+is processed in order.  However, if \fBbgerror\fR returns a
+break exception, then all remaining error reports for the
+interpreter are skipped.
+
+.SH KEYWORDS
+background, bgerror, error
diff --git a/tk/doc/DoOneEvent.3 b/tk/doc/DoOneEvent.3
new file mode 100644 (file)
index 0000000..fd092c8
--- /dev/null
@@ -0,0 +1,108 @@
+'\"
+'\" Copyright (c) 1990-1992 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) DoOneEvent.3 1.6 97/05/09 18:12:05
+'\" 
+.so man.macros
+.TH Tcl_DoOneEvent 3 7.5 Tcl "Tcl Library Procedures"
+.BS
+.SH NAME
+Tcl_DoOneEvent \- wait for events and invoke event handlers
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+int
+\fBTcl_DoOneEvent\fR(\fIflags\fR)
+.SH ARGUMENTS
+.AS int flags
+.AP int flags in
+This parameter is normally zero.  It may be an OR-ed combination
+of any of the following flag bits:  
+TCL_WINDOW_EVENTS,
+TCL_FILE_EVENTS, TCL_TIMER_EVENTS, TCL_IDLE_EVENTS, TCL_ALL_EVENTS, or
+TCL_DONT_WAIT.
+.BE
+
+.SH DESCRIPTION
+.PP
+This procedure is the entry point to Tcl's event loop; it is responsible for
+waiting for events and dispatching event handlers created with
+procedures such as \fBTk_CreateEventHandler\fR, \fBTcl_CreateFileHandler\fR,
+\fBTcl_CreateTimerHandler\fR, and \fBTcl_DoWhenIdle\fR.
+\fBTcl_DoOneEvent\fR checks to see if
+events are already present on the Tcl event queue; if so,
+it calls the handler(s) for the first (oldest) event, removes it from
+the queue, and returns.
+If there are no events ready to be handled, then \fBTcl_DoOneEvent\fR
+checks for new events from all possible sources.
+If any are found, it puts all of them on Tcl's event queue, calls
+handlers for the first event on the queue, and returns.
+If no events are found, \fBTcl_DoOneEvent\fR checks for \fBTcl_DoWhenIdle\fR
+callbacks; if any are found, it invokes all of them and returns.
+Finally, if no events or idle callbacks have been found, then
+\fBTcl_DoOneEvent\fR sleeps until an event occurs; then it adds any 
+new events to the Tcl event queue, calls handlers for the first event,
+and returns.
+The normal return value is 1 to signify that some event
+was processed (see below for other alternatives).
+.PP
+If the \fIflags\fR argument to \fBTcl_DoOneEvent\fR is non-zero,
+it restricts the kinds of events that will be processed by
+\fBTcl_DoOneEvent\fR.
+\fIFlags\fR may be an OR-ed combination of any of the following bits:
+.TP 27
+\fBTCL_WINDOW_EVENTS\fR \-
+Process window system events.
+.TP 27
+\fBTCL_FILE_EVENTS\fR \-
+Process file events.
+.TP 27
+\fBTCL_TIMER_EVENTS\fR \-
+Process timer events.
+.TP 27
+\fBTCL_IDLE_EVENTS\fR \-
+Process idle callbacks.
+.TP 27
+\fBTCL_ALL_EVENTS\fR \-
+Process all kinds of events:  equivalent to OR-ing together all of the
+above flags or specifying none of them.
+.TP 27
+\fBTCL_DONT_WAIT\fR \-
+Don't sleep:  process only events that are ready at the time of the
+call.
+.LP
+If any of the flags \fBTCL_WINDOW_EVENTS\fR, \fBTCL_FILE_EVENTS\fR,
+\fBTCL_TIMER_EVENTS\fR, or \fBTCL_IDLE_EVENTS\fR is set, then the only
+events that will be considered are those for which flags are set.
+Setting none of these flags is equivalent to the value
+\fBTCL_ALL_EVENTS\fR, which causes all event types to be processed.
+If an application has defined additional event sources with
+\fBTcl_CreateEventSource\fR, then additional \fIflag\fR values
+may also be valid, depending on those event sources.
+.PP
+The \fBTCL_DONT_WAIT\fR flag causes \fBTcl_DoOneEvent\fR not to put
+the process to sleep:  it will check for events but if none are found
+then it returns immediately with a return value of 0 to indicate
+that no work was done.
+\fBTcl_DoOneEvent\fR will also return 0 without doing anything if
+the only alternative is to block forever (this can happen, for example,
+if \fIflags\fR is \fBTCL_IDLE_EVENTS\fR and there are no
+\fBTcl_DoWhenIdle\fR callbacks pending, or if no event handlers or
+timer handlers exist).
+.PP
+\fBTcl_DoOneEvent\fR may be invoked recursively.  For example,
+it is possible to invoke \fBTcl_DoOneEvent\fR recursively
+from a handler called by \fBTcl_DoOneEvent\fR.  This sort
+of operation is useful in some modal situations, such
+as when a
+notification dialog has been popped up and an application wishes to
+wait for the user to click a button in the dialog before
+doing anything else.
+
+.SH KEYWORDS
+callback, event, handler, idle, timer
diff --git a/tk/doc/DoWhenIdle.3 b/tk/doc/DoWhenIdle.3
new file mode 100644 (file)
index 0000000..c909026
--- /dev/null
@@ -0,0 +1,86 @@
+'\"
+'\" Copyright (c) 1990 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) DoWhenIdle.3 1.6 97/05/09 18:18:33
+'\" 
+.so man.macros
+.TH Tcl_DoWhenIdle 3 7.5 Tcl "Tcl Library Procedures"
+.BS
+.SH NAME
+Tcl_DoWhenIdle, Tcl_CancelIdleCall \- invoke a procedure when there are no pending events
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+\fBTcl_DoWhenIdle\fR(\fIproc, clientData\fR)
+.sp
+\fBTcl_CancelIdleCall\fR(\fIproc, clientData\fR)
+.SH ARGUMENTS
+.AS Tcl_IdleProc clientData
+.AP Tcl_IdleProc *proc in
+Procedure to invoke.
+.AP ClientData clientData in
+Arbitrary one-word value to pass to \fIproc\fR.
+.BE
+
+.SH DESCRIPTION
+.PP
+\fBTcl_DoWhenIdle\fR arranges for \fIproc\fR to be invoked
+when the application becomes idle.  The application is
+considered to be idle when \fBTcl_DoOneEvent\fR has been
+called, couldn't find any events to handle, and is about
+to go to sleep waiting for an event to occur.  At this
+point all pending \fBTcl_DoWhenIdle\fR handlers are
+invoked.  For each call to \fBTcl_DoWhenIdle\fR there will
+be a single call to \fIproc\fR;  after \fIproc\fR is
+invoked the handler is automatically removed.
+\fBTcl_DoWhenIdle\fR is only usable in programs that
+use \fBTcl_DoOneEvent\fR to dispatch events.
+.PP
+\fIProc\fR should have arguments and result that match the
+type \fBTcl_IdleProc\fR:
+.CS
+typedef void Tcl_IdleProc(ClientData \fIclientData\fR);
+.CE
+The \fIclientData\fR parameter to \fIproc\fR is a copy of the \fIclientData\fR
+argument given to \fBTcl_DoWhenIdle\fR.  Typically, \fIclientData\fR
+points to a data structure containing application-specific information about
+what \fIproc\fR should do.
+.PP
+\fBTcl_CancelIdleCall\fR
+may be used to cancel one or more previous
+calls to \fBTcl_DoWhenIdle\fR:  if there is a \fBTcl_DoWhenIdle\fR
+handler registered for \fIproc\fR and \fIclientData\fR, then it
+is removed without invoking it.  If there is more than one
+handler on the idle list that refers to \fIproc\fR and \fIclientData\fR,
+all of the handlers are removed.  If no existing handlers match
+\fIproc\fR and \fIclientData\fR then nothing happens.
+.PP
+\fBTcl_DoWhenIdle\fR is most useful in situations where
+(a) a piece of work will have to be done but (b) it's
+possible that something will happen in the near future
+that will change what has to be done or require something
+different to be done.  \fBTcl_DoWhenIdle\fR allows the
+actual work to be deferred until all pending events have
+been processed.  At this point the exact work to be done
+will presumably be known and it can be done exactly once.
+.PP
+For example, \fBTcl_DoWhenIdle\fR might be used by an editor
+to defer display updates until all pending commands have
+been processed.  Without this feature, redundant redisplays
+might occur in some situations, such as the processing of
+a command file.
+.SH BUGS
+.PP
+At present it is not safe for an idle callback to reschedule itself
+continuously.  This will interact badly with certain features of Tk
+that attempt to wait for all idle callbacks to complete.  If you would
+like for an idle callback to reschedule itself continuously, it is
+better to use a timer handler with a zero timeout period.
+
+.SH KEYWORDS
+callback, defer, idle callback
diff --git a/tk/doc/GetDash.3 b/tk/doc/GetDash.3
new file mode 100644 (file)
index 0000000..c7e0f8a
--- /dev/null
@@ -0,0 +1,71 @@
+'\"
+'\" Copyright (c) 1989-1993 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_GetDash 3 8.3 Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_GetDash \- convert from string to valid dash structure.
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+int
+\fBTk_GetDash\fR(\fIinterp, string, dashPtr\fR)
+.SH ARGUMENTS
+.AS Tk_Dash *dashPtr
+.AP Tcl_Interp *interp in
+Interpreter to use for error reporting.
+.AP "CONST char *" string in
+Textual value to be converted.
+.AP Tk_Dash *dashPtr out
+Points to place to store the dash pattern
+value converted from \fIstring\fR.
+.BE
+
+.SH DESCRIPTION
+.PP
+These procedure parses the string and fills in the result in the
+Tk_Dash structure. The string can be a list of integers or a
+character string containing only \fB[.,-_]\fR or spaces. If all
+goes well, TCL_OK is returned. If \fIstring\fR doesn't have the
+proper syntax then TCL_ERROR is returned, an error message is left
+in the interpreter's result, and nothing is stored at *\fIdashPtr\fR.
+.PP
+The first possible syntax is a list of integers. Each element
+represents the number of pixels of a line segment. Only the odd
+segments are drawn using the "outline" color. The other segments
+are drawn transparent.
+.PP
+The second possible syntax is a character list containing only
+5 possible characters \fB[.,-_ ]\fR. The space can be used
+to enlarge the space between other line elements, and can not
+occur as the first posibion in the string. Some examples:
+    -dash .     = -dash {2 4}
+    -dash -     = -dash {6 4}
+    -dash -.    = -dash {6 4 2 4}
+    -dash -..   = -dash {6 4 2 4 2 4}
+    -dash {. }  = -dash {2 8}
+    -dash ,     = -dash {4 4}
+.PP
+The main difference of this syntax with the previous is that it
+it shape-conserving. This means that all values in the dash
+list will be multiplied by the line width before display. This
+assures that "." will always be displayed as a dot and "-"
+always as a dash regardless of the line width.
+.PP
+On systems where only a limited set of dash patterns, the dash
+pattern will be displayed as the most close dash pattern that
+is available. For example, on Windows only the first 4 of the
+above examples are available. The last 2 examples will be
+displayed identically as the first one.
+
+.SH KEYWORDS
+dash, conversion
+
diff --git a/tk/doc/GetFontStr.3 b/tk/doc/GetFontStr.3
new file mode 100644 (file)
index 0000000..3278353
--- /dev/null
@@ -0,0 +1,79 @@
+'\"
+'\" Copyright (c) 1990-1992 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) GetFontStr.3 1.10 96/03/26 18:10:03
+'\" 
+.so man.macros
+.TH Tk_GetFontStruct 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_GetFontStruct, Tk_NameOfFontStruct, Tk_FreeFontStruct \- maintain database of fonts
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+XFontStruct *
+\fBTk_GetFontStruct(\fIinterp, tkwin, nameId\fB)\fR
+.sp
+char *
+\fBTk_NameOfFontStruct(\fIfontStructPtr\fB)\fR
+.sp
+\fBTk_FreeFontStruct(\fIfontStructPtr\fB)\fR
+.SH ARGUMENTS
+.AS "XFontStruct" *fontStructPtr
+.AP Tcl_Interp *interp in
+Interpreter to use for error reporting.
+.AP Tk_Window tkwin in
+Token for window in which font will be used.
+.AP Tk_Uid nameId in
+Name of desired font.
+.AP XFontStruct *fontStructPtr in
+Font structure to return name for or delete.
+.BE
+
+.SH DESCRIPTION
+.PP
+\fBTk_GetFont\fR loads the font indicated
+by \fInameId\fR and returns a pointer to information about the
+font.  The pointer returned by \fBTk_GetFont\fR
+will remain valid until \fBTk_FreeFont\fR
+is called to release it.
+\fINameId\fR can be either a font name or pattern;  any
+value that could be passed to \fBXLoadQueryFont\fR may be
+passed to \fBTk_GetFont\fR.  If \fBTk_GetFont\fR is unsuccessful
+(because, for example, there is no font corresponding to
+\fInameId\fR) then it returns \fBNULL\fR and stores an error
+message in \fIinterp->result\fR.
+.PP
+\fBTk_GetFont\fR maintains a database of all fonts it has allocated.
+If the same \fInameId\fR is requested multiple times (e.g. by
+different windows or for different purposes), then additional
+calls for the same \fInameId\fR will be handled very quickly, without
+involving the X server.  For this reason, it is generally better
+to use \fBTk_GetFont\fR in place of X library procedures like
+\fBXLoadQueryFont\fR.
+.PP
+The procedure \fBTk_NameOfFontStruct\fR is roughly the inverse of
+\fBTk_GetFontStruct\fR.  If its \fIfontStructPtr\fR argument was created
+by \fBTk_GetFontStruct\fR, then the return value is the \fInameId\fR
+argument that was passed to \fBTk_GetFontStruct\fR to create the
+font.  If \fIfontStructPtr\fR was not created by a call
+to \fBTk_GetFontStruct\fR, then the return value is a hexadecimal string
+giving the X identifier for the associated font.
+Note:  the string returned by \fBTk_NameOfFontStruct\fR is
+only guaranteed to persist until the next call to \fBTk_NameOfFontStruct\fR.
+.PP
+When a font returned by \fBTk_GetFont\fR is no longer
+needed, \fBTk_FreeFont\fR should be called to release it.
+There should be exactly one call to \fBTk_FreeFont\fR for
+each call to \fBTk_GetFont\fR.  When a font is no longer in
+use anywhere (i.e. it has been freed as many times as it has been gotten)
+\fBTk_FreeFont\fR will release it to the X server and delete it from
+the database.
+
+.SH KEYWORDS
+font
diff --git a/tk/doc/GetHINSTANCE.3 b/tk/doc/GetHINSTANCE.3
new file mode 100644 (file)
index 0000000..587ce15
--- /dev/null
@@ -0,0 +1,25 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_GetHISTANCE 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_GetHINSTANCE \- retrieve the global application instance handle
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+HINSTANCE
+\fBTk_GetHINSTANCE\fR()
+
+.SH DESCRIPTION
+.PP
+\fBTk_GetHINSTANCE\fR returns the Windows application instance handle
+for the Tk application.  This function is only available on Windows platforms.
+
+.SH KEYWORDS
+identifier, instance
diff --git a/tk/doc/GetHWND.3 b/tk/doc/GetHWND.3
new file mode 100644 (file)
index 0000000..fb1684c
--- /dev/null
@@ -0,0 +1,29 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+'\"
+.so man.macros
+.TH Tk_GetHWND 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_GetHWND \- retrieve the Windows handle for an X window
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+HWND
+\fBTk_GetHWND\fR(\fIwindow\fR)
+.SH ARGUMENTS
+.AP Window window in
+X token for window.
+.BE
+.SH DESCRIPTION
+.PP
+\fBTk_GetHWND\fR returns the Windows HWND identifier for X Windows
+window given by \fIwindow\fR.
+
+.SH KEYWORDS
+identifier, window
diff --git a/tk/doc/Grab.3 b/tk/doc/Grab.3
new file mode 100644 (file)
index 0000000..d9ea162
--- /dev/null
@@ -0,0 +1,65 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_Grab 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_Grab, Tk_Ungrab \- manipulate grab state in an application
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+int
+\fBTk_Grab\fR(\fIinterp, tkwin, grabGlobal\fR)
+.sp
+void
+\fBTk_Ungrab\fR(\fItkwin\fR)
+
+.SH ARGUMENTS
+.AP Tcl_Interp *interp in
+Interpreter to use for error reporting
+.AP Tk_Window tkwin in
+Window on whose behalf the pointer is to be grabbed or released
+.AP int grabGlobal in
+Boolean indicating whether the grab is global or application local
+.BE
+
+.SH DESCRIPTION
+.PP
+These functions are used to set or release a global or
+application local grab.  When a grab is set on a particular window
+in a Tk application, mouse and keyboard events can only be received by
+that window and its descendants.  Mouse and keyboard events for
+windows outside the tree rooted at \fItkwin\fR will be redirected to
+\fItkwin\fR.  If the grab is global, then all mouse and keyboard
+events for windows outside the tree rooted at \fItkwin\fR (even those
+intended for windows in other applications) will be redirected to
+\fItkwin\fR.  If the grab is application local, only mouse and
+keyboard events intended for a windows within the same application
+(but outside the tree rooted at \fItkwin\fR) will be redirected.
+
+.PP
+\fBTk_Grab\fR sets a grab on a particular window.  \fITkwin\fR
+specifies the window on whose behalf the pointer is to be grabbed.
+\fIGrabGlobal\fR indicates whether the grab should be global or
+application local; if it is non-zero, it means the grab should be
+global.  Normally, \fBTk_Grab\fR returns TCL_OK; if an error occurs
+and the grab cannot be set, TCL_ERROR is returned and an error message
+is left if \fIinterp\fR's result.  Once this call completes
+successfully, no window outside the tree rooted at \fItkwin\fR will
+receive pointer- or keyboard-related events until the next call to
+Tk_Ungrab.  If a previous grab was in effect within the application,
+then it is replaced with a new one.
+
+.PP
+\fBTcl_Ungrab\fR releases a grab on the mouse pointer and keyboard, if
+there is one set on the window given by \fItkwin\fR.  Once a grab is
+released, pointer and keyboard events will start being delivered to
+other windows again.
+
+.SH KEYWORDS
+grab, window
diff --git a/tk/doc/HWNDToWindow.3 b/tk/doc/HWNDToWindow.3
new file mode 100644 (file)
index 0000000..05367bf
--- /dev/null
@@ -0,0 +1,30 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_HWNDToWindow 3 "" Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_HWNDToWindow \- Find Tk's window information for a Windows window
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+Tk_Window
+\fBTk_HWNDToWindow\fR(\fIhwnd\fR)
+.SH ARGUMENTS
+.AP HWND hwnd in
+Windows handle for the window.
+.BE
+
+.SH DESCRIPTION
+.PP
+Given a Windows HWND window identifier, this procedure returns the
+corresponding Tk_Window handle. If there is no Tk_Window corresponding
+to \fIhwnd\fR then NULL is returned.
+
+.SH KEYWORDS
+Windows window id
diff --git a/tk/doc/Notifier.3 b/tk/doc/Notifier.3
new file mode 100644 (file)
index 0000000..5016200
--- /dev/null
@@ -0,0 +1,537 @@
+'\"
+'\" Copyright (c) 1995-1997 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) Notifier.3 1.16 97/05/17 17:03:17
+'\" 
+.so man.macros
+.TH Notifier 3 8.0 Tcl "Tcl Library Procedures"
+.BS
+.VS
+.SH NAME
+Tcl_CreateEventSource, Tcl_DeleteEventSource, Tcl_SetMaxBlockTime, Tcl_QueueEvent, Tcl_DeleteEvents, Tcl_WaitForEvent, Tcl_SetTimer, Tcl_ServiceAll, Tcl_ServiceEvent, Tcl_GetServiceMode, Tcl_SetServiceMode \- the event queue and notifier interfaces
+
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+\fBTcl_CreateEventSource\fR(\fIsetupProc, checkProc, clientData\fB)\fR
+.sp
+\fBTcl_DeleteEventSource\fR(\fIsetupProc, checkProc, clientData\fB)\fR
+.sp
+\fBTcl_SetMaxBlockTime\fR(\fItimePtr\fB)\fR
+.sp
+\fBTcl_QueueEvent\fR(\fIevPtr, position\fR)
+.VS
+.sp
+\fBTcl_DeleteEvents\fR(\fIdeleteProc, clientData\fR)
+.sp
+int
+\fBTcl_WaitForEvent\fR(\fItimePtr\fR)
+.sp
+\fBTcl_SetTimer\fR(\fItimePtr\fR)
+.sp
+int
+\fBTcl_ServiceAll\fR()
+.sp
+int
+\fBTcl_ServiceEvent\fR(\fIflags\fR)
+.sp
+int
+\fBTcl_GetServiceMode\fR()
+.sp
+int            
+\fBTcl_SetServiceMode\fR(\fImode\fR)
+.VE
+
+.SH ARGUMENTS
+.AS Tcl_EventDeleteProc milliseconds
+.AS Tcl_EventSetupProc *setupProc
+.AP Tcl_EventSetupProc *setupProc in
+Procedure to invoke to prepare for event wait in \fBTcl_DoOneEvent\fR.
+.AP Tcl_EventCheckProc *checkProc in
+Procedure for \fBTcl_DoOneEvent\fR to invoke after waiting for
+events.  Checks to see if any events have occurred and, if so,
+queues them.
+.AP ClientData clientData in
+Arbitrary one-word value to pass to \fIsetupProc\fR, \fIcheckProc\fR, or
+\fIdeleteProc\fR.
+.AP Tcl_Time *timePtr in
+Indicates the maximum amount of time to wait for an event.  This
+is specified as an interval (how long to wait), not an absolute
+time (when to wakeup).  If the pointer passed to \fBTcl_WaitForEvent\fR
+is NULL, it means there is no maximum wait time:  wait forever if
+necessary.
+.AP Tcl_Event *evPtr in
+An event to add to the event queue.  The storage for the event must
+have been allocated by the caller using \fBTcl_Alloc\fR or \fBckalloc\fR.
+.AP Tcl_QueuePosition position in
+Where to add the new event in the queue:  \fBTCL_QUEUE_TAIL\fR,
+\fBTCL_QUEUE_HEAD\fR, or \fBTCL_QUEUE_MARK\fR.
+.AP int flags in
+What types of events to service.  These flags are the same as those
+passed to \fBTcl_DoOneEvent\fR.
+.AP Tcl_EventDeleteProc *deleteProc in
+Procedure to invoke for each queued event in \fBTcl_DeleteEvents\fR.
+.VS
+.AP int mode in
+Inidicates whether events should be serviced by \fBTcl_ServiceAll\fR.
+Must be one of \fBTCL_SERVICE_NONE\fR or \fBTCL_SERVICE_ALL\fR.
+.VE
+.BE
+
+.SH INTRODUCTION
+.PP
+.VS
+The interfaces described here are used to customize the Tcl event
+loop.  The two most common customizations are to add new sources of
+events and to merge Tcl's event loop with some other event loop, such
+as one provided by an application in which Tcl is embedded.  Each of
+these tasks is described in a separate section below.
+.VE
+.PP
+The procedures in this manual entry are the building blocks out of which
+the Tcl event notifier is constructed.  The event notifier is the lowest
+layer in the Tcl event mechanism.  It consists of three things:
+.IP [1]
+Event sources: these represent the ways in which events can be
+generated.  For example, there is a timer event source that implements
+the \fBTcl_CreateTimerHandler\fR procedure and the \fBafter\fR
+command, and there is a file event source that implements the
+\fBTcl_CreateFileHandler\fR procedure on Unix systems.  An event
+source must work with the notifier to detect events at the right
+times, record them on the event queue, and eventually notify
+higher-level software that they have occurred.  The procedures
+\fBTcl_CreateEventSource\fR, \fBTcl_DeleteEventSource\fR,
+and \fBTcl_SetMaxBlockTime\fR, \fBTcl_QueueEvent\fR, and
+\fBTcl_DeleteEvents\fR are used primarily by event sources.
+.IP [2]
+The event queue: there is a single queue for the whole application,
+containing events that have been detected but not yet serviced.  Event
+sources place events onto the queue so that they may be processed in
+order at appropriate times during the event loop. The event queue
+guarantees a fair discipline of event handling, so that no event
+source can starve the others.  It also allows events to be saved for
+servicing at a future time.
+.VS
+\fBTcl_QueueEvent\fR is used (primarily
+by event sources) to add events to the event queue and 
+\fBTcl_DeleteEvents\fR is used to remove events from the queue without
+processing them.
+.IP [3]
+The event loop: in order to detect and process events, the application
+enters a loop that waits for events to occur, places them on the event
+queue, and then processes them.  Most applications will do this by
+calling the procedure \fBTcl_DoOneEvent\fR, which is described in a
+separate manual entry.
+.PP
+Most Tcl applications need not worry about any of the internals of
+the Tcl notifier.  However, the notifier now has enough flexibility
+to be retargeted either for a new platform or to use an external event
+loop (such as the Motif event loop, when Tcl is embedded in a Motif
+application).  The procedures \fBTcl_WaitForEvent\fR and
+\fBTcl_SetTimer\fR are normally implemented by Tcl, but may be
+replaced with new versions to retarget the notifier (the \fBTcl_Sleep\fR,
+\fBTcl_CreateFileHandler\fR, and \fBTcl_DeleteFileHandler\fR must
+also be replaced; see CREATING A NEW NOTIFIER below for details).
+The procedures \fBTcl_ServiceAll\fR, \fBTcl_ServiceEvent\fR,
+\fBTcl_GetServiceMode\fR, and \fBTcl_SetServiceMode\fR are provided
+to help connect Tcl's event loop to an external event loop such as
+Motif's.
+.SH "NOTIFIER BASICS"
+.VE
+.PP
+The easiest way to understand how the notifier works is to consider
+what happens when \fBTcl_DoOneEvent\fR is called.
+\fBTcl_DoOneEvent\fR is passed a \fIflags\fR argument that indicates
+what sort of events it is OK to process and also whether or not to
+block if no events are ready.  \fBTcl_DoOneEvent\fR does the following
+things:
+.IP [1]
+Check the event queue to see if it contains any events that can
+be serviced.  If so, service the first possible event, remove it
+.VS
+from the queue, and return.  It does this by calling
+\fBTcl_ServiceEvent\fR and passing in the \fIflags\fR argument.
+.VE
+.IP [2]
+Prepare to block for an event.  To do this, \fBTcl_DoOneEvent\fR
+invokes a \fIsetup procedure\fR in each event source.
+The event source will perform event-source specific initialization and
+.VS
+possibly call \fBTcl_SetMaxBlockTime\fR to limit how long
+.VE
+\fBTcl_WaitForEvent\fR will block if no new events occur.
+.IP [3]
+Call \fBTcl_WaitForEvent\fR.  This procedure is implemented differently
+on different platforms;  it waits for an event to occur, based on the
+information provided by the event sources.
+It may cause the application to block if \fItimePtr\fR specifies
+an interval other than 0.
+\fBTcl_WaitForEvent\fR returns when something has happened,
+such as a file becoming readable or the interval given by \fItimePtr\fR
+expiring.  If there are no events for \fBTcl_WaitForEvent\fR to
+wait for, so that it would block forever, then it returns immediately
+and \fBTcl_DoOneEvent\fR returns 0.
+.IP [4]
+Call a \fIcheck procedure\fR in each event source.  The check
+procedure determines whether any events of interest to this source
+occurred.  If so, the events are added to the event queue.
+.IP [5]
+Check the event queue to see if it contains any events that can
+be serviced.  If so, service the first possible event, remove it
+from the queue, and return.
+.IP [6]
+See if there are idle callbacks pending. If so, invoke all of them and
+return.
+.IP [7]
+Either return 0 to indicate that no events were ready, or go back to
+step [2] if blocking was requested by the caller.
+
+.SH "CREATING A NEW EVENT SOURCE"
+.PP
+An event source consists of three procedures invoked by the notifier,
+plus additional C procedures that are invoked by higher-level code
+to arrange for event-driven callbacks.  The three procedures called
+by the notifier consist of the setup and check procedures described
+above, plus an additional procedure that is invoked when an event
+is removed from the event queue for servicing.
+.PP
+The procedure \fBTcl_CreateEventSource\fR creates a new event source.
+Its arguments specify the setup procedure and check procedure for
+the event source.
+\fISetupProc\fR should match the following prototype:
+.CS
+typedef void Tcl_EventSetupProc(
+       ClientData \fIclientData\fR,
+       int \fIflags\fR);
+.CE
+The \fIclientData\fR argument will be the same as the \fIclientData\fR
+argument to \fBTcl_CreateEventSource\fR;  it is typically used to
+point to private information managed by the event source.
+The \fIflags\fR argument will be the same as the \fIflags\fR
+argument passed to \fBTcl_DoOneEvent\fR except that it will never
+be 0 (\fBTcl_DoOneEvent\fR replaces 0 with \fBTCL_ALL_EVENTS\fR).
+\fIFlags\fR indicates what kinds of events should be considered;
+if the bit corresponding to this event source isn't set, the event
+source should return immediately without doing anything.  For
+example, the file event source checks for the \fBTCL_FILE_EVENTS\fR
+bit.
+.PP
+\fISetupProc\fR's job is to make sure that the application wakes up
+when events of the desired type occur.  This is typically done in a
+platform-dependent fashion.  For example, under Unix an event source
+might call \fBTcl_CreateFileHandler\fR; under Windows it might
+request notification with a Windows event.  For timer-driven event
+sources such as timer events or any polled event, the event source
+can call \fBTcl_SetMaxBlockTime\fR to force the application to wake
+up after a specified time even if no events have occurred.
+.VS
+If no event source calls \fBTcl_SetMaxBlockTime\fR
+then \fBTcl_WaitForEvent\fR will wait as long as necessary for an
+event to occur; otherwise, it will only wait as long as the shortest
+interval passed to \fBTcl_SetMaxBlockTime\fR by one of the event
+sources.  If an event source knows that it already has events ready to
+report, it can request a zero maximum block time.  For example, the
+setup procedure for the X event source looks to see if there are
+events already queued.  If there are, it calls
+\fBTcl_SetMaxBlockTime\fR with a 0 block time so that
+\fBTcl_WaitForEvent\fR does not block if there is no new data on the X
+connection.
+.VE
+The \fItimePtr\fR argument to \fBTcl_WaitForEvent\fR points to
+a structure that describes a time interval in seconds and
+microseconds:
+.CS
+typedef struct Tcl_Time {
+       long \fIsec\fR;
+       long \fIusec\fR;
+} Tcl_Time;
+.CE
+The \fIusec\fR field should be less than 1000000.
+.PP
+.VS
+Information provided to \fBTcl_SetMaxBlockTime\fR
+is only used for the next call to \fBTcl_WaitForEvent\fR; it is
+discarded after \fBTcl_WaitForEvent\fR returns.
+.VE
+The next time an event wait is done each of the event sources'
+setup procedures will be called again, and they can specify new
+information for that event wait.
+.PP
+.VS
+If the application uses an external event loop rather than
+\fBTcl_DoOneEvent\fR, the event sources may need to call
+\fBTcl_SetMaxBlockTime\fR at other times.  For example, if a new event
+handler is registered that needs to poll for events, the event source
+may call \fBTcl_SetMaxBlockTime\fR to set the block time to zero to
+force the external event loop to call Tcl.  In this case,
+\fBTcl_SetMaxBlockTime\fR invokes \fBTcl_SetTimer\fR with the shortest
+interval seen since the last call to \fBTcl_DoOneEvent\fR or
+\fBTcl_ServiceAll\fR.
+.PP
+In addition to the generic procedure \fBTcl_SetMaxBlockTime\fR, other
+platform-specific procedures may also be available for
+\fIsetupProc\fR, if there is additional information needed by
+\fBTcl_WaitForEvent\fR on that platform.  For example, on Unix systems
+the \fBTcl_CreateFileHandler\fR interface can be used to wait for file events.
+.VE
+.PP
+The second procedure provided by each event source is its check
+procedure, indicated by the \fIcheckProc\fR argument to
+\fBTcl_CreateEventSource\fR.  \fICheckProc\fR must match the
+following prototype:
+.CS
+typedef void Tcl_EventCheckProc(
+       ClientData \fIclientData\fR,
+       int \fIflags\fR);
+.CE
+The arguments to this procedure are the same as those for \fIsetupProc\fR.
+\fBCheckProc\fR is invoked by \fBTcl_DoOneEvent\fR after it has waited
+for events.  Presumably at least one event source is now prepared to
+queue an event.  \fBTcl_DoOneEvent\fR calls each of the event sources
+in turn, so they all have a chance to queue any events that are ready.
+The check procedure does two things.  First, it must see if any events
+have triggered.  Different event sources do this in different ways.
+.PP
+If an event source's check procedure detects an interesting event, it
+must add the event to Tcl's event queue.  To do this, the event source
+calls \fBTcl_QueueEvent\fR.  The \fIevPtr\fR argument is a pointer to
+a dynamically allocated structure containing the event (see below for
+more information on memory management issues).  Each event source can
+define its own event structure with whatever information is relevant
+to that event source.  However, the first element of the structure
+must be a structure of type \fBTcl_Event\fR, and the address of this
+structure is used when communicating between the event source and the
+rest of the notifier.  A \fBTcl_Event\fR has the following definition:
+.CS
+typedef struct Tcl_Event {
+    Tcl_EventProc *\fIproc\fR;
+    struct Tcl_Event *\fInextPtr\fR;
+};
+.CE
+The event source must fill in the \fIproc\fR field of
+the event before calling \fBTcl_QueueEvent\fR.
+The \fInextPtr\fR is used to link together the events in the queue
+and should not be modified by the event source.
+.PP
+An event may be added to the queue at any of three positions, depending
+on the \fIposition\fR argument to \fBTcl_QueueEvent\fR:
+.IP \fBTCL_QUEUE_TAIL\fR 24
+Add the event at the back of the queue, so that all other pending
+events will be serviced first.  This is almost always the right
+place for new events.
+.IP \fBTCL_QUEUE_HEAD\fR 24
+Add the event at the front of the queue, so that it will be serviced
+before all other queued events.
+.IP \fBTCL_QUEUE_MARK\fR 24
+Add the event at the front of the queue, unless there are other
+events at the front whose position is \fBTCL_QUEUE_MARK\fR;  if so,
+add the new event just after all other \fBTCL_QUEUE_MARK\fR events.
+This value of \fIposition\fR is used to insert an ordered sequence of
+events at the front of the queue, such as a series of
+Enter and Leave events synthesized during a grab or ungrab operation
+in Tk.
+.PP
+.VS
+When it is time to handle an event from the queue (steps 1 and 4
+above) \fBTcl_ServiceEvent\fR will invoke the \fIproc\fR specified
+.VE
+in the first queued \fBTcl_Event\fR structure.
+\fIProc\fR must match the following prototype:
+.CS
+typedef int Tcl_EventProc(
+       Tcl_Event *\fIevPtr\fR,
+       int \fIflags\fR);
+.CE
+The first argument to \fIproc\fR is a pointer to the event, which will
+be the same as the first argument to the \fBTcl_QueueEvent\fR call that
+added the event to the queue.
+The second argument to \fIproc\fR is the \fIflags\fR argument for the
+.VS
+current call to \fBTcl_ServiceEvent\fR;  this is used by the event source
+.VE
+to return immediately if its events are not relevant.
+.PP
+It is up to \fIproc\fR to handle the event, typically by invoking
+one or more Tcl commands or C-level callbacks.
+Once the event source has finished handling the event it returns 1
+to indicate that the event can be removed from the queue.
+If for some reason the event source decides that the event cannot
+be handled at this time, it may return 0 to indicate that the event
+.VS
+should be deferred for processing later;  in this case \fBTcl_ServiceEvent\fR
+.VE
+will go on to the next event in the queue and attempt to service it.
+There are several reasons why an event source might defer an event.
+One possibility is that events of this type are excluded by the
+\fIflags\fR argument.
+For example, the file event source will always return 0 if the
+\fBTCL_FILE_EVENTS\fR bit isn't set in \fIflags\fR.
+Another example of deferring events happens in Tk if
+\fBTk_RestrictEvents\fR has been invoked to defer certain kinds
+of window events.
+.PP
+.VS
+When \fIproc\fR returns 1, \fBTcl_ServiceEvent\fR will remove the
+event from the event queue and free its storage.
+Note that the storage for an event must be allocated by
+the event source (using \fBTcl_Alloc\fR or the Tcl macro \fBckalloc\fR)
+before calling \fBTcl_QueueEvent\fR, but it
+will be freed by \fBTcl_ServiceEvent\fR, not by the event source.
+.PP
+\fBTcl_DeleteEvents\fR can be used to explicitly remove one or more
+events from the event queue.  \fBTcl_DeleteEvents\fR calls \fIproc\fR
+for each event in the queue, deleting those for with the procedure
+returns 1.  Events for which the procedure returns 0 are left in the
+queue.  \fIProc\fR should match the following prototype:
+.CS
+typedef int Tcl_EventDeleteProc(
+       Tcl_Event *\fIevPtr\fR,
+       ClientData \fIclientData\fR);
+.CE
+The \fIclientData\fR argument will be the same as the \fIclientData\fR
+argument to \fBTcl_DeleteEvents\fR; it is typically used to point to
+private information managed by the event source.  The \fIevPtr\fR will
+point to the next event in the queue.
+.VE
+
+.SH "CREATING A NEW NOTIFIER"
+.PP
+The notifier consists of all the procedures described in this manual
+entry, plus \fBTcl_DoOneEvent\fR and \fBTcl_Sleep\fR, which are
+.VS
+available on all platforms, and \fBTcl_CreateFileHandler\fR and
+\fBTcl_DeleteFileHandler\fR, which are Unix-specific.  Most of these
+procedures are generic, in that they are the same for all notifiers.
+However, five of the procedures are notifier-dependent:
+\fBTcl_SetTimer\fR, \fBTcl_Sleep\fR, \fBTcl_WaitForEvent\fR,
+\fBTcl_CreateFileHandler\fR and \fBTcl_DeleteFileHandler\fR.  To
+support a new platform or to integrate Tcl with an
+application-specific event loop, you must write new versions of these
+procedures.
+.PP
+\fBTcl_WaitForEvent\fR is the lowest-level procedure in the notifier;
+it is responsible for waiting for an ``interesting'' event to occur or
+for a given time to elapse.  Before \fBTcl_WaitForEvent\fR is invoked,
+each of the event sources' setup procedure will have been invoked.
+The \fItimePtr\fR argument to
+\fBTcl_WaitForEvent\fR gives the maximum time to block for an event,
+based on calls to \fBTcl_SetMaxBlockTime\fR made by setup procedures
+and on other information (such as the \fBTCL_DONT_WAIT\fR bit in
+\fIflags\fR).
+.PP
+Ideally, \fBTcl_WaitForEvent\fR should only wait for an event
+to occur; it should not actually process the event in any way.
+Later on, the
+event sources will process the raw events and create Tcl_Events on
+the event queue in their \fIcheckProc\fR procedures.
+However, on some platforms (such as Windows) this isn't possible;
+events may be processed in \fBTcl_WaitForEvent\fR, including queuing
+Tcl_Events and more (for example, callbacks for native widgets may be
+invoked).  The return value from \fBTcl_WaitForEvent\fR must be either
+0, 1, or \-1.  On platforms such as Windows where events get processed in
+\fBTcl_WaitForEvent\fR, a return value of 1 means that there may be more
+events still pending that haven't been processed.  This is a sign to the
+caller that it must call \fBTcl_WaitForEvent\fR again if it wants all
+pending events to be processed. A 0 return value means that calling
+\fBTcl_WaitForEvent\fR again will not have any effect: either this is a
+platform where \fBTcl_WaitForEvent\fR only waits without doing any event
+processing, or \fBTcl_WaitForEvent\fR knows for sure that there are no
+additional events to process (e.g. it returned because the time
+elapsed).  Finally, a return value of \-1 means that the event loop is
+no longer operational and the application should probably unwind and
+terminate.  Under Windows this happens when a WM_QUIT message is received;
+under Unix it happens when \fBTcl_WaitForEvent\fR would have waited
+forever because there were no active event sources and the timeout was
+infinite.
+.PP
+If the notifier will be used with an external event loop, then it must
+also support the \fBTcl_SetTimer\fR interface.  \fBTcl_SetTimer\fR is
+invoked by \fBTcl_SetMaxBlockTime\fR whenever the maximum blocking
+time has been reduced.  \fBTcl_SetTimer\fR should arrange for the
+external event loop to invoke \fBTcl_ServiceAll\fR after the specified
+interval even if no events have occurred.  This interface is needed
+because \fBTcl_WaitForEvent\fR isn't invoked when there is an external
+event loop.  If the
+notifier will only be used from \fBTcl_DoOneEvent\fR, then
+\fBTcl_SetTimer\fR need not do anything.
+.PP
+On Unix systems, the file event source also needs support from the
+notifier.  The file event source consists of the
+\fBTcl_CreateFileHandler\fR and \fBTcl_DeleteFileHandler\fR
+procedures, which are described elsewhere.
+.PP
+The \fBTcl_Sleep\fR and \fBTcl_DoOneEvent\fR interfaces are described
+elsewhere.
+.PP
+The easiest way to create a new notifier is to look at the code
+for an existing notifier, such as the files \fBunix/tclUnixNotfy.c\fR
+or \fBwin/tclWinNotify.c\fR in the Tcl source distribution.
+
+.SH "EXTERNAL EVENT LOOPS"
+.PP
+The notifier interfaces are designed so that Tcl can be embedded into
+applications that have their own private event loops.  In this case,
+the application does not call \fBTcl_DoOneEvent\fR except in the case
+of recursive event loops such as calls to the Tcl commands \fBupdate\fR
+or \fBvwait\fR.  Most of the time is spent in the external event loop
+of the application.  In this case the notifier must arrange for the
+external event loop to call back into Tcl when something
+happens on the various Tcl event sources.  These callbacks should
+arrange for appropriate Tcl events to be placed on the Tcl event queue.
+.PP
+Because the external event loop is not calling \fBTcl_DoOneEvent\fR on
+a regular basis, it is up to the notifier to arrange for
+\fBTcl_ServiceEvent\fR to be called whenever events are pending on the
+Tcl event queue.  The easiest way to do this is to invoke
+\fBTcl_ServiceAll\fR at the end of each callback from the external
+event loop.  This will ensure that all of the event sources are
+polled, any queued events are serviced, and any pending idle handlers
+are processed before returning control to the application.  In
+addition, event sources that need to poll for events can call
+\fBTcl_SetMaxBlockTime\fR to force the external event loop to call
+Tcl even if no events are available on the system event queue.
+.PP
+As a side effect of processing events detected in the main external
+event loop, Tcl may invoke \fBTcl_DoOneEvent\fR to start a recursive event
+loop in commands like \fBvwait\fR.  \fBTcl_DoOneEvent\fR will invoke
+the external event loop, which will result in callbacks as described
+in the preceding paragraph, which will result in calls to
+\fBTcl_ServiceAll\fR.  However, in these cases it is undesirable to
+service events in \fBTcl_ServiceAll\fR.  Servicing events there is
+unnecessary because control will immediately return to the
+external event loop and hence to \fBTcl_DoOneEvent\fR, which can
+service the events itself.  Furthermore, \fBTcl_DoOneEvent\fR is
+supposed to service only a single event, whereas \fBTcl_ServiceAll\fR
+normally services all pending events.  To handle this situation,
+\fBTcl_DoOneEvent\fR sets a flag for \fBTcl_ServiceAll\fR
+that causes it to return without servicing any events.
+This flag is called the \fIservice mode\fR;
+\fBTcl_DoOneEvent\fR restores it to its previous value before it returns.
+.PP
+In some cases, however, it may be necessary for \fBTcl_ServiceAll\fR
+to service events
+even when it has been invoked from \fBTcl_DoOneEvent\fR.  This happens
+when there is yet another recursive event loop invoked via an
+event handler called by \fBTcl_DoOneEvent\fR (such as one that is
+part of a native widget).  In this case, \fBTcl_DoOneEvent\fR may not
+have a chance to service events so \fBTcl_ServiceAll\fR must service
+them all.  Any recursive event loop that calls an external event
+loop rather than \fBTcl_DoOneEvent\fR must reset the service mode so
+that all events get processed in \fBTcl_ServiceAll\fR.  This is done
+by invoking the \fBTcl_SetServiceMode\fR procedure.  If
+\fBTcl_SetServiceMode\fR is passed \fBTCL_SERVICE_NONE\fR, then calls
+to \fBTcl_ServiceAll\fR will return immediately without processing any
+events.  If \fBTcl_SetServiceMode\fR is passed \fBTCL_SERVICE_ALL\fR,
+then calls to \fBTcl_ServiceAll\fR will behave normally.
+\fBTcl_SetServiceMode\fR returns the previous value of the service
+mode, which should be restored when the recursive loop exits.
+\fBTcl_GetServiceMode\fR returns the current value of the service
+mode.
+.VE
+
+.SH KEYWORDS
+event, notifier, event queue, event sources, file events, timer, idle, service mode
diff --git a/tk/doc/Preserve.3 b/tk/doc/Preserve.3
new file mode 100644 (file)
index 0000000..a2c7d28
--- /dev/null
@@ -0,0 +1,103 @@
+'\"
+'\" Copyright (c) 1990 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) Preserve.3 1.13 96/05/28 09:26:12
+'\" 
+.so man.macros
+.TH Tcl_Preserve 3 7.5 Tcl "Tcl Library Procedures"
+.BS
+.SH NAME
+Tcl_Preserve, Tcl_Release, Tcl_EventuallyFree \- avoid freeing storage while it's being used
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+\fBTcl_Preserve\fR(\fIclientData\fR)
+.sp
+\fBTcl_Release\fR(\fIclientData\fR)
+.sp
+\fBTcl_EventuallyFree\fR(\fIclientData, freeProc\fR)
+.SH ARGUMENTS
+.AS Tcl_FreeProc clientData
+.AP ClientData clientData in
+Token describing structure to be freed or reallocated.  Usually a pointer
+to memory for structure.
+.AP Tcl_FreeProc *freeProc in
+Procedure to invoke to free \fIclientData\fR.
+.BE
+
+.SH DESCRIPTION
+.PP
+These three procedures help implement a simple reference count mechanism
+for managing storage.  They are designed to solve a problem
+having to do with widget deletion, but are also useful in many other
+situations.  When a widget is deleted, its
+widget record (the structure holding information specific to the
+widget) must be returned to the storage allocator.
+However, it's possible that the widget record is in active use
+by one of the procedures on the stack at the time of the deletion.
+This can happen, for example, if the command associated with a button
+widget causes the button to be destroyed:  an X event causes an
+event-handling C procedure in the button to be invoked, which in
+turn causes the button's associated Tcl command to be executed,
+which in turn causes the button to be deleted, which in turn causes
+the button's widget record to be de-allocated.
+Unfortunately, when the Tcl command returns, the button's
+event-handling procedure will need to reference the
+button's widget record.
+Because of this, the widget record must not be freed as part of the
+deletion, but must be retained until the event-handling procedure has
+finished with it.
+In other situations where the widget is deleted, it may be possible
+to free the widget record immediately.
+.PP
+\fBTcl_Preserve\fR and \fBTcl_Release\fR
+implement short-term reference counts for their \fIclientData\fR
+argument.
+The \fIclientData\fR argument identifies an object and usually
+consists of the address of a structure.
+The reference counts guarantee that an object will not be freed
+until each call to \fBTcl_Preserve\fR for the object has been
+matched by calls to \fBTcl_Release\fR.
+There may be any number of unmatched \fBTcl_Preserve\fR calls
+in effect at once.
+.PP
+\fBTcl_EventuallyFree\fR is invoked to free up its \fIclientData\fR
+argument.
+It checks to see if there are unmatched \fBTcl_Preserve\fR calls
+for the object.
+If not, then \fBTcl_EventuallyFree\fR calls \fIfreeProc\fR immediately.
+Otherwise \fBTcl_EventuallyFree\fR records the fact that \fIclientData\fR
+needs eventually to be freed.
+When all calls to \fBTcl_Preserve\fR have been matched with
+calls to \fBTcl_Release\fR then \fIfreeProc\fR will be called by
+\fBTcl_Release\fR to do the cleanup.
+.PP
+All the work of freeing the object is carried out by \fIfreeProc\fR.
+\fIFreeProc\fR must have arguments and result that match the
+type \fBTcl_FreeProc\fR:
+.CS
+typedef void Tcl_FreeProc(char *\fIblockPtr\fR);
+.CE
+The \fIblockPtr\fR argument to \fIfreeProc\fR will be the
+same as the \fIclientData\fR argument to \fBTcl_EventuallyFree\fR.
+The type of \fIblockPtr\fR (\fBchar *\fR) is different than the type of the
+\fIclientData\fR argument to \fBTcl_EventuallyFree\fR for historical
+reasons, but the value is the same.
+.PP
+This mechanism can be used to solve the problem described above
+by placing \fBTcl_Preserve\fR and \fBTcl_Release\fR calls around
+actions that may cause undesired storage re-allocation.  The
+mechanism is intended only for short-term use (i.e. while procedures
+are pending on the stack);  it will not work efficiently as a
+mechanism for long-term reference counts.
+The implementation does not depend in any way on the internal
+structure of the objects being freed;  it keeps the reference
+counts in a separate structure.
+
+.SH KEYWORDS
+free, reference count, storage
diff --git a/tk/doc/SetOptions.3 b/tk/doc/SetOptions.3
new file mode 100644 (file)
index 0000000..dcb8f96
--- /dev/null
@@ -0,0 +1,503 @@
+'\"
+'\" Copyright (c) 1998 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_SetOptions 3 8.1 Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_CreateOptionTable, Tk_DeleteOptionTable, Tk_InitOptions, Tk_SetOptions, Tk_FreeSavedOptions, Tk_RestoreSavedOptions, Tk_GetOptionValue,  Tk_GetOptionInfo, Tk_FreeConfigOptions, Tk_Offset \- process configuration options
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+Tk_OptionTable
+\fBTk_CreateOptionTable(\fIinterp, templatePtr\fB)\fR
+.sp
+\fBTk_DeleteOptionTable(\fIoptionTable\fB)\fR
+.sp
+int
+\fBTk_InitOptions(\fIinterp, recordPtr, optionTable, tkwin\fB)\fR
+.sp
+int
+\fBTk_SetOptions(\fIinterp, recordPtr, optionTable, objc, objv, tkwin, savePtr, maskPtr\fB)\fR
+.sp
+\fBTk_FreeSavedOptions(\fIsavedPtr\fB)\fR
+.sp
+\fBTk_RestoreSavedOptions(\fIsavedPtr\fB)\fR
+.sp
+Tcl_Obj *
+\fBTk_GetOptionValue(\fIinterp, recordPtr, optionTable, namePtr, tkwin\fB)\fR
+.sp
+Tcl_Obj *
+\fBTk_GetOptionInfo(\fIinterp, recordPtr, optionTable, namePtr, tkwin\fB)\fR
+.sp
+\fBTk_FreeConfigOptions(\fIrecordPtr, optionTable, tkwin\fB)\fR
+.sp
+int
+\fBTk_Offset(\fItype, field\fB)\fR
+.SH ARGUMENTS
+.AS Tk_SavedOptions "*CONST objv[]" in/out
+.AP Tcl_Interp *interp in
+A Tcl interpreter.  Most procedures use this only for returning error
+messages; if it is NULL then no error messages are returned.  For
+\fBTk_CreateOptionTable\fR the value cannot be NULL; it gives the
+interpreter in which the option table will be used.
+.AP Tk_OptionSpec *templatePtr in
+Points to an array of static information that describes the configuration
+options that are supported.  Used to build a Tk_OptionTable.  The information
+pointed to by this argument must exist for the lifetime of the Tk_OptionTable.
+.AP Tk_OptionTable optionTable in
+Token for an option table.  Must have been returned by a previous call
+to \fBTk_CreateOptionTable\fR.
+.AP char *recordPtr in/out
+Points to structure in which values of configuration options are stored;
+fields of this record are modified by procedures such as \fBTk_SetOptions\fR
+and read by procedures such as \fBTk_GetOptionValue\fR.
+.AP Tk_Window tkwin in
+For options such as TK_OPTION_COLOR, this argument indicates
+the window in which the option will be used.  If \fIoptionTable\fR uses
+no window-dependent options, then a NULL value may be supplied for
+this argument.
+.AP int objc in
+Number of values in \fIobjv\fR.
+.AP Tcl_Obj "*CONST objv[]" in
+Command-line arguments for setting configuring options.
+.AP Tk_SavedOptions *savePtr out
+If not NULL, the structure pointed to by this argument is filled
+in with the old values of any options that were modified and old
+values are restored automatically if an error occurs in \fBTk_SetOptions\fR.
+.AP int *maskPtr out
+If not NULL, the word pointed to by \fImaskPtr\fR is filled in with the
+bit-wise OR of the \fItypeMask\fR fields for the options that
+were modified.
+.AP Tk_SavedOptions *savedPtr in/out
+Points to a structure previously filled in by \fBTk_SetOptions\fR with
+old values of modified options.
+.AP Tcl_Obj *namePtr in
+The value of this object is the name of a particular option.  If NULL
+is passed to \fBTk_GetOptionInfo\fR then information is returned for
+all options.  Must not be NULL when \fBTk_GetOptionValue\fR is called.
+.AP "type name" type in
+The name of the type of a record.
+.AP "field name" field in
+The name of a field in records of type \fItype\fR.
+.BE
+.SH DESCRIPTION
+.PP
+These procedures handle most of the details of parsing configuration
+options such as those for Tk widgets.  Given a description of what
+options are supported, these procedures handle all the details of
+parsing options and storing their values into a C structure associated
+with the widget or object. The procedures were designed primarily for
+widgets in Tk, but they can also be used for other kinds of objects that
+have configuration options.  In the rest of this manual page ``widget'' will
+be used to refer to the object whose options are being managed; in
+practice the object may not actually be a widget.  The term ``widget
+record'' is used to refer to the C-level structure in
+which information about a particular widget or object is stored.
+.PP
+Note: the easiest way to learn how to use these procedures is to
+look at a working example.  In Tk, the simplest example is the code
+that implements the button family of widgets, which is an \fBtkButton.c\fR.
+Other examples are in \fBtkSquare.c\fR and \fBtkMenu.c\fR.
+.PP
+In order to use these procedures, the code that implements the widget
+must contain a static array of Tk_OptionSpec structures. This is a
+template that describes the various options supported by that class of
+widget; there is a separate template for each kind of widget.  The
+template contains information such as the name of each option, its type,
+its default value, and where the value of the option is stored in the
+widget record.  See TEMPLATES below for more detail.
+.PP
+In order to process configuration options efficiently, the static
+template must be augmented with additional information that is available
+only at runtime.  The procedure \fBTk_CreateOptionTable\fR creates this
+dynamic information from the template and returns a Tk_OptionTable token
+that describes both the static and dynamic information.  All of the
+other procedures, such as \fBTk_SetOptions\fR, take a Tk_OptionTable
+token as argument.  Typically, \fBTk_CreateOptionTable\fR is called the
+first time that a widget of a particular class is created and the
+resulting Tk_OptionTable is used in the future for all widgets of that
+class.  A Tk_OptionTable may be used only in a single interpreter, given
+by the \fIinterp\fR argument to \fBTk_CreateOptionTable\fR.  When an
+option table is no longer needed \fBTk_DeleteOptionTable\fR should be
+called to free all of its resources.  All of the option tables
+for a Tcl interpreter are freed automatically if the interpreter is deleted.
+.PP
+\fBTk_InitOptions\fR is invoked when a new widget is created to set
+the default values for all of the widget's configuration options.
+\fBTk_InitOptions\fR is passed a token for an option table (\fIoptionTable\fR)
+and a pointer to a widget record (\fIrecordPtr\fR), which is the C
+structure that holds information about this widget. \fBTk_InitOptions\fR
+uses the information in the option table to
+choose an appropriate default for each option, then it stores the default
+value directly into the widget record, overwriting any information that
+was already present in the widget record.  \fBTk_InitOptions\fR normally
+returns TCL_OK.  If an error occurred while setting the default values
+(e.g., because a default value was erroneous) then TCL_ERROR is returned
+and an error message is left in \fIinterp\fR's result if \fIinterp\fR
+isn't NULL.
+.PP
+\fBTk_SetOptions\fR is invoked to modify configuration options based
+on information specified in a Tcl command.  The command might be one that
+creates a new widget, or a command that modifies options on an existing
+widget.  The \fIobjc\fR and \fIobjv\fR arguments describe the
+values of the arguments from the Tcl command.  \fIObjv\fR must contain
+an even number of objects: the first object of each pair gives the name of
+an option and the second object gives the new value for that option.
+\fBTk_SetOptions\fR looks up each name in \fIoptionTable\fR, checks that
+the new value of the option conforms to the type in \fIoptionTable\fR,
+and stores the value of the option into the widget record given by
+\fIrecordPtr\fR.  \fBTk_SetOptions\fR normally returns TCL_OK.  If
+an error occurred (such as an unknown option name or an illegal option
+value) then TCL_ERROR is returned and an error message is left in
+\fIinterp\fR's result if \fIinterp\fR isn't NULL.
+.PP
+\fBTk_SetOptions\fR has two additional features.  First, if the
+\fImaskPtr\fR argument isn't NULL then it points to an integer
+value that is filled in with information about the options that were
+modified.  For each option in the template passed to
+\fBTk_CreateOptionTable\fR there is a \fItypeMask\fR field.  The
+bits of this field are defined by the code that implements the widget;
+for example, each bit might correspond to a particular configuration option.
+Alternatively, bits might be used functionally.  For example, one bit might
+be used for redisplay: all options that affect the widget's display, such
+that changing the option requires the widget to be redisplayed, might have
+that bit set.  Another bit might indicate that the geometry of the widget
+must be recomputed, and so on.  \fBTk_SetOptions\fR OR's together the
+\fItypeMask\fR fields from all the options that were modified and returns
+this value at *\fImaskPtr\fR; the caller can then use this information
+to optimize itself so that, for example, it doesn't redisplay the widget
+if the modified options don't affect the widget's appearance.
+.PP
+The second additional feature of \fBTk_SetOptions\fR has to do with error
+recovery.  If an error occurs while processing configuration options, this
+feature makes it possible to restore all the configuration options to their
+previous values.  Errors can occur either while processing options in
+\fBTk_SetOptions\fR or later in the caller.  In many cases the caller does
+additional processing after \fBTk_SetOptions\fR returns; for example, it
+might use an option value to set a trace on a variable and may detect
+an error if the variable is an array instead of a scalar.  Error recovery
+is enabled by passing in a non-NULL value for the \fIsavePtr\fR argument
+to \fBTk_SetOptions\fR; this should be a pointer to an uninitialized
+Tk_SavedOptions structure on the caller's stack.  \fBTk_SetOptions\fR
+overwrites the structure pointed to by \fIsavePtr\fR with information
+about the old values of any options modified by the procedure.
+If \fBTk_SetOptions\fR returns successfully, the
+caller uses the structure in one of two ways.  If the caller completes
+its processing of the new options without any errors, then it must pass
+the structure to \fBTk_FreeSavedOptions\fR so that the old values can be
+freed.  If the caller detects an error in its processing of the new
+options, then it should pass the structure to \fBTk_RestoreSavedOptions\fR,
+which will copy the old values back into the widget record and free
+the new values.
+If \fBTk_SetOptions\fR detects an error then it automatically restores
+any options that had already been modified and leaves *\fIsavePtr\fR in
+an empty state: the caller need not call either \fBTk_FreeSavedOptions\fR or
+\fBTk_RestoreSavedOptions\fR.
+If the \fIsavePtr\fR argument to \fBTk_SetOptions\fR is NULL then
+\fBTk_SetOptions\fR frees each old option value immediately when it sets a new
+value for the option.  In this case, if an error occurs in the third
+option, the old values for the first two options cannot be restored.
+.PP
+\fBTk_GetOptionValue\fR returns the current value of a configuration option
+for a particular widget.  The \fInamePtr\fR argument contains the name of
+an option; \fBTk_GetOptionValue\fR uses \fIoptionTable\fR
+to lookup the option and extract its value from the widget record
+pointed to by \fIrecordPtr\fR, then it returns an object containing
+that value.  If an error occurs (e.g., because \fInamePtr\fR contains an
+unknown option name) then NULL is returned and an error message is left
+in \fIinterp\fR's result unless \fIinterp\fR is NULL.
+.PP
+\fBTk_GetOptionInfo\fR returns information about configuration options in
+a form suitable for \fBconfigure\fR widget commands.  If the \fInamePtr\fR
+argument is not NULL, it points to an object that gives the name of a
+configuration option; \fBTk_GetOptionInfo\fR returns an object containing
+a list with five elements, which are the name of the option, the name and
+class used for the option in the option database, the default value for
+the option, and the current value for the option.  If the \fInamePtr\fR
+argument is NULL, then \fBTk_GetOptionInfo\fR returns information about
+all options in the form of a list of lists; each sublist describes one
+option.  Synonym options are handled differently depending on whether
+\fInamePtr\fR is NULL: if \fInamePtr\fR is NULL then the sublist for
+each synonym option has only two elements, which are the name of the
+option and the name of the other option that it refers to; if \fInamePtr\fR
+is non-NULL and names a synonym option then the object returned
+is the five-element list
+for the other option that the synonym refers to.  If an error occurs
+(e.g., because \fInamePtr\fR contains an unknown option name) then NULL
+is returned and an error message is left in \fIinterp\fR's result unless
+\fIinterp\fR is NULL.
+.PP
+\fBTk_FreeConfigOptions\fR must be invoked when a widget is deleted.
+It frees all of the resources associated with any of the configuration
+options defined in \fIrecordPtr\fR by \fIoptionTable\fR.
+.PP
+The \fBTk_Offset\fR macro is provided as a safe way of generating the
+\fIobjOffset\fR and \fIinternalOffset\fR values for entries in
+Tk_OptionSpec structures.  It takes two arguments: the name of a type
+of record, and the name of a field in that record. It returns the byte
+offset of the named field in records of the given type.
+
+.SH "TEMPLATES"
+.PP
+The array of Tk_OptionSpec structures passed to \fBTk_CreateOptionTable\fR
+via its \fItemplatePtr\fR argument describes the configuration options
+supported by a particular class of widgets.  Each structure specifies
+one configuration option and has the following fields:
+.CS
+typedef struct {
+       Tk_OptionType \fItype\fR;
+       char *\fIoptionName\fR;
+       char *\fIdbName\fR;
+       char *\fIdbClass\fR;
+       char *\fIdefValue\fR;
+       int \fIobjOffset\fR;
+       int \fIinternalOffset\fR;
+       int \fIflags\fR;
+       ClientData \fIclientData\fR;
+       int \fItypeMask\fR;
+} Tk_OptionSpec;
+.CE
+The \fItype\fR field indicates what kind of configuration option this is
+(e.g. TK_OPTION_COLOR for a color value, or TK_OPTION_INT for
+an integer value).  \fIType\fR determines how the
+value of the option is parsed (more on this below).
+The \fIoptionName\fR field is a string such as \fB\-font\fR or \fB\-bg\fR;
+it is the name used for the option in Tcl commands and passed to
+procedures via the \fIobjc\fR or \fInamePtr\fR arguments.
+The \fIdbName\fR and \fIdbClass\fR fields are used by \fBTk_InitOptions\fR
+to look up a default value for this option in the option database; if
+\fIdbName\fR is NULL then the option database is not used by
+\fBTk_InitOptions\fR for this option.  The \fIdefValue\fR field
+specifies a default value for this configuration option if no
+value is specified in the option database.  The \fIobjOffset\fR and
+\fIinternalOffset\fR fields indicate where to store the value of this
+option in widget records (more on this below); values for the \fIobjOffset\fR
+and \fIinternalOffset\fR fields should always be generated with the
+\fBTk_Offset\fR macro.
+The \fIflags\fR field contains additional information
+to control the processing of this configuration option (see below
+for details).
+\fIClientData\fR provides additional type-specific data needed
+by certain types.  For instance, for TK_OPTION_COLOR types,
+\fIclientData\fR is a string giving the default value to use on
+monochrome displays.  See the descriptions of the different types
+below for details.
+The last field, \fItypeMask\fR, is used by \fBTk_SetOptions\fR to
+return information about which options were modified; see the description
+of \fBTk_SetOptions\fR above for details.
+.PP
+When \fBTk_InitOptions\fR and \fBTk_SetOptions\fR store the value of an
+option into the widget record, they can do it in either of two ways.
+If the \fIobjOffset\fR field of the Tk_OptionSpec is greater than
+or equal to zero, then the value of the option is stored as a
+(Tcl_Obj *) at the location in the widget record given by \fIobjOffset\fR.
+If the \fIinternalOffset\fR field of the Tk_OptionSpec is
+greater than or equal to zero, then the value of the option is stored
+in a type-specific internal form at the location in the widget record
+given by \fIinternalOffset\fR.  For example, if the option's type is
+TK_OPTION_INT then the internal form is an integer.  If the
+\fIobjOffset\fR or \fIinternalOffset\fR field is negative then the
+value is not stored in that form.  At least one of the offsets must be
+greater than or equal to zero.
+.PP
+The \fIflags\fR field consists of one or more bits ORed together.  At
+present only a single flag is supported: TK_OPTION_NULL_OK.  If
+this bit is set for an option then an empty string will be accepted as
+the value for the option and the resulting internal form will be a
+NULL pointer or \fBNone\fR, depending on the type of the option.
+If the flag is not set then empty strings will result
+in errors.
+TK_OPTION_NULL_OK is typically used to allow a
+feature to be turned off entirely, e.g. set a cursor value to
+\fBNone\fR so that a window simply inherits its parent's cursor.
+Not all option types support the TK_OPTION_NULL_OK
+flag; for those that do, there is an explicit indication of that fact
+in the descriptions below.
+.PP
+The \fItype\fR field of each Tk_OptionSpec structure determines
+how to parse the value of that configuration option. The
+legal value for \fItype\fR, and the corresponding actions, are
+described below.  If the type requires a \fItkwin\fR value to be
+passed into procedures like \fBTk_SetOptions\fR, or if it uses
+the \fIclientData\fR field of the Tk_OptionSpec, then it is indicated
+explicitly; if not mentioned, the type requires neither \fItkwin\fR
+nor \fIclientData\fR.
+.TP
+\fBTK_OPTION_ANCHOR\fR
+The value must be a standard anchor position such as \fBne\fR or
+\fBcenter\fR.  The internal form is a Tk_Anchor value like the ones
+returned by \fBTk_GetAnchorFromObj\fR.
+.TP
+\fBTK_OPTION_BITMAP\fR
+The value must be a standard Tk bitmap name. The internal form is a
+Pixmap token like the ones returned by \fBTk_AllocBitmapFromObj\fR.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR, and it supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_BOOLEAN\fR
+The value must be a standard boolean value such as \fBtrue\fR or
+\fBno\fR.  The internal form is an integer with value 0 or 1.
+.TP
+\fBTK_OPTION_BORDER\fR
+The value must be a standard color name such as \fBred\fR or \fB#ff8080\fR.
+The internal form is a Tk_3DBorder token like the ones returned
+by \fBTk_Alloc3DBorderFromObj\fR.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR, and it supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_COLOR\fR
+The value must be a standard color name such as \fBred\fR or \fB#ff8080\fR.
+The internal form is an (XColor *) token like the ones returned by
+\fBTk_AllocColorFromObj\fR.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR, and it supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_CURSOR\fR
+The value must be a standard cursor name such as \fBcross\fR or \fB@foo\fR.
+The internal form is a Tk_Cursor token like the ones returned by
+\fBTk_AllocCursorFromObj\fR.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR, and when the option is set the cursor
+for the window is changed by calling \fBXDefineCursor\fR.  This
+option type also supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_DOUBLE\fR
+The string value must be a floating-point number in
+the format accepted by \fBstrtol\fR.  The internal form is a C
+\fBdouble\fR value.
+.TP
+\fBTK_OPTION_END\fR
+Marks the end of the template.  There must be a Tk_OptionSpec structure
+with \fItype\fR TK_OPTION_END at the end of each template.  If the
+\fIclientData\fR field of this structure isn't NULL, then it points to
+an additional array of Tk_OptionSpec's, which is itself terminated by
+another TK_OPTION_END entry.  Templates may be chained arbitrarily
+deeply.  This feature allows common options to be shared by several
+widget classes.
+.TP
+\fBTK_OPTION_FONT\fR
+The value must be a standard font name such as \fBTimes 16\fR.
+The internal form is a Tk_Font handle like the ones returned by
+\fBTk_AllocFontFromObj\fR.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR, and it supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_INT\fR
+The string value must be an integer in the format accepted by
+\fBstrtol\fR (e.g. \fB0\fR and \fB0x\fR prefixes may be used to
+specify octal or hexadecimal numbers, respectively).  The internal
+form is a C \fBint\fR value.
+.TP
+\fBTK_OPTION_JUSTIFY\fR
+The value must be a standard justification value such as \fBleft\fR.
+The internal form is a Tk_Justify like the values returned by
+\fBTk_GetJustifyFromObj\fR.
+.TP
+\fBTK_OPTION_PIXELS\fR
+The value must specify a screen distance such as \fB2i\fR or \fB6.4\fR.
+The internal form is an integer value giving a
+distance in pixels, like the values returned by
+\fBTk_GetPixelsFromObj\fR.  Note: if the \fIobjOffset\fR field isn't
+used then information about the original value of this option will be lost.
+See \fBOBJOFFSET VS. INTERNALOFFSET\fR below for details.
+.TP
+\fBTK_OPTION_RELIEF\fR
+The value must be standard relief such as \fBraised\fR.
+The internal form is an integer relief value such as
+TK_RELIEF_RAISED.
+.TP
+\fBTK_OPTION_STRING\fR
+The value may be any string.  The internal form is a (char *) pointer
+that points to a dynamically allocated copy of the value.
+This option type supports the TK_OPTION_NULL_OK flag.
+.TP
+\fBTK_OPTION_STRING_TABLE\fR
+For this type, \fIclientData\fR is a pointer to an array of strings
+suitable for passing to \fBTcl_GetIndexFromObj\fR.  The value must
+be one of the strings in the table, or a unique abbreviation of
+one of the strings.  The internal form is an integer giving the index
+into the table of the matching string, like the return value
+from \fBTcl_GetStringFromObj\fR. 
+.TP
+\fBTK_OPTION_SYNONYM\fR
+This type is used to provide alternative names for an option (for
+example, \fB\-bg\fR is often used as a synonym for \fB\-background\fR).
+The \fBclientData\fR field is a (char *) pointer that gives
+the name of another option in the same table.  Whenever the
+synonym option is used, the information from the other option
+will be used instead.
+.TP
+\fBTK_OPTION_WINDOW\fR
+The value must be a window path name.  The internal form is a
+\fBTk_Window\fR token for the window.
+This option type requires \fItkwin\fR to be supplied to procedures
+such as \fBTk_SetOptions\fR (in order to identify the application),
+and it supports the TK_OPTION_NULL_OK flag.
+
+.SH "STORAGE MANAGEMENT ISSUES"
+.PP
+If a field of a widget record has its offset stored in the \fIobjOffset\fR
+or \fIinternalOffset\fR field of a Tk_OptionSpec structure then the
+procedures described here will handle all of the storage allocation and
+resource management issues associated with the field.  When the value
+of an option is changed, \fBTk_SetOptions\fR (or \fBTk_FreeSavedOptions\fR
+will automatically free any resources associated with the old value, such as
+Tk_Fonts for TK_OPTION_FONT options or dynamically allocated memory for
+TK_OPTION_STRING options.  For an option stored as an object using the
+\fIobjOffset\fR field of a Tk_OptionSpec, the widget record shares the
+object pointed to by the \fIobjv\fR value from the call to
+\fBTk_SetOptions\fR.  The reference count for this object is incremented
+when a pointer to it is stored in the widget record and decremented when
+the option is modified.  When the widget is deleted
+\fBTk_FreeConfigOptions\fR should be invoked; it will free the resources
+associated with all options and decrement reference counts for any
+objects.
+.PP
+However, the widget code is responsible for storing NULL or \fBNone\fR in
+all pointer and token fields before invoking \fBTk_InitOptions\fR.
+This is needed to allow proper cleanup in the rare case where
+an error occurs in \fBTk_InitOptions\fR.
+
+.SH "OBJOFFSET VS. INTERNALOFFSET"
+.PP
+In most cases it is simplest to use the \fIinternalOffset\fR field of
+a Tk_OptionSpec structure and not the \fIobjOffset\fR field.  This
+makes the internal form of the value immediately available to the
+widget code so the value doesn't have to be extracted from an object
+each time it is used.  However, there are two cases where the
+\fIobjOffset\fR field is useful.  The first case is for
+TK_OPTION_PIXELS options.  In this case, the internal form is
+an integer pixel value that is valid only for a particular screen.
+If the value of the option is retrieved, it will be returned as a simple
+number.  For example, after the command \fB.b configure \-borderwidth 2m\fR,
+the command \fB.b configure \-borderwidth\fR might return 7, which is the
+integer pixel value corresponding to \fB2m\fR.  Unfortunately, this loses
+the original screen-independent value.  Thus for TK_OPTION_PIXELS options
+it is better to use the \fIobjOffset\fR field.  In this case the original
+value of the option is retained in the object and can be returned when
+the option is retrieved.  In most cases it is convenient to use the
+\fIinternalOffset\fR field field as well, so that the integer value is
+immediately available for use in the widget code (alternatively,
+\fBTk_GetPixelsFromObj\fR can be used to extract the integer value from
+the object whenever it is needed).  Note: the problem of losing information
+on retrievals exists only for TK_OPTION_PIXELS options.
+.PP
+The second reason to use the \fIobjOffset\fR field is in order to
+implement new types of options not supported by these procedures.
+To implement a new type of option, use TK_OPTION_STRING as
+the type in the Tk_OptionSpec structure and set the \fIobjOffset\fR field
+but not the \fIinternalOffset\fR field.  Then, after calling
+\fBTk_SetOptions\fR, convert the object to internal form yourself.
+
+.SH KEYWORDS
+anchor, bitmap, boolean, border, color, configuration option,
+cursor, double, font, integer, justify,
+pixels, relief, screen distance, synonym
+
diff --git a/tk/doc/Sleep.3 b/tk/doc/Sleep.3
new file mode 100644 (file)
index 0000000..0c7956a
--- /dev/null
@@ -0,0 +1,37 @@
+'\"
+'\" Copyright (c) 1990 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) Sleep.3 1.3 96/03/25 20:07:21
+'\" 
+.so man.macros
+.TH Tcl_Sleep 3 7.5 Tcl "Tcl Library Procedures"
+.BS
+.SH NAME
+Tcl_Sleep \- delay execution for a given number of milliseconds
+.SH SYNOPSIS
+.nf
+\fB#include <tcl.h>\fR
+.sp
+\fBTcl_Sleep\fR(\fIms\fR)
+.SH ARGUMENTS
+.AP int ms in
+Number of milliseconds to sleep.
+.BE
+
+.SH DESCRIPTION
+.PP
+This procedure delays the calling process by the number of
+milliseconds given by the \fIms\fR parameter and returns
+after that time has elapsed.  It is typically used for things
+like flashing a button, where the delay is short and the
+application needn't do anything while it waits.  For longer
+delays where the application needs to respond to other events
+during the delay, the procedure \fBTcl_CreateTimerHandler\fR
+should be used instead of \fBTcl_Sleep\fR.
+
+.SH KEYWORDS
+sleep, time, wait
diff --git a/tk/doc/Tcl.n b/tk/doc/Tcl.n
new file mode 100644 (file)
index 0000000..610fe1b
--- /dev/null
@@ -0,0 +1,181 @@
+'\"
+'\" Copyright (c) 1993 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) Tcl.n 1.128 96/08/26 12:59:50
+'
+.so man.macros
+.TH Tcl n "" Tcl "Tcl Built-In Commands"
+.BS
+.SH NAME
+Tcl \- Summary of Tcl language syntax.
+.BE
+
+.SH DESCRIPTION
+.PP
+The following rules define the syntax and semantics of the Tcl language:
+.IP [1]
+A Tcl script is a string containing one or more commands.
+Semi-colons and newlines are command separators unless quoted as
+described below.
+Close brackets are command terminators during command substitution
+(see below) unless quoted.
+.IP [2]
+A command is evaluated in two steps.
+First, the Tcl interpreter breaks the command into \fIwords\fR
+and performs substitutions as described below.
+These substitutions are performed in the same way for all
+commands.
+The first word is used to locate a command procedure to
+carry out the command, then all of the words of the command are
+passed to the command procedure.
+The command procedure is free to interpret each of its words
+in any way it likes, such as an integer, variable name, list,
+or Tcl script.
+Different commands interpret their words differently.
+.IP [3]
+Words of a command are separated by white space (except for
+newlines, which are command separators).
+.IP [4]
+If the first character of a word is double-quote (``"'') then
+the word is terminated by the next double-quote character.
+If semi-colons, close brackets, or white space characters
+(including newlines) appear between the quotes then they are treated
+as ordinary characters and included in the word.
+Command substitution, variable substitution, and backslash substitution
+are performed on the characters between the quotes as described below.
+The double-quotes are not retained as part of the word.
+.IP [5]
+If the first character of a word is an open brace (``{'') then
+the word is terminated by the matching close brace (``}'').
+Braces nest within the word: for each additional open
+brace there must be an additional close brace (however,
+if an open brace or close brace within the word is
+quoted with a backslash then it is not counted in locating the
+matching close brace).
+No substitutions are performed on the characters between the
+braces except for backslash-newline substitutions described
+below, nor do semi-colons, newlines, close brackets,
+or white space receive any special interpretation.
+The word will consist of exactly the characters between the
+outer braces, not including the braces themselves.
+.IP [6]
+If a word contains an open bracket (``['') then Tcl performs
+\fIcommand substitution\fR.
+To do this it invokes the Tcl interpreter recursively to process
+the characters following the open bracket as a Tcl script.
+The script may contain any number of commands and must be terminated
+by a close bracket (``]'').
+The result of the script (i.e. the result of its last command) is
+substituted into the word in place of the brackets and all of the
+characters between them.
+There may be any number of command substitutions in a single word.
+Command substitution is not performed on words enclosed in braces.
+.IP [7]
+If a word contains a dollar-sign (``$'') then Tcl performs \fIvariable
+substitution\fR:  the dollar-sign and the following characters are
+replaced in the word by the value of a variable.
+Variable substitution may take any of the following forms:
+.RS
+.TP 15
+\fB$\fIname\fR
+\fIName\fR is the name of a scalar variable;  the name is terminated
+by any character that isn't a letter, digit, or underscore.
+.TP 15
+\fB$\fIname\fB(\fIindex\fB)\fR
+\fIName\fR gives the name of an array variable and \fIindex\fR gives
+the name of an element within that array.
+\fIName\fR must contain only letters, digits, and underscores.
+Command substitutions, variable substitutions, and backslash
+substitutions are performed on the characters of \fIindex\fR.
+.TP 15
+\fB${\fIname\fB}\fR
+\fIName\fR is the name of a scalar variable.  It may contain any
+characters whatsoever except for close braces.
+.LP
+There may be any number of variable substitutions in a single word.
+Variable substitution is not performed on words enclosed in braces.
+.RE
+.IP [8]
+If a backslash (``\e'') appears within a word then
+\fIbackslash substitution\fR occurs.
+In all cases but those described below the backslash is dropped and
+the following character is treated as an ordinary
+character and included in the word.
+This allows characters such as double quotes, close brackets,
+and dollar signs to be included in words without triggering
+special processing.
+The following table lists the backslash sequences that are
+handled specially, along with the value that replaces each sequence.
+.RS
+.TP 6
+\e\fBa\fR
+Audible alert (bell) (0x7).
+.TP 6
+\e\fBb\fR
+Backspace (0x8).
+.TP 6
+\e\fBf\fR
+Form feed (0xc).
+.TP 6
+\e\fBn\fR
+Newline (0xa).
+.TP 6
+\e\fBr\fR
+Carriage-return (0xd).
+.TP 6
+\e\fBt\fR
+Tab (0x9).
+.TP 6
+\e\fBv\fR
+Vertical tab (0xb).
+.TP 6
+\e\fB<newline>\fIwhiteSpace\fR
+A single space character replaces the backslash, newline, and all
+spaces and tabs after the newline.
+This backslash sequence is unique in that it is replaced in a separate
+pre-pass before the command is actually parsed.
+This means that it will be replaced even when it occurs between
+braces, and the resulting space will be treated as a word separator
+if it isn't in braces or quotes.
+.TP 6
+\e\e
+Backslash (``\e'').
+.TP 6
+\e\fIooo\fR
+The digits \fIooo\fR (one, two, or three of them) give the octal value of
+the character.
+.TP 6
+\e\fBx\fIhh\fR
+The hexadecimal digits \fIhh\fR give the hexadecimal value of
+the character.  Any number of digits may be present.
+.LP
+Backslash substitution is not performed on words enclosed in braces,
+except for backslash-newline as described above.
+.RE
+.IP [9]
+If a hash character (``#'') appears at a point where Tcl is
+expecting the first character of the first word of a command,
+then the hash character and the characters that follow it, up
+through the next newline, are treated as a comment and ignored.
+The comment character only has significance when it appears
+at the beginning of a command.
+.IP [10]
+Each character is processed exactly once by the Tcl interpreter
+as part of creating the words of a command.
+For example, if variable substitution occurs then no further
+substitutions are performed on the value of the variable;  the
+value is inserted into the word verbatim.
+If command substitution occurs then the nested command is
+processed entirely by the recursive call to the Tcl interpreter;
+no substitutions are performed before making the recursive
+call and no additional substitutions are performed on the result
+of the nested script.
+.IP [11]
+Substitutions do not affect the word boundaries of a command.
+For example, during variable substitution the entire value of
+the variable becomes part of a single word, even if the variable's
+value contains spaces.
diff --git a/tk/doc/TkInitStubs.3 b/tk/doc/TkInitStubs.3
new file mode 100644 (file)
index 0000000..c8d6fc2
--- /dev/null
@@ -0,0 +1,77 @@
+'\"
+'\" Copyright (c) 1999 Scriptics Corportation
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH Tk_InitStubs 3 8.1 Tk "Tk Library Procedures"
+.BS
+.SH NAME
+Tk_InitStubs \- initialize the Tk stubs mechanism
+.SH SYNOPSIS
+.nf
+\fB#include <tk.h>\fR
+.sp
+char *
+\fBTk_InitStubs\fR(\fIinterp, version, exact\fR)
+.SH ARGUMENTS
+.AS Tcl_Interp *interp in
+.AP Tcl_Interp *interp in
+Tcl interpreter handle.
+.AP char *version in
+A version string consisting of one or more decimal numbers
+separated by dots.
+.AP int exact in
+Non-zero means that only the particular Tk version specified by
+\fIversion\fR is acceptable.
+Zero means that versions newer than \fIversion\fR are also
+acceptable as long as they have the same major version number
+as \fIversion\fR.
+.BE
+.SH INTRODUCTION
+.PP
+The Tcl stubs mechanism defines a way to dynamically bind
+extensions to a particular Tcl implementation at run time.
+the stubs mechanism requires no changes to applications
+incoporating Tcl/Tk interpreters.  Only developers creating
+C-based Tcl/Tk extensions need to take steps to use the
+stubs mechanism with their extensions.
+See the \fBTcl_InitStubs\fR page for more information.
+.PP
+Enabling the stubs mechanism for a Tcl/Tk extension requires the following
+steps:
+.IP 1) 5
+Call \fBTcl_InitStubs\fR in the extension before calling any other
+Tcl functions.
+.IP 2) 5
+Call \fBTk_InitStubs\fR if the extension before calling any other
+Tk functions.
+.IP 2) 5
+Define the USE_TCL_STUBS symbol.  Typically, you would include the
+-DUSE_TCL_STUBS flag when compiling the extension.
+.IP 3) 5
+Link the extension with the Tcl and Tk stubs libraries instead of
+the standard Tcl and Tk libraries.  On Unix platforms, the library
+names are \fIlibtclstub8.1.a\fR and \fIlibtkstub8.1.a\fR; on Windows
+platforms, the library names are
+\fItclstub81.lib\fR and \fItkstub81.lib\fR.
+.SH DESCRIPTION
+\fBTk_InitStubs\fR attempts to initialize the Tk stub table pointers
+and ensure that the correct version of Tk is loaded.  In addition
+to an interpreter handle, it accepts as arguments a version number
+and a Boolean flag indicating whether the extension requires
+an exact version match or not.  If \fIexact\fR is 0, then the
+extension is indicating that newer versions of Tk are acceptable
+as long as they have the same major version number as \fIversion\fR;
+non-zero means that only the specified \fIversion\fR is acceptable.
+\fBTcl_InitStubs\fR returns a string containing the actual version
+of Tk satisfying the request, or NULL if the Tk version is not
+acceptable, does not support the stubs mechansim, or any other
+error condition occurred.
+.SH "SEE ALSO"
+\fBTcl_InitStubs\fR
+.SH KEYWORDS
+stubs
diff --git a/tk/doc/after.n b/tk/doc/after.n
new file mode 100644 (file)
index 0000000..cf4aaeb
--- /dev/null
@@ -0,0 +1,109 @@
+'\"
+'\" Copyright (c) 1990-1994 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) after.n 1.4 96/03/25 20:09:33
+'\" 
+.so man.macros
+.TH after n 7.5 Tcl "Tcl Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+after \- Execute a command after a time delay
+.SH SYNOPSIS
+\fBafter \fIms\fR
+.sp
+\fBafter \fIms \fR?\fIscript script script ...\fR?
+.sp
+\fBafter cancel \fIid\fR
+.sp
+\fBafter cancel \fIscript script script ...\fR
+.sp
+\fBafter idle \fR?\fIscript script script ...\fR?
+.sp
+\fBafter info \fR?\fIid\fR?
+.BE
+
+.SH DESCRIPTION
+.PP
+This command is used to delay execution of the program or to execute
+a command in background sometime in the future.  It has several forms,
+depending on the first argument to the command:
+.TP
+\fBafter \fIms\fR
+\fIMs\fR must be an integer giving a time in milliseconds.
+The command sleeps for \fIms\fR milliseconds and then returns.
+While the command is sleeping the application does not respond to
+events.
+.TP
+\fBafter \fIms \fR?\fIscript script script ...\fR?
+In this form the command returns immediately, but it arranges
+for a Tcl command to be executed \fIms\fR milliseconds later as an
+event handler.
+The command will be executed exactly once, at the given time.
+The delayed command is formed by concatenating all the \fIscript\fR
+arguments in the same fashion as the \fBconcat\fR command.
+The command will be executed at global level (outside the context
+of any Tcl procedure).
+If an error occurs while executing the delayed command then the
+\fBbgerror\fR mechanism is used to report the error.
+The \fBafter\fR command returns an identifier that can be used
+to cancel the delayed command using \fBafter cancel\fR.
+.TP
+\fBafter cancel \fIid\fR
+Cancels the execution of a delayed command that
+was previously scheduled.
+\fIId\fR indicates which command should be canceled;  it must have
+been the return value from a previous \fBafter\fR command.
+If the command given by \fIid\fR has already been executed then
+the \fBafter cancel\fR command has no effect.
+.TP
+\fBafter cancel \fIscript script ...\fR
+This command also cancels the execution of a delayed command.
+The \fIscript\fR arguments are concatenated together with space
+separators (just as in the \fBconcat\fR command).
+If there is a pending command that matches the string, it is
+cancelled and will never be executed;  if no such command is
+currently pending then the \fBafter cancel\fR command has no effect.
+.TP
+\fBafter idle \fIscript \fR?\fIscript script ...\fR?
+Concatenates the \fIscript\fR arguments together with space
+separators (just as in the \fBconcat\fR command), and arranges
+for the resulting script to be evaluated later as an idle callback.
+The script will be run exactly once, the next time the event
+loop is entered and there are no events to process.
+The command returns an identifier that can be used
+to cancel the delayed command using \fBafter cancel\fR.
+If an error occurs while executing the script then the
+\fBbgerror\fR mechanism is used to report the error.
+.TP
+\fBafter info \fR?\fIid\fR?
+This command returns information about existing event handlers.
+If no \fIid\fR argument is supplied, the command returns
+a list of the identifiers for all existing
+event handlers created by the \fBafter\fR command for this
+interpreter.
+If \fIid\fR is supplied, it specifies an existing handler;
+\fIid\fR must have been the return value from some previous call
+to \fBafter\fR and it must not have triggered yet or been cancelled.
+In this case the command returns a list with two elements.
+The first element of the list is the script associated
+with \fIid\fR, and the second element is either
+\fBidle\fR or \fBtimer\fR to indicate what kind of event
+handler it is.
+.LP
+The \fBafter \fIms\fR and \fBafter idle\fR forms of the command
+assume that the application is event driven:  the delayed commands
+will not be executed unless the application enters the event loop.
+In applications that are not normally event-driven, such as
+\fBtclsh\fR, the event loop can be entered with the \fBvwait\fR
+and \fBupdate\fR commands.
+
+.SH "SEE ALSO"
+bgerror
+
+.SH KEYWORDS
+cancel, delay, idle callback, sleep, time
diff --git a/tk/doc/chooseDirectory.n b/tk/doc/chooseDirectory.n
new file mode 100644 (file)
index 0000000..0322b29
--- /dev/null
@@ -0,0 +1,53 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+.so man.macros
+.TH tk_chooseDirectory n 8.3 Tk "Tk Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+tk_chooseDirectory \- pops up a dialog box for the user to select a directory.
+.PP
+.SH SYNOPSIS
+\fBtk_chooseDirectory \fR?\fIoption value ...\fR?
+.BE
+
+.SH DESCRIPTION
+.PP
+The procedure \fBtk_chooseDirectory\fR pops up a dialog box for the
+user to select a directory. The following \fIoption\-value\fR pairs are
+possible as command line arguments:
+.TP
+\fB\-initialdir\fR \fIdirname\fR
+Specifies that the directories in \fIdirectory\fR should be displayed
+when the dialog pops up. If this parameter is not specified, then
+the directories in the current working directory are displayed. If the
+parameter specifies a relative path, the return value will convert the
+relative path to an absolute path.  This option may not always work on
+the Macintosh.  This is not a bug. Rather, the \fIGeneral Controls\fR
+control panel on the Mac allows the end user to override the
+application default directory.
+.TP
+\fB\-parent\fR \fIwindow\fR
+Makes \fIwindow\fR the logical parent of the dialog. The dialog
+is displayed on top of its parent window.
+.TP
+\fB\-title\fR \fItitleString\fR
+Specifies a string to display as the title of the dialog box. If this
+option is not specified, then a default title will be displayed.
+.TP
+\fB\-mustexist\fR \fIboolean\fR
+Specifies whether the user may specify non-existant directories.  If
+this parameter is true, then the user may only select directories that
+already exist.  The default value is \fIfalse\fR.
+.LP
+
+.SH "SEE ALSO"
+tk_getOpenFile, tk_getSaveFile
+
+.SH KEYWORDS
+directory selection dialog
+
diff --git a/tk/doc/colors.n b/tk/doc/colors.n
new file mode 100644 (file)
index 0000000..8b304fa
--- /dev/null
@@ -0,0 +1,782 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+'\"
+.so man.macros
+.TH colors n 8.3 Tk "Tk Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+colors \- symbolic color names recognized by Tk
+.BE
+.SH DESCRIPTION
+.PP
+Tk recognizes many symbolic color names (eg, \fBred\fR) when
+specifying colors.  The symbolic names recognized by Tk and their
+8-bit RGB values are:
+.CS
+alice blue                 240   248   248
+AliceBlue                  240   248   248
+antique white              250   235   235
+AntiqueWhite               250   235   235
+AntiqueWhite1              255   239   239
+AntiqueWhite2              238   223   223
+AntiqueWhite3              205   192   192
+AntiqueWhite4              139   131   131
+aquamarine                 127   255   255
+aquamarine1                127   255   255
+aquamarine2                118   238   238
+aquamarine3                102   205   205
+aquamarine4                 69   139   139
+azure                      240   255   255
+azure1                     240   255   255
+azure2                     224   238   238
+azure3                     193   205   205
+azure4                     131   139   139
+beige                      245   245   245
+bisque                     255   228   228
+bisque1                    255   228   228
+bisque2                    238   213   213
+bisque3                    205   183   183
+bisque4                    139   125   125
+black                        0     0     0
+blanched almond            255   235   235
+BlanchedAlmond             255   235   235
+blue                         0     0     0
+blue violet                138    43    43
+blue1                        0     0     0
+blue2                        0     0     0
+blue3                        0     0     0
+blue4                        0     0     0
+BlueViolet                 138    43    43
+brown                      165    42    42
+brown1                     255    64    64
+brown2                     238    59    59
+brown3                     205    51    51
+brown4                     139    35    35
+burlywood                  222   184   184
+burlywood1                 255   211   211
+burlywood2                 238   197   197
+burlywood3                 205   170   170
+burlywood4                 139   115   115
+cadet blue                  95   158   158
+CadetBlue                   95   158   158
+CadetBlue1                 152   245   245
+CadetBlue2                 142   229   229
+CadetBlue3                 122   197   197
+CadetBlue4                  83   134   134
+chartreuse                 127   255   255
+chartreuse1                127   255   255
+chartreuse2                118   238   238
+chartreuse3                102   205   205
+chartreuse4                 69   139   139
+chocolate                  210   105   105
+chocolate1                 255   127   127
+chocolate2                 238   118   118
+chocolate3                 205   102   102
+chocolate4                 139    69    69
+coral                      255   127   127
+coral1                     255   114   114
+coral2                     238   106   106
+coral3                     205    91    91
+coral4                     139    62    62
+cornflower blue            100   149   149
+CornflowerBlue             100   149   149
+cornsilk                   255   248   248
+cornsilk1                  255   248   248
+cornsilk2                  238   232   232
+cornsilk3                  205   200   200
+cornsilk4                  139   136   136
+cyan                         0   255   255
+cyan1                        0   255   255
+cyan2                        0   238   238
+cyan3                        0   205   205
+cyan4                        0   139   139
+dark blue                    0     0     0
+dark cyan                    0   139   139
+dark goldenrod             184   134   134
+dark gray                  169   169   169
+dark green                   0   100   100
+dark grey                  169   169   169
+dark khaki                 189   183   183
+dark magenta               139     0     0
+dark olive green            85   107   107
+dark orange                255   140   140
+dark orchid                153    50    50
+dark red                   139     0     0
+dark salmon                233   150   150
+dark sea green             143   188   188
+dark slate blue             72    61    61
+dark slate gray             47    79    79
+dark slate grey             47    79    79
+dark turquoise               0   206   206
+dark violet                148     0     0
+DarkBlue                     0     0     0
+DarkCyan                     0   139   139
+DarkGoldenrod              184   134   134
+DarkGoldenrod1             255   185   185
+DarkGoldenrod2             238   173   173
+DarkGoldenrod3             205   149   149
+DarkGoldenrod4             139   101   101
+DarkGray                   169   169   169
+DarkGreen                    0   100   100
+DarkGrey                   169   169   169
+DarkKhaki                  189   183   183
+DarkMagenta                139     0     0
+DarkOliveGreen              85   107   107
+DarkOliveGreen1            202   255   255
+DarkOliveGreen2            188   238   238
+DarkOliveGreen3            162   205   205
+DarkOliveGreen4            110   139   139
+DarkOrange                 255   140   140
+DarkOrange1                255   127   127
+DarkOrange2                238   118   118
+DarkOrange3                205   102   102
+DarkOrange4                139    69    69
+DarkOrchid                 153    50    50
+DarkOrchid1                191    62    62
+DarkOrchid2                178    58    58
+DarkOrchid3                154    50    50
+DarkOrchid4                104    34    34
+DarkRed                    139     0     0
+DarkSalmon                 233   150   150
+DarkSeaGreen               143   188   188
+DarkSeaGreen1              193   255   255
+DarkSeaGreen2              180   238   238
+DarkSeaGreen3              155   205   205
+DarkSeaGreen4              105   139   139
+DarkSlateBlue               72    61    61
+DarkSlateGray               47    79    79
+DarkSlateGray1             151   255   255
+DarkSlateGray2             141   238   238
+DarkSlateGray3             121   205   205
+DarkSlateGray4              82   139   139
+DarkSlateGrey               47    79    79
+DarkTurquoise                0   206   206
+DarkViolet                 148     0     0
+deep pink                  255    20    20
+deep sky blue                0   191   191
+DeepPink                   255    20    20
+DeepPink1                  255    20    20
+DeepPink2                  238    18    18
+DeepPink3                  205    16    16
+DeepPink4                  139    10    10
+DeepSkyBlue                  0   191   191
+DeepSkyBlue1                 0   191   191
+DeepSkyBlue2                 0   178   178
+DeepSkyBlue3                 0   154   154
+DeepSkyBlue4                 0   104   104
+dim gray                   105   105   105
+dim grey                   105   105   105
+DimGray                    105   105   105
+DimGrey                    105   105   105
+dodger blue                 30   144   144
+DodgerBlue                  30   144   144
+DodgerBlue1                 30   144   144
+DodgerBlue2                 28   134   134
+DodgerBlue3                 24   116   116
+DodgerBlue4                 16    78    78
+firebrick                  178    34    34
+firebrick1                 255    48    48
+firebrick2                 238    44    44
+firebrick3                 205    38    38
+firebrick4                 139    26    26
+floral white               255   250   250
+FloralWhite                255   250   250
+forest green                34   139   139
+ForestGreen                 34   139   139
+gainsboro                  220   220   220
+ghost white                248   248   248
+GhostWhite                 248   248   248
+gold                       255   215   215
+gold1                      255   215   215
+gold2                      238   201   201
+gold3                      205   173   173
+gold4                      139   117   117
+goldenrod                  218   165   165
+goldenrod1                 255   193   193
+goldenrod2                 238   180   180
+goldenrod3                 205   155   155
+goldenrod4                 139   105   105
+gray                       190   190   190
+gray0                        0     0     0
+gray1                        3     3     3
+gray2                        5     5     5
+gray3                        8     8     8
+gray4                       10    10    10
+gray5                       13    13    13
+gray6                       15    15    15
+gray7                       18    18    18
+gray8                       20    20    20
+gray9                       23    23    23
+gray10                      26    26    26
+gray11                      28    28    28
+gray12                      31    31    31
+gray13                      33    33    33
+gray14                      36    36    36
+gray15                      38    38    38
+.CE
+.CS
+gray16                      41    41    41
+gray17                      43    43    43
+gray18                      46    46    46
+gray19                      48    48    48
+gray20                      51    51    51
+gray21                      54    54    54
+gray22                      56    56    56
+gray23                      59    59    59
+gray24                      61    61    61
+gray25                      64    64    64
+gray26                      66    66    66
+gray27                      69    69    69
+gray28                      71    71    71
+gray29                      74    74    74
+gray30                      77    77    77
+gray31                      79    79    79
+gray32                      82    82    82
+gray33                      84    84    84
+gray34                      87    87    87
+gray35                      89    89    89
+gray36                      92    92    92
+gray37                      94    94    94
+gray38                      97    97    97
+gray39                      99    99    99
+gray40                     102   102   102
+gray41                     105   105   105
+gray42                     107   107   107
+gray43                     110   110   110
+gray44                     112   112   112
+gray45                     115   115   115
+gray46                     117   117   117
+gray47                     120   120   120
+gray48                     122   122   122
+gray49                     125   125   125
+gray50                     127   127   127
+gray51                     130   130   130
+gray52                     133   133   133
+gray53                     135   135   135
+gray54                     138   138   138
+gray55                     140   140   140
+gray56                     143   143   143
+gray57                     145   145   145
+gray58                     148   148   148
+gray59                     150   150   150
+gray60                     153   153   153
+gray61                     156   156   156
+gray62                     158   158   158
+gray63                     161   161   161
+gray64                     163   163   163
+gray65                     166   166   166
+gray66                     168   168   168
+gray67                     171   171   171
+gray68                     173   173   173
+gray69                     176   176   176
+gray70                     179   179   179
+gray71                     181   181   181
+gray72                     184   184   184
+gray73                     186   186   186
+gray74                     189   189   189
+gray75                     191   191   191
+gray76                     194   194   194
+gray77                     196   196   196
+gray78                     199   199   199
+gray79                     201   201   201
+gray80                     204   204   204
+gray81                     207   207   207
+gray82                     209   209   209
+gray83                     212   212   212
+gray84                     214   214   214
+gray85                     217   217   217
+gray86                     219   219   219
+gray87                     222   222   222
+gray88                     224   224   224
+gray89                     227   227   227
+gray90                     229   229   229
+gray91                     232   232   232
+gray92                     235   235   235
+gray93                     237   237   237
+gray94                     240   240   240
+gray95                     242   242   242
+gray96                     245   245   245
+gray97                     247   247   247
+gray98                     250   250   250
+gray99                     252   252   252
+gray100                    255   255   255
+green                        0   255   255
+green yellow               173   255   255
+green1                       0   255   255
+green2                       0   238   238
+green3                       0   205   205
+green4                       0   139   139
+GreenYellow                173   255   255
+grey                       190   190   190
+grey0                        0     0     0
+grey1                        3     3     3
+grey2                        5     5     5
+grey3                        8     8     8
+grey4                       10    10    10
+grey5                       13    13    13
+grey6                       15    15    15
+grey7                       18    18    18
+grey8                       20    20    20
+grey9                       23    23    23
+grey10                      26    26    26
+grey11                      28    28    28
+grey12                      31    31    31
+grey13                      33    33    33
+grey14                      36    36    36
+grey15                      38    38    38
+grey16                      41    41    41
+grey17                      43    43    43
+grey18                      46    46    46
+grey19                      48    48    48
+grey20                      51    51    51
+grey21                      54    54    54
+grey22                      56    56    56
+grey23                      59    59    59
+grey24                      61    61    61
+grey25                      64    64    64
+grey26                      66    66    66
+grey27                      69    69    69
+grey28                      71    71    71
+grey29                      74    74    74
+grey30                      77    77    77
+grey31                      79    79    79
+grey32                      82    82    82
+grey33                      84    84    84
+grey34                      87    87    87
+grey35                      89    89    89
+grey36                      92    92    92
+grey37                      94    94    94
+grey38                      97    97    97
+grey39                      99    99    99
+grey40                     102   102   102
+grey41                     105   105   105
+grey42                     107   107   107
+grey43                     110   110   110
+grey44                     112   112   112
+grey45                     115   115   115
+grey46                     117   117   117
+grey47                     120   120   120
+grey48                     122   122   122
+grey49                     125   125   125
+grey50                     127   127   127
+grey51                     130   130   130
+grey52                     133   133   133
+grey53                     135   135   135
+grey54                     138   138   138
+grey55                     140   140   140
+grey56                     143   143   143
+grey57                     145   145   145
+grey58                     148   148   148
+grey59                     150   150   150
+grey60                     153   153   153
+grey61                     156   156   156
+grey62                     158   158   158
+grey63                     161   161   161
+grey64                     163   163   163
+grey65                     166   166   166
+grey66                     168   168   168
+grey67                     171   171   171
+grey68                     173   173   173
+grey69                     176   176   176
+grey70                     179   179   179
+grey71                     181   181   181
+grey72                     184   184   184
+grey73                     186   186   186
+grey74                     189   189   189
+grey75                     191   191   191
+grey76                     194   194   194
+grey77                     196   196   196
+grey78                     199   199   199
+grey79                     201   201   201
+grey80                     204   204   204
+grey81                     207   207   207
+grey82                     209   209   209
+grey83                     212   212   212
+grey84                     214   214   214
+grey85                     217   217   217
+grey86                     219   219   219
+grey87                     222   222   222
+grey88                     224   224   224
+grey89                     227   227   227
+grey90                     229   229   229
+grey91                     232   232   232
+grey92                     235   235   235
+grey93                     237   237   237
+grey94                     240   240   240
+grey95                     242   242   242
+grey96                     245   245   245
+grey97                     247   247   247
+grey98                     250   250   250
+grey99                     252   252   252
+grey100                    255   255   255
+honeydew                   240   255   255
+honeydew1                  240   255   255
+honeydew2                  224   238   238
+honeydew3                  193   205   205
+honeydew4                  131   139   139
+hot pink                   255   105   105
+.CE
+.CS
+HotPink                    255   105   105
+HotPink1                   255   110   110
+HotPink2                   238   106   106
+HotPink3                   205    96    96
+HotPink4                   139    58    58
+indian red                 205    92    92
+IndianRed                  205    92    92
+IndianRed1                 255   106   106
+IndianRed2                 238    99    99
+IndianRed3                 205    85    85
+IndianRed4                 139    58    58
+ivory                      255   255   255
+ivory1                     255   255   255
+ivory2                     238   238   238
+ivory3                     205   205   205
+ivory4                     139   139   139
+khaki                      240   230   230
+khaki1                     255   246   246
+khaki2                     238   230   230
+khaki3                     205   198   198
+khaki4                     139   134   134
+lavender                   230   230   230
+lavender blush             255   240   240
+LavenderBlush              255   240   240
+LavenderBlush1             255   240   240
+LavenderBlush2             238   224   224
+LavenderBlush3             205   193   193
+LavenderBlush4             139   131   131
+lawn green                 124   252   252
+LawnGreen                  124   252   252
+lemon chiffon              255   250   250
+LemonChiffon               255   250   250
+LemonChiffon1              255   250   250
+LemonChiffon2              238   233   233
+LemonChiffon3              205   201   201
+LemonChiffon4              139   137   137
+light blue                 173   216   216
+light coral                240   128   128
+light cyan                 224   255   255
+light goldenrod            238   221   221
+light goldenrod yellow     250   250   250
+light gray                 211   211   211
+light green                144   238   238
+light grey                 211   211   211
+light pink                 255   182   182
+light salmon               255   160   160
+light sea green             32   178   178
+light sky blue             135   206   206
+light slate blue           132   112   112
+light slate gray           119   136   136
+light slate grey           119   136   136
+light steel blue           176   196   196
+light yellow               255   255   255
+LightBlue                  173   216   216
+LightBlue1                 191   239   239
+LightBlue2                 178   223   223
+LightBlue3                 154   192   192
+LightBlue4                 104   131   131
+LightCoral                 240   128   128
+LightCyan                  224   255   255
+LightCyan1                 224   255   255
+LightCyan2                 209   238   238
+LightCyan3                 180   205   205
+LightCyan4                 122   139   139
+LightGoldenrod             238   221   221
+LightGoldenrod1            255   236   236
+LightGoldenrod2            238   220   220
+LightGoldenrod3            205   190   190
+LightGoldenrod4            139   129   129
+LightGoldenrodYellow       250   250   250
+LightGray                  211   211   211
+LightGreen                 144   238   238
+LightGrey                  211   211   211
+LightPink                  255   182   182
+LightPink1                 255   174   174
+LightPink2                 238   162   162
+LightPink3                 205   140   140
+LightPink4                 139    95    95
+LightSalmon                255   160   160
+LightSalmon1               255   160   160
+LightSalmon2               238   149   149
+LightSalmon3               205   129   129
+LightSalmon4               139    87    87
+LightSeaGreen               32   178   178
+LightSkyBlue               135   206   206
+LightSkyBlue1              176   226   226
+LightSkyBlue2              164   211   211
+LightSkyBlue3              141   182   182
+LightSkyBlue4               96   123   123
+LightSlateBlue             132   112   112
+LightSlateGray             119   136   136
+LightSlateGrey             119   136   136
+LightSteelBlue             176   196   196
+LightSteelBlue1            202   225   225
+LightSteelBlue2            188   210   210
+LightSteelBlue3            162   181   181
+LightSteelBlue4            110   123   123
+LightYellow                255   255   255
+LightYellow1               255   255   255
+LightYellow2               238   238   238
+LightYellow3               205   205   205
+LightYellow4               139   139   139
+lime green                  50   205   205
+LimeGreen                   50   205   205
+linen                      250   240   240
+magenta                    255     0     0
+magenta1                   255     0     0
+magenta2                   238     0     0
+magenta3                   205     0     0
+magenta4                   139     0     0
+maroon                     176    48    48
+maroon1                    255    52    52
+maroon2                    238    48    48
+maroon3                    205    41    41
+maroon4                    139    28    28
+medium aquamarine          102   205   205
+medium blue                  0     0     0
+medium orchid              186    85    85
+medium purple              147   112   112
+medium sea green            60   179   179
+medium slate blue          123   104   104
+medium spring green          0   250   250
+medium turquoise            72   209   209
+medium violet red          199    21    21
+MediumAquamarine           102   205   205
+MediumBlue                   0     0     0
+MediumOrchid               186    85    85
+MediumOrchid1              224   102   102
+MediumOrchid2              209    95    95
+MediumOrchid3              180    82    82
+MediumOrchid4              122    55    55
+MediumPurple               147   112   112
+MediumPurple1              171   130   130
+MediumPurple2              159   121   121
+MediumPurple3              137   104   104
+MediumPurple4               93    71    71
+MediumSeaGreen              60   179   179
+MediumSlateBlue            123   104   104
+MediumSpringGreen            0   250   250
+MediumTurquoise             72   209   209
+MediumVioletRed            199    21    21
+midnight blue               25    25    25
+MidnightBlue                25    25    25
+mint cream                 245   255   255
+MintCream                  245   255   255
+misty rose                 255   228   228
+MistyRose                  255   228   228
+MistyRose1                 255   228   228
+MistyRose2                 238   213   213
+MistyRose3                 205   183   183
+MistyRose4                 139   125   125
+moccasin                   255   228   228
+navajo white               255   222   222
+NavajoWhite                255   222   222
+NavajoWhite1               255   222   222
+NavajoWhite2               238   207   207
+NavajoWhite3               205   179   179
+NavajoWhite4               139   121   121
+navy                         0     0     0
+navy blue                    0     0     0
+NavyBlue                     0     0     0
+old lace                   253   245   245
+OldLace                    253   245   245
+olive drab                 107   142   142
+OliveDrab                  107   142   142
+OliveDrab1                 192   255   255
+OliveDrab2                 179   238   238
+OliveDrab3                 154   205   205
+OliveDrab4                 105   139   139
+orange                     255   165   165
+orange red                 255    69    69
+orange1                    255   165   165
+orange2                    238   154   154
+orange3                    205   133   133
+orange4                    139    90    90
+OrangeRed                  255    69    69
+OrangeRed1                 255    69    69
+OrangeRed2                 238    64    64
+OrangeRed3                 205    55    55
+OrangeRed4                 139    37    37
+orchid                     218   112   112
+orchid1                    255   131   131
+orchid2                    238   122   122
+orchid3                    205   105   105
+orchid4                    139    71    71
+pale goldenrod             238   232   232
+pale green                 152   251   251
+pale turquoise             175   238   238
+pale violet red            219   112   112
+PaleGoldenrod              238   232   232
+PaleGreen                  152   251   251
+PaleGreen1                 154   255   255
+PaleGreen2                 144   238   238
+PaleGreen3                 124   205   205
+PaleGreen4                  84   139   139
+PaleTurquoise              175   238   238
+PaleTurquoise1             187   255   255
+PaleTurquoise2             174   238   238
+PaleTurquoise3             150   205   205
+PaleTurquoise4             102   139   139
+.CE
+.CS
+PaleVioletRed              219   112   112
+PaleVioletRed1             255   130   130
+PaleVioletRed2             238   121   121
+PaleVioletRed3             205   104   104
+PaleVioletRed4             139    71    71
+papaya whip                255   239   239
+PapayaWhip                 255   239   239
+peach puff                 255   218   218
+PeachPuff                  255   218   218
+PeachPuff1                 255   218   218
+PeachPuff2                 238   203   203
+PeachPuff3                 205   175   175
+PeachPuff4                 139   119   119
+peru                       205   133   133
+pink                       255   192   192
+pink1                      255   181   181
+pink2                      238   169   169
+pink3                      205   145   145
+pink4                      139    99    99
+plum                       221   160   160
+plum1                      255   187   187
+plum2                      238   174   174
+plum3                      205   150   150
+plum4                      139   102   102
+powder blue                176   224   224
+PowderBlue                 176   224   224
+purple                     160    32    32
+purple1                    155    48    48
+purple2                    145    44    44
+purple3                    125    38    38
+purple4                     85    26    26
+red                        255     0     0
+red1                       255     0     0
+red2                       238     0     0
+red3                       205     0     0
+red4                       139     0     0
+rosy brown                 188   143   143
+RosyBrown                  188   143   143
+RosyBrown1                 255   193   193
+RosyBrown2                 238   180   180
+RosyBrown3                 205   155   155
+RosyBrown4                 139   105   105
+royal blue                  65   105   105
+RoyalBlue                   65   105   105
+RoyalBlue1                  72   118   118
+RoyalBlue2                  67   110   110
+RoyalBlue3                  58    95    95
+RoyalBlue4                  39    64    64
+saddle brown               139    69    69
+SaddleBrown                139    69    69
+salmon                     250   128   128
+salmon1                    255   140   140
+salmon2                    238   130   130
+salmon3                    205   112   112
+salmon4                    139    76    76
+sandy brown                244   164   164
+SandyBrown                 244   164   164
+sea green                   46   139   139
+SeaGreen                    46   139   139
+SeaGreen1                   84   255   255
+SeaGreen2                   78   238   238
+SeaGreen3                   67   205   205
+SeaGreen4                   46   139   139
+seashell                   255   245   245
+seashell1                  255   245   245
+seashell2                  238   229   229
+seashell3                  205   197   197
+seashell4                  139   134   134
+sienna                     160    82    82
+sienna1                    255   130   130
+sienna2                    238   121   121
+sienna3                    205   104   104
+sienna4                    139    71    71
+sky blue                   135   206   206
+SkyBlue                    135   206   206
+SkyBlue1                   135   206   206
+SkyBlue2                   126   192   192
+SkyBlue3                   108   166   166
+SkyBlue4                    74   112   112
+slate blue                 106    90    90
+slate gray                 112   128   128
+slate grey                 112   128   128
+SlateBlue                  106    90    90
+SlateBlue1                 131   111   111
+SlateBlue2                 122   103   103
+SlateBlue3                 105    89    89
+SlateBlue4                  71    60    60
+SlateGray                  112   128   128
+SlateGray1                 198   226   226
+SlateGray2                 185   211   211
+SlateGray3                 159   182   182
+SlateGray4                 108   123   123
+SlateGrey                  112   128   128
+snow                       255   250   250
+snow1                      255   250   250
+snow2                      238   233   233
+snow3                      205   201   201
+snow4                      139   137   137
+spring green                 0   255   255
+SpringGreen                  0   255   255
+SpringGreen1                 0   255   255
+SpringGreen2                 0   238   238
+SpringGreen3                 0   205   205
+SpringGreen4                 0   139   139
+steel blue                  70   130   130
+SteelBlue                   70   130   130
+SteelBlue1                  99   184   184
+SteelBlue2                  92   172   172
+SteelBlue3                  79   148   148
+SteelBlue4                  54   100   100
+tan                        210   180   180
+tan1                       255   165   165
+tan2                       238   154   154
+tan3                       205   133   133
+tan4                       139    90    90
+thistle                    216   191   191
+thistle1                   255   225   225
+thistle2                   238   210   210
+thistle3                   205   181   181
+thistle4                   139   123   123
+tomato                     255    99    99
+tomato1                    255    99    99
+tomato2                    238    92    92
+tomato3                    205    79    79
+tomato4                    139    54    54
+turquoise                   64   224   224
+turquoise1                   0   245   245
+turquoise2                   0   229   229
+turquoise3                   0   197   197
+turquoise4                   0   134   134
+violet                     238   130   130
+violet red                 208    32    32
+VioletRed                  208    32    32
+VioletRed1                 255    62    62
+VioletRed2                 238    58    58
+VioletRed3                 205    50    50
+VioletRed4                 139    34    34
+wheat                      245   222   222
+wheat1                     255   231   231
+wheat2                     238   216   216
+wheat3                     205   186   186
+wheat4                     139   126   126
+white                      255   255   255
+white smoke                245   245   245
+WhiteSmoke                 245   245   245
+yellow                     255   255   255
+yellow green               154   205   205
+yellow1                    255   255   255
+yellow2                    238   238   238
+yellow3                    205   205   205
+yellow4                    139   139   139
+YellowGreen                154   205   205
+.CE
+
+.SH KEYWORDS
+color, option
diff --git a/tk/doc/cursors.n b/tk/doc/cursors.n
new file mode 100644 (file)
index 0000000..c93d375
--- /dev/null
@@ -0,0 +1,154 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+'\"
+.so man.macros
+.TH cursors n 8.3 Tk "Tk Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+cursors \- mouse cursors available in Tk
+
+.SH DESCRIPTION
+.PP
+The \fB-cursor\fR widget option allows a Tk programmer to change the
+mouse cursor for a particular widget.  The cursor names recognized by
+Tk on all platforms are:
+.CS
+X_cursor
+arrow
+based_arrow_down
+based_arrow_up
+boat
+bogosity
+bottom_left_corner
+bottom_right_corner
+bottom_side
+bottom_tee
+box_spiral
+center_ptr
+circle
+clock
+coffee_mug
+cross
+cross_reverse
+crosshair
+diamond_cross
+dot
+dotbox
+double_arrow
+draft_large
+draft_small
+draped_box
+exchange
+fleur
+gobbler
+gumby
+hand1
+hand2
+heart
+icon
+iron_cross
+left_ptr
+left_side
+left_tee
+leftbutton
+ll_angle
+lr_angle
+man
+middlebutton
+mouse
+pencil
+pirate
+plus
+question_arrow
+right_ptr
+right_side
+right_tee
+rightbutton
+rtl_logo
+sailboat
+sb_down_arrow
+sb_h_double_arrow
+sb_left_arrow
+sb_right_arrow
+sb_up_arrow
+sb_v_double_arrow
+shuttle
+sizing
+spider
+spraycan
+star
+target
+tcross
+top_left_arrow
+top_left_corner
+top_right_corner
+top_side
+top_tee
+trek
+ul_angle
+umbrella
+ur_angle
+watch
+xterm
+.CE
+
+.SH "PORTABILITY ISSUES"
+
+.TP
+\fBWindows\fR
+On Windows systems, the following cursors are mapped to native cursors:
+.RS
+.CS
+arrow
+center_ptr
+crosshair
+fleur
+ibeam
+icon
+sb_h_double_arrow
+sb_v_double_arrow
+watch
+xterm
+.CE
+And the following additional cursors are available:
+.CS
+no
+starting
+size
+size_ne_sw
+size_ns
+size_nw_se
+size_we
+uparrow
+wait
+.CE
+The \fBno\fR cursor can be specified to eliminate the cursor.
+.RE
+
+.TP
+\fBMacintosh\fR
+On Macintosh systems, the following cursors are mapped to native cursors:
+.RS
+.CS
+arrow
+cross
+crosshair
+ibeam
+plus
+watch
+xterm
+.CE
+And the following additional cursors are available:
+.CS
+text
+cross-hair
+.CE
+.RE
+
+.SH KEYWORDS
+cursor, option
diff --git a/tk/doc/exit.n b/tk/doc/exit.n
new file mode 100644 (file)
index 0000000..2dfffb4
--- /dev/null
@@ -0,0 +1,28 @@
+'\"
+'\" Copyright (c) 1993 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) exit.n 1.6 96/03/25 20:13:32
+'\" 
+.so man.macros
+.TH exit n "" Tcl "Tcl Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+exit \- End the application
+.SH SYNOPSIS
+\fBexit \fR?\fIreturnCode\fR?
+.BE
+
+.SH DESCRIPTION
+.PP
+Terminate the process, returning \fIreturnCode\fR to the
+system as the exit status.
+If \fIreturnCode\fR isn't specified then it defaults
+to 0.
+
+.SH KEYWORDS
+exit, process
diff --git a/tk/doc/fileevent.n b/tk/doc/fileevent.n
new file mode 100644 (file)
index 0000000..daff74e
--- /dev/null
@@ -0,0 +1,109 @@
+'\"
+'\" Copyright (c) 1994 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) fileevent.n 1.6 96/02/23 13:46:29
+'\" 
+.so man.macros
+.TH fileevent n 7.5 Tcl "Tcl Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+fileevent \- Execute a script when a channel becomes readable or writable
+.SH SYNOPSIS
+\fBfileevent \fIchannelId \fBreadable \fR?\fIscript\fR?
+.sp
+\fBfileevent \fIchannelId \fBwritable \fR?\fIscript\fR?
+.BE
+
+.SH DESCRIPTION
+.PP
+This command is used to create \fIfile event handlers\fR.  A file event
+handler is a binding between a channel and a script, such that the script
+is evaluated whenever the channel becomes readable or writable.  File event
+handlers are most commonly used to allow data to be received from another
+process on an event-driven basis, so that the receiver can continue to
+interact with the user while waiting for the data to arrive.  If an
+application invokes \fBgets\fR or \fBread\fR on a blocking channel when
+there is no input data available, the process will block; until the input
+data arrives, it will not be able to service other events, so it will
+appear to the user to ``freeze up''.  With \fBfileevent\fR, the process can
+tell when data is present and only invoke \fBgets\fR or \fBread\fR when
+they won't block.
+.PP
+The \fIchannelId\fR argument to \fBfileevent\fR refers to an open channel,
+such as the return value from a previous \fBopen\fR or \fBsocket\fR
+command.
+If the \fIscript\fR argument is specified, then \fBfileevent\fR
+creates a new event handler:  \fIscript\fR will be evaluated
+whenever the channel becomes readable or writable (depending on the
+second argument to \fBfileevent\fR).
+In this case \fBfileevent\fR returns an empty string.
+The \fBreadable\fR and \fBwritable\fR event handlers for a file
+are independent, and may be created and deleted separately.
+However, there may be at most one \fBreadable\fR and one \fBwritable\fR
+handler for a file at a given time in a given interpreter.
+If \fBfileevent\fR is called when the specified handler already
+exists in the invoking interpreter, the new script replaces the old one.
+.PP
+If the \fIscript\fR argument is not specified, \fBfileevent\fR
+returns the current script for \fIchannelId\fR, or an empty string
+if there is none.
+If the \fIscript\fR argument is specified as an empty string
+then the event handler is deleted, so that no script will be invoked.
+A file event handler is also deleted automatically whenever
+its channel is closed or its interpreter is deleted.
+.PP
+A channel is considered to be readable if there is unread data
+available on the underlying device.
+A channel is also considered to be readable if there is unread
+data in an input buffer, except in the special case where the
+most recent attempt to read from the channel was a \fBgets\fR
+call that could not find a complete line in the input buffer.
+This feature allows a file to be read a line at a time in nonblocking mode
+using events.
+A channel is also considered to be readable if an end of file or
+error condition is present on the underlying file or device.
+It is important for \fIscript\fR to check for these conditions
+and handle them appropriately;  for example, if there is no special
+check for end of file, an infinite loop may occur where \fIscript\fR
+reads no data, returns, and is immediately invoked again.
+.PP
+A channel is considered to be writable if at least one byte of data
+can be written to the underlying file or device without blocking,
+or if an error condition is present on the underlying file or device.
+.PP
+Event-driven I/O works best for channels that have been
+placed into nonblocking mode with the \fBfconfigure\fR command.
+In blocking mode, a \fBputs\fR command may block if you give it
+more data than the underlying file or device can accept, and a
+\fBgets\fR or \fBread\fR command will block if you attempt to read
+more data than is ready;  no events will be processed while the
+commands block.
+In nonblocking mode \fBputs\fR, \fBread\fR, and \fBgets\fR never block.
+See the documentation for the individual commands for information
+on how they handle blocking and nonblocking channels.
+.PP
+The script for a file event is executed at global level (outside the
+context of any Tcl procedure) in the interpreter in which the
+\fBfileevent\fR command was invoked.
+If an error occurs while executing the script then the
+\fBbgerror\fR mechanism is used to report the error.
+In addition, the file event handler is deleted if it ever returns
+an error;  this is done in order to prevent infinite loops due to
+buggy handlers.
+
+.SH CREDITS
+.PP
+\fBfileevent\fR is based on the \fBaddinput\fR command created
+by Mark Diekhans.
+
+.SH "SEE ALSO"
+bgerror, fconfigure, gets, puts, read
+
+.SH KEYWORDS
+asynchronous I/O, blocking, channel, event handler, nonblocking, readable,
+script, writable.
diff --git a/tk/doc/keysyms.n b/tk/doc/keysyms.n
new file mode 100644 (file)
index 0000000..0746d54
--- /dev/null
@@ -0,0 +1,930 @@
+'\"
+'\" Copyright (c) 1998-2000 by Scriptics Corporation.
+'\" All rights reserved.
+'\" 
+'\" RCS: @(#) $Id$
+'\" 
+'\"
+.so man.macros
+.TH keysyms n 8.3 Tk "Tk Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+keysyms \- keysyms recognized by Tk
+.BE
+
+.SH DESCRIPTION
+.PP
+Tk recognizes many keysyms when specifying key bindings (eg, 
+\fBbind . <Key-\fR\fIkeysym\fR\fB>\fR).  The following list enumerates the
+keysyms that will be recognized by Tk.  Note that not all keysyms will
+be valid on all platforms.  For example, on Unix systems, the presence
+of a particular keysym is dependant on the configuration of the
+keyboard modifier map.  This list shows keysyms along with their
+decimal and hexidecimal values.
+.PP
+.CS
+space                               32     0x0020
+exclam                              33     0x0021
+quotedbl                            34     0x0022
+numbersign                          35     0x0023
+dollar                              36     0x0024
+percent                             37     0x0025
+ampersand                           38     0x0026
+quoteright                          39     0x0027
+parenleft                           40     0x0028
+parenright                          41     0x0029
+asterisk                            42     0x002a
+plus                                43     0x002b
+comma                               44     0x002c
+minus                               45     0x002d
+period                              46     0x002e
+slash                               47     0x002f
+0                                   48     0x0030
+1                                   49     0x0031
+2                                   50     0x0032
+3                                   51     0x0033
+4                                   52     0x0034
+5                                   53     0x0035
+6                                   54     0x0036
+7                                   55     0x0037
+8                                   56     0x0038
+9                                   57     0x0039
+colon                               58     0x003a
+semicolon                           59     0x003b
+less                                60     0x003c
+equal                               61     0x003d
+greater                             62     0x003e
+question                            63     0x003f
+at                                  64     0x0040
+A                                   65     0x0041
+B                                   66     0x0042
+C                                   67     0x0043
+D                                   68     0x0044
+E                                   69     0x0045
+F                                   70     0x0046
+G                                   71     0x0047
+H                                   72     0x0048
+I                                   73     0x0049
+J                                   74     0x004a
+K                                   75     0x004b
+L                                   76     0x004c
+M                                   77     0x004d
+N                                   78     0x004e
+O                                   79     0x004f
+P                                   80     0x0050
+Q                                   81     0x0051
+R                                   82     0x0052
+S                                   83     0x0053
+T                                   84     0x0054
+U                                   85     0x0055
+V                                   86     0x0056
+W                                   87     0x0057
+X                                   88     0x0058
+Y                                   89     0x0059
+Z                                   90     0x005a
+bracketleft                         91     0x005b
+backslash                           92     0x005c
+bracketright                        93     0x005d
+asciicircum                         94     0x005e
+underscore                          95     0x005f
+quoteleft                           96     0x0060
+a                                   97     0x0061
+b                                   98     0x0062
+c                                   99     0x0063
+d                                  100     0x0064
+e                                  101     0x0065
+f                                  102     0x0066
+g                                  103     0x0067
+h                                  104     0x0068
+i                                  105     0x0069
+j                                  106     0x006a
+k                                  107     0x006b
+l                                  108     0x006c
+m                                  109     0x006d
+n                                  110     0x006e
+o                                  111     0x006f
+p                                  112     0x0070
+q                                  113     0x0071
+r                                  114     0x0072
+s                                  115     0x0073
+t                                  116     0x0074
+u                                  117     0x0075
+v                                  118     0x0076
+w                                  119     0x0077
+x                                  120     0x0078
+y                                  121     0x0079
+z                                  122     0x007a
+braceleft                          123     0x007b
+bar                                124     0x007c
+braceright                         125     0x007d
+asciitilde                         126     0x007e
+nobreakspace                       160     0x00a0
+exclamdown                         161     0x00a1
+cent                               162     0x00a2
+sterling                           163     0x00a3
+currency                           164     0x00a4
+yen                                165     0x00a5
+brokenbar                          166     0x00a6
+section                            167     0x00a7
+diaeresis                          168     0x00a8
+copyright                          169     0x00a9
+ordfeminine                        170     0x00aa
+guillemotleft                      171     0x00ab
+notsign                            172     0x00ac
+hyphen                             173     0x00ad
+registered                         174     0x00ae
+macron                             175     0x00af
+degree                             176     0x00b0
+plusminus                          177     0x00b1
+twosuperior                        178     0x00b2
+threesuperior                      179     0x00b3
+acute                              180     0x00b4
+mu                                 181     0x00b5
+paragraph                          182     0x00b6
+periodcentered                     183     0x00b7
+cedilla                            184     0x00b8
+onesuperior                        185     0x00b9
+masculine                          186     0x00ba
+guillemotright                     187     0x00bb
+onequarter                         188     0x00bc
+onehalf                            189     0x00bd
+threequarters                      190     0x00be
+questiondown                       191     0x00bf
+Agrave                             192     0x00c0
+Aacute                             193     0x00c1
+Acircumflex                        194     0x00c2
+Atilde                             195     0x00c3
+Adiaeresis                         196     0x00c4
+Aring                              197     0x00c5
+AE                                 198     0x00c6
+Ccedilla                           199     0x00c7
+Egrave                             200     0x00c8
+Eacute                             201     0x00c9
+Ecircumflex                        202     0x00ca
+Ediaeresis                         203     0x00cb
+Igrave                             204     0x00cc
+Iacute                             205     0x00cd
+Icircumflex                        206     0x00ce
+Idiaeresis                         207     0x00cf
+Eth                                208     0x00d0
+Ntilde                             209     0x00d1
+Ograve                             210     0x00d2
+Oacute                             211     0x00d3
+Ocircumflex                        212     0x00d4
+Otilde                             213     0x00d5
+Odiaeresis                         214     0x00d6
+multiply                           215     0x00d7
+Ooblique                           216     0x00d8
+Ugrave                             217     0x00d9
+Uacute                             218     0x00da
+Ucircumflex                        219     0x00db
+Udiaeresis                         220     0x00dc
+Yacute                             221     0x00dd
+Thorn                              222     0x00de
+ssharp                             223     0x00df
+agrave                             224     0x00e0
+aacute                             225     0x00e1
+acircumflex                        226     0x00e2
+atilde                             227     0x00e3
+adiaeresis                         228     0x00e4
+aring                              229     0x00e5
+ae                                 230     0x00e6
+ccedilla                           231     0x00e7
+egrave                             232     0x00e8
+eacute                             233     0x00e9
+ecircumflex                        234     0x00ea
+ediaeresis                         235     0x00eb
+igrave                             236     0x00ec
+iacute                             237     0x00ed
+icircumflex                        238     0x00ee
+idiaeresis                         239     0x00ef
+eth                                240     0x00f0
+ntilde                             241     0x00f1
+ograve                             242     0x00f2
+oacute                             243     0x00f3
+ocircumflex                        244     0x00f4
+otilde                             245     0x00f5
+odiaeresis                         246     0x00f6
+division                           247     0x00f7
+oslash                             248     0x00f8
+ugrave                             249     0x00f9
+uacute                             250     0x00fa
+ucircumflex                        251     0x00fb
+udiaeresis                         252     0x00fc
+yacute                             253     0x00fd
+thorn                              254     0x00fe
+ydiaeresis                         255     0x00ff
+Aogonek                            417     0x01a1
+breve                              418     0x01a2
+Lstroke                            419     0x01a3
+Lcaron                             421     0x01a5
+Sacute                             422     0x01a6
+Scaron                             425     0x01a9
+Scedilla                           426     0x01aa
+Tcaron                             427     0x01ab
+Zacute                             428     0x01ac
+.CE
+.CS
+Zcaron                             430     0x01ae
+Zabovedot                          431     0x01af
+aogonek                            433     0x01b1
+ogonek                             434     0x01b2
+lstroke                            435     0x01b3
+lcaron                             437     0x01b5
+sacute                             438     0x01b6
+caron                              439     0x01b7
+scaron                             441     0x01b9
+scedilla                           442     0x01ba
+tcaron                             443     0x01bb
+zacute                             444     0x01bc
+doubleacute                        445     0x01bd
+zcaron                             446     0x01be
+zabovedot                          447     0x01bf
+Racute                             448     0x01c0
+Abreve                             451     0x01c3
+Cacute                             454     0x01c6
+Ccaron                             456     0x01c8
+Eogonek                            458     0x01ca
+Ecaron                             460     0x01cc
+Dcaron                             463     0x01cf
+Nacute                             465     0x01d1
+Ncaron                             466     0x01d2
+Odoubleacute                       469     0x01d5
+Rcaron                             472     0x01d8
+Uring                              473     0x01d9
+Udoubleacute                       475     0x01db
+Tcedilla                           478     0x01de
+racute                             480     0x01e0
+abreve                             483     0x01e3
+cacute                             486     0x01e6
+ccaron                             488     0x01e8
+eogonek                            490     0x01ea
+ecaron                             492     0x01ec
+dcaron                             495     0x01ef
+nacute                             497     0x01f1
+ncaron                             498     0x01f2
+odoubleacute                       501     0x01f5
+rcaron                             504     0x01f8
+uring                              505     0x01f9
+udoubleacute                       507     0x01fb
+tcedilla                           510     0x01fe
+abovedot                           511     0x01ff
+Hstroke                            673     0x02a1
+Hcircumflex                        678     0x02a6
+Iabovedot                          681     0x02a9
+Gbreve                             683     0x02ab
+Jcircumflex                        684     0x02ac
+hstroke                            689     0x02b1
+hcircumflex                        694     0x02b6
+idotless                           697     0x02b9
+gbreve                             699     0x02bb
+jcircumflex                        700     0x02bc
+Cabovedot                          709     0x02c5
+Ccircumflex                        710     0x02c6
+Gabovedot                          725     0x02d5
+Gcircumflex                        728     0x02d8
+Ubreve                             733     0x02dd
+Scircumflex                        734     0x02de
+cabovedot                          741     0x02e5
+ccircumflex                        742     0x02e6
+gabovedot                          757     0x02f5
+gcircumflex                        760     0x02f8
+ubreve                             765     0x02fd
+scircumflex                        766     0x02fe
+kappa                              930     0x03a2
+Rcedilla                           931     0x03a3
+Itilde                             933     0x03a5
+Lcedilla                           934     0x03a6
+Emacron                            938     0x03aa
+Gcedilla                           939     0x03ab
+Tslash                             940     0x03ac
+rcedilla                           947     0x03b3
+itilde                             949     0x03b5
+lcedilla                           950     0x03b6
+emacron                            954     0x03ba
+gacute                             955     0x03bb
+tslash                             956     0x03bc
+ENG                                957     0x03bd
+eng                                959     0x03bf
+Amacron                            960     0x03c0
+Iogonek                            967     0x03c7
+Eabovedot                          972     0x03cc
+Imacron                            975     0x03cf
+Ncedilla                           977     0x03d1
+Omacron                            978     0x03d2
+Kcedilla                           979     0x03d3
+Uogonek                            985     0x03d9
+Utilde                             989     0x03dd
+Umacron                            990     0x03de
+amacron                            992     0x03e0
+iogonek                            999     0x03e7
+eabovedot                         1004     0x03ec
+imacron                           1007     0x03ef
+ncedilla                          1009     0x03f1
+omacron                           1010     0x03f2
+kcedilla                          1011     0x03f3
+uogonek                           1017     0x03f9
+utilde                            1021     0x03fd
+umacron                           1022     0x03fe
+overline                          1150     0x047e
+kana_fullstop                     1185     0x04a1
+kana_openingbracket               1186     0x04a2
+kana_closingbracket               1187     0x04a3
+kana_comma                        1188     0x04a4
+kana_middledot                    1189     0x04a5
+kana_WO                           1190     0x04a6
+kana_a                            1191     0x04a7
+kana_i                            1192     0x04a8
+kana_u                            1193     0x04a9
+kana_e                            1194     0x04aa
+kana_o                            1195     0x04ab
+kana_ya                           1196     0x04ac
+kana_yu                           1197     0x04ad
+kana_yo                           1198     0x04ae
+kana_tu                           1199     0x04af
+prolongedsound                    1200     0x04b0
+kana_A                            1201     0x04b1
+kana_I                            1202     0x04b2
+kana_U                            1203     0x04b3
+kana_E                            1204     0x04b4
+kana_O                            1205     0x04b5
+kana_KA                           1206     0x04b6
+kana_KI                           1207     0x04b7
+kana_KU                           1208     0x04b8
+kana_KE                           1209     0x04b9
+kana_KO                           1210     0x04ba
+kana_SA                           1211     0x04bb
+kana_SHI                          1212     0x04bc
+kana_SU                           1213     0x04bd
+kana_SE                           1214     0x04be
+kana_SO                           1215     0x04bf
+kana_TA                           1216     0x04c0
+kana_TI                           1217     0x04c1
+kana_TU                           1218     0x04c2
+kana_TE                           1219     0x04c3
+kana_TO                           1220     0x04c4
+kana_NA                           1221     0x04c5
+kana_NI                           1222     0x04c6
+kana_NU                           1223     0x04c7
+kana_NE                           1224     0x04c8
+kana_NO                           1225     0x04c9
+kana_HA                           1226     0x04ca
+kana_HI                           1227     0x04cb
+kana_HU                           1228     0x04cc
+kana_HE                           1229     0x04cd
+kana_HO                           1230     0x04ce
+kana_MA                           1231     0x04cf
+kana_MI                           1232     0x04d0
+kana_MU                           1233     0x04d1
+kana_ME                           1234     0x04d2
+kana_MO                           1235     0x04d3
+kana_YA                           1236     0x04d4
+kana_YU                           1237     0x04d5
+kana_YO                           1238     0x04d6
+kana_RA                           1239     0x04d7
+kana_RI                           1240     0x04d8
+kana_RU                           1241     0x04d9
+kana_RE                           1242     0x04da
+kana_RO                           1243     0x04db
+kana_WA                           1244     0x04dc
+kana_N                            1245     0x04dd
+voicedsound                       1246     0x04de
+semivoicedsound                   1247     0x04df
+Arabic_comma                      1452     0x05ac
+Arabic_semicolon                  1467     0x05bb
+Arabic_question_mark              1471     0x05bf
+Arabic_hamza                      1473     0x05c1
+Arabic_maddaonalef                1474     0x05c2
+Arabic_hamzaonalef                1475     0x05c3
+Arabic_hamzaonwaw                 1476     0x05c4
+Arabic_hamzaunderalef             1477     0x05c5
+Arabic_hamzaonyeh                 1478     0x05c6
+Arabic_alef                       1479     0x05c7
+Arabic_beh                        1480     0x05c8
+Arabic_tehmarbuta                 1481     0x05c9
+Arabic_teh                        1482     0x05ca
+Arabic_theh                       1483     0x05cb
+Arabic_jeem                       1484     0x05cc
+Arabic_hah                        1485     0x05cd
+Arabic_khah                       1486     0x05ce
+Arabic_dal                        1487     0x05cf
+Arabic_thal                       1488     0x05d0
+Arabic_ra                         1489     0x05d1
+Arabic_zain                       1490     0x05d2
+Arabic_seen                       1491     0x05d3
+Arabic_sheen                      1492     0x05d4
+Arabic_sad                        1493     0x05d5
+Arabic_dad                        1494     0x05d6
+Arabic_tah                        1495     0x05d7
+Arabic_zah                        1496     0x05d8
+Arabic_ain                        1497     0x05d9
+Arabic_ghain                      1498     0x05da
+Arabic_tatweel                    1504     0x05e0
+Arabic_feh                        1505     0x05e1
+Arabic_qaf                        1506     0x05e2
+Arabic_kaf                        1507     0x05e3
+Arabic_lam                        1508     0x05e4
+Arabic_meem                       1509     0x05e5
+.CE
+.CS
+Arabic_noon                       1510     0x05e6
+Arabic_heh                        1511     0x05e7
+Arabic_waw                        1512     0x05e8
+Arabic_alefmaksura                1513     0x05e9
+Arabic_yeh                        1514     0x05ea
+Arabic_fathatan                   1515     0x05eb
+Arabic_dammatan                   1516     0x05ec
+Arabic_kasratan                   1517     0x05ed
+Arabic_fatha                      1518     0x05ee
+Arabic_damma                      1519     0x05ef
+Arabic_kasra                      1520     0x05f0
+Arabic_shadda                     1521     0x05f1
+Arabic_sukun                      1522     0x05f2
+Serbian_dje                       1697     0x06a1
+Macedonia_gje                     1698     0x06a2
+Cyrillic_io                       1699     0x06a3
+Ukranian_je                       1700     0x06a4
+Macedonia_dse                     1701     0x06a5
+Ukranian_i                        1702     0x06a6
+Ukranian_yi                       1703     0x06a7
+Serbian_je                        1704     0x06a8
+Serbian_lje                       1705     0x06a9
+Serbian_nje                       1706     0x06aa
+Serbian_tshe                      1707     0x06ab
+Macedonia_kje                     1708     0x06ac
+Byelorussian_shortu               1710     0x06ae
+Serbian_dze                       1711     0x06af
+numerosign                        1712     0x06b0
+Serbian_DJE                       1713     0x06b1
+Macedonia_GJE                     1714     0x06b2
+Cyrillic_IO                       1715     0x06b3
+Ukranian_JE                       1716     0x06b4
+Macedonia_DSE                     1717     0x06b5
+Ukranian_I                        1718     0x06b6
+Ukranian_YI                       1719     0x06b7
+Serbian_JE                        1720     0x06b8
+Serbian_LJE                       1721     0x06b9
+Serbian_NJE                       1722     0x06ba
+Serbian_TSHE                      1723     0x06bb
+Macedonia_KJE                     1724     0x06bc
+Byelorussian_SHORTU               1726     0x06be
+Serbian_DZE                       1727     0x06bf
+Cyrillic_yu                       1728     0x06c0
+Cyrillic_a                        1729     0x06c1
+Cyrillic_be                       1730     0x06c2
+Cyrillic_tse                      1731     0x06c3
+Cyrillic_de                       1732     0x06c4
+Cyrillic_ie                       1733     0x06c5
+Cyrillic_ef                       1734     0x06c6
+Cyrillic_ghe                      1735     0x06c7
+Cyrillic_ha                       1736     0x06c8
+Cyrillic_i                        1737     0x06c9
+Cyrillic_shorti                   1738     0x06ca
+Cyrillic_ka                       1739     0x06cb
+Cyrillic_el                       1740     0x06cc
+Cyrillic_em                       1741     0x06cd
+Cyrillic_en                       1742     0x06ce
+Cyrillic_o                        1743     0x06cf
+Cyrillic_pe                       1744     0x06d0
+Cyrillic_ya                       1745     0x06d1
+Cyrillic_er                       1746     0x06d2
+Cyrillic_es                       1747     0x06d3
+Cyrillic_te                       1748     0x06d4
+Cyrillic_u                        1749     0x06d5
+Cyrillic_zhe                      1750     0x06d6
+Cyrillic_ve                       1751     0x06d7
+Cyrillic_softsign                 1752     0x06d8
+Cyrillic_yeru                     1753     0x06d9
+Cyrillic_ze                       1754     0x06da
+Cyrillic_sha                      1755     0x06db
+Cyrillic_e                        1756     0x06dc
+Cyrillic_shcha                    1757     0x06dd
+Cyrillic_che                      1758     0x06de
+Cyrillic_hardsign                 1759     0x06df
+Cyrillic_YU                       1760     0x06e0
+Cyrillic_A                        1761     0x06e1
+Cyrillic_BE                       1762     0x06e2
+Cyrillic_TSE                      1763     0x06e3
+Cyrillic_DE                       1764     0x06e4
+Cyrillic_IE                       1765     0x06e5
+Cyrillic_EF                       1766     0x06e6
+Cyrillic_GHE                      1767     0x06e7
+Cyrillic_HA                       1768     0x06e8
+Cyrillic_I                        1769     0x06e9
+Cyrillic_SHORTI                   1770     0x06ea
+Cyrillic_KA                       1771     0x06eb
+Cyrillic_EL                       1772     0x06ec
+Cyrillic_EM                       1773     0x06ed
+Cyrillic_EN                       1774     0x06ee
+Cyrillic_O                        1775     0x06ef
+Cyrillic_PE                       1776     0x06f0
+Cyrillic_YA                       1777     0x06f1
+Cyrillic_ER                       1778     0x06f2
+Cyrillic_ES                       1779     0x06f3
+Cyrillic_TE                       1780     0x06f4
+Cyrillic_U                        1781     0x06f5
+Cyrillic_ZHE                      1782     0x06f6
+Cyrillic_VE                       1783     0x06f7
+Cyrillic_SOFTSIGN                 1784     0x06f8
+Cyrillic_YERU                     1785     0x06f9
+Cyrillic_ZE                       1786     0x06fa
+Cyrillic_SHA                      1787     0x06fb
+Cyrillic_E                        1788     0x06fc
+Cyrillic_SHCHA                    1789     0x06fd
+Cyrillic_CHE                      1790     0x06fe
+Cyrillic_HARDSIGN                 1791     0x06ff
+Greek_ALPHAaccent                 1953     0x07a1
+Greek_EPSILONaccent               1954     0x07a2
+Greek_ETAaccent                   1955     0x07a3
+Greek_IOTAaccent                  1956     0x07a4
+Greek_IOTAdiaeresis               1957     0x07a5
+Greek_IOTAaccentdiaeresis         1958     0x07a6
+Greek_OMICRONaccent               1959     0x07a7
+Greek_UPSILONaccent               1960     0x07a8
+Greek_UPSILONdieresis             1961     0x07a9
+Greek_UPSILONaccentdieresis       1962     0x07aa
+Greek_OMEGAaccent                 1963     0x07ab
+Greek_alphaaccent                 1969     0x07b1
+Greek_epsilonaccent               1970     0x07b2
+Greek_etaaccent                   1971     0x07b3
+Greek_iotaaccent                  1972     0x07b4
+Greek_iotadieresis                1973     0x07b5
+Greek_iotaaccentdieresis          1974     0x07b6
+Greek_omicronaccent               1975     0x07b7
+Greek_upsilonaccent               1976     0x07b8
+Greek_upsilondieresis             1977     0x07b9
+Greek_upsilonaccentdieresis       1978     0x07ba
+Greek_omegaaccent                 1979     0x07bb
+Greek_ALPHA                       1985     0x07c1
+Greek_BETA                        1986     0x07c2
+Greek_GAMMA                       1987     0x07c3
+Greek_DELTA                       1988     0x07c4
+Greek_EPSILON                     1989     0x07c5
+Greek_ZETA                        1990     0x07c6
+Greek_ETA                         1991     0x07c7
+Greek_THETA                       1992     0x07c8
+Greek_IOTA                        1993     0x07c9
+Greek_KAPPA                       1994     0x07ca
+Greek_LAMBDA                      1995     0x07cb
+Greek_MU                          1996     0x07cc
+Greek_NU                          1997     0x07cd
+Greek_XI                          1998     0x07ce
+Greek_OMICRON                     1999     0x07cf
+Greek_PI                          2000     0x07d0
+Greek_RHO                         2001     0x07d1
+Greek_SIGMA                       2002     0x07d2
+Greek_TAU                         2004     0x07d4
+Greek_UPSILON                     2005     0x07d5
+Greek_PHI                         2006     0x07d6
+Greek_CHI                         2007     0x07d7
+Greek_PSI                         2008     0x07d8
+Greek_OMEGA                       2009     0x07d9
+Greek_alpha                       2017     0x07e1
+Greek_beta                        2018     0x07e2
+Greek_gamma                       2019     0x07e3
+Greek_delta                       2020     0x07e4
+Greek_epsilon                     2021     0x07e5
+Greek_zeta                        2022     0x07e6
+Greek_eta                         2023     0x07e7
+Greek_theta                       2024     0x07e8
+Greek_iota                        2025     0x07e9
+Greek_kappa                       2026     0x07ea
+Greek_lambda                      2027     0x07eb
+Greek_mu                          2028     0x07ec
+Greek_nu                          2029     0x07ed
+Greek_xi                          2030     0x07ee
+Greek_omicron                     2031     0x07ef
+Greek_pi                          2032     0x07f0
+Greek_rho                         2033     0x07f1
+Greek_sigma                       2034     0x07f2
+Greek_finalsmallsigma             2035     0x07f3
+Greek_tau                         2036     0x07f4
+Greek_upsilon                     2037     0x07f5
+Greek_phi                         2038     0x07f6
+Greek_chi                         2039     0x07f7
+Greek_psi                         2040     0x07f8
+Greek_omega                       2041     0x07f9
+leftradical                       2209     0x08a1
+topleftradical                    2210     0x08a2
+horizconnector                    2211     0x08a3
+topintegral                       2212     0x08a4
+botintegral                       2213     0x08a5
+vertconnector                     2214     0x08a6
+topleftsqbracket                  2215     0x08a7
+botleftsqbracket                  2216     0x08a8
+toprightsqbracket                 2217     0x08a9
+botrightsqbracket                 2218     0x08aa
+topleftparens                     2219     0x08ab
+botleftparens                     2220     0x08ac
+toprightparens                    2221     0x08ad
+botrightparens                    2222     0x08ae
+leftmiddlecurlybrace              2223     0x08af
+rightmiddlecurlybrace             2224     0x08b0
+topleftsummation                  2225     0x08b1
+botleftsummation                  2226     0x08b2
+topvertsummationconnector         2227     0x08b3
+botvertsummationconnector         2228     0x08b4
+toprightsummation                 2229     0x08b5
+botrightsummation                 2230     0x08b6
+rightmiddlesummation              2231     0x08b7
+.CE
+.CS
+lessthanequal                     2236     0x08bc
+notequal                          2237     0x08bd
+greaterthanequal                  2238     0x08be
+integral                          2239     0x08bf
+therefore                         2240     0x08c0
+variation                         2241     0x08c1
+infinity                          2242     0x08c2
+nabla                             2245     0x08c5
+approximate                       2248     0x08c8
+similarequal                      2249     0x08c9
+ifonlyif                          2253     0x08cd
+implies                           2254     0x08ce
+identical                         2255     0x08cf
+radical                           2262     0x08d6
+includedin                        2266     0x08da
+includes                          2267     0x08db
+intersection                      2268     0x08dc
+union                             2269     0x08dd
+logicaland                        2270     0x08de
+logicalor                         2271     0x08df
+partialderivative                 2287     0x08ef
+function                          2294     0x08f6
+leftarrow                         2299     0x08fb
+uparrow                           2300     0x08fc
+rightarrow                        2301     0x08fd
+downarrow                         2302     0x08fe
+blank                             2527     0x09df
+soliddiamond                      2528     0x09e0
+checkerboard                      2529     0x09e1
+ht                                2530     0x09e2
+ff                                2531     0x09e3
+cr                                2532     0x09e4
+lf                                2533     0x09e5
+nl                                2536     0x09e8
+vt                                2537     0x09e9
+lowrightcorner                    2538     0x09ea
+uprightcorner                     2539     0x09eb
+upleftcorner                      2540     0x09ec
+lowleftcorner                     2541     0x09ed
+crossinglines                     2542     0x09ee
+horizlinescan1                    2543     0x09ef
+horizlinescan3                    2544     0x09f0
+horizlinescan5                    2545     0x09f1
+horizlinescan7                    2546     0x09f2
+horizlinescan9                    2547     0x09f3
+leftt                             2548     0x09f4
+rightt                            2549     0x09f5
+bott                              2550     0x09f6
+topt                              2551     0x09f7
+vertbar                           2552     0x09f8
+emspace                           2721     0x0aa1
+enspace                           2722     0x0aa2
+em3space                          2723     0x0aa3
+em4space                          2724     0x0aa4
+digitspace                        2725     0x0aa5
+punctspace                        2726     0x0aa6
+thinspace                         2727     0x0aa7
+hairspace                         2728     0x0aa8
+emdash                            2729     0x0aa9
+endash                            2730     0x0aaa
+signifblank                       2732     0x0aac
+ellipsis                          2734     0x0aae
+doubbaselinedot                   2735     0x0aaf
+onethird                          2736     0x0ab0
+twothirds                         2737     0x0ab1
+onefifth                          2738     0x0ab2
+twofifths                         2739     0x0ab3
+threefifths                       2740     0x0ab4
+fourfifths                        2741     0x0ab5
+onesixth                          2742     0x0ab6
+fivesixths                        2743     0x0ab7
+careof                            2744     0x0ab8
+figdash                           2747     0x0abb
+leftanglebracket                  2748     0x0abc
+decimalpoint                      2749     0x0abd
+rightanglebracket                 2750     0x0abe
+marker                            2751     0x0abf
+oneeighth                         2755     0x0ac3
+threeeighths                      2756     0x0ac4
+fiveeighths                       2757     0x0ac5
+seveneighths                      2758     0x0ac6
+trademark                         2761     0x0ac9
+signaturemark                     2762     0x0aca
+trademarkincircle                 2763     0x0acb
+leftopentriangle                  2764     0x0acc
+rightopentriangle                 2765     0x0acd
+emopencircle                      2766     0x0ace
+emopenrectangle                   2767     0x0acf
+leftsinglequotemark               2768     0x0ad0
+rightsinglequotemark              2769     0x0ad1
+leftdoublequotemark               2770     0x0ad2
+rightdoublequotemark              2771     0x0ad3
+prescription                      2772     0x0ad4
+minutes                           2774     0x0ad6
+seconds                           2775     0x0ad7
+latincross                        2777     0x0ad9
+hexagram                          2778     0x0ada
+filledrectbullet                  2779     0x0adb
+filledlefttribullet               2780     0x0adc
+filledrighttribullet              2781     0x0add
+emfilledcircle                    2782     0x0ade
+emfilledrect                      2783     0x0adf
+enopencircbullet                  2784     0x0ae0
+enopensquarebullet                2785     0x0ae1
+openrectbullet                    2786     0x0ae2
+opentribulletup                   2787     0x0ae3
+opentribulletdown                 2788     0x0ae4
+openstar                          2789     0x0ae5
+enfilledcircbullet                2790     0x0ae6
+enfilledsqbullet                  2791     0x0ae7
+filledtribulletup                 2792     0x0ae8
+filledtribulletdown               2793     0x0ae9
+leftpointer                       2794     0x0aea
+rightpointer                      2795     0x0aeb
+club                              2796     0x0aec
+diamond                           2797     0x0aed
+heart                             2798     0x0aee
+maltesecross                      2800     0x0af0
+dagger                            2801     0x0af1
+doubledagger                      2802     0x0af2
+checkmark                         2803     0x0af3
+ballotcross                       2804     0x0af4
+musicalsharp                      2805     0x0af5
+musicalflat                       2806     0x0af6
+malesymbol                        2807     0x0af7
+femalesymbol                      2808     0x0af8
+telephone                         2809     0x0af9
+telephonerecorder                 2810     0x0afa
+phonographcopyright               2811     0x0afb
+caret                             2812     0x0afc
+singlelowquotemark                2813     0x0afd
+doublelowquotemark                2814     0x0afe
+cursor                            2815     0x0aff
+leftcaret                         2979     0x0ba3
+rightcaret                        2982     0x0ba6
+downcaret                         2984     0x0ba8
+upcaret                           2985     0x0ba9
+overbar                           3008     0x0bc0
+downtack                          3010     0x0bc2
+upshoe                            3011     0x0bc3
+downstile                         3012     0x0bc4
+underbar                          3014     0x0bc6
+jot                               3018     0x0bca
+quad                              3020     0x0bcc
+uptack                            3022     0x0bce
+circle                            3023     0x0bcf
+upstile                           3027     0x0bd3
+downshoe                          3030     0x0bd6
+rightshoe                         3032     0x0bd8
+leftshoe                          3034     0x0bda
+lefttack                          3036     0x0bdc
+righttack                         3068     0x0bfc
+hebrew_aleph                      3296     0x0ce0
+hebrew_beth                       3297     0x0ce1
+hebrew_gimmel                     3298     0x0ce2
+hebrew_daleth                     3299     0x0ce3
+hebrew_he                         3300     0x0ce4
+hebrew_waw                        3301     0x0ce5
+hebrew_zayin                      3302     0x0ce6
+hebrew_het                        3303     0x0ce7
+hebrew_teth                       3304     0x0ce8
+hebrew_yod                        3305     0x0ce9
+hebrew_finalkaph                  3306     0x0cea
+hebrew_kaph                       3307     0x0ceb
+hebrew_lamed                      3308     0x0cec
+hebrew_finalmem                   3309     0x0ced
+hebrew_mem                        3310     0x0cee
+hebrew_finalnun                   3311     0x0cef
+hebrew_nun                        3312     0x0cf0
+hebrew_samekh                     3313     0x0cf1
+hebrew_ayin                       3314     0x0cf2
+hebrew_finalpe                    3315     0x0cf3
+hebrew_pe                         3316     0x0cf4
+hebrew_finalzadi                  3317     0x0cf5
+hebrew_zadi                       3318     0x0cf6
+hebrew_kuf                        3319     0x0cf7
+hebrew_resh                       3320     0x0cf8
+hebrew_shin                       3321     0x0cf9
+hebrew_taf                        3322     0x0cfa
+BackSpace                        65288     0xff08
+Tab                              65289     0xff09
+Linefeed                         65290     0xff0a
+Clear                            65291     0xff0b
+Return                           65293     0xff0d
+Pause                            65299     0xff13
+Scroll_Lock                      65300     0xff14
+Sys_Req                          65301     0xff15
+Escape                           65307     0xff1b
+Multi_key                        65312     0xff20
+Kanji                            65313     0xff21
+Home                             65360     0xff50
+Left                             65361     0xff51
+Up                               65362     0xff52
+Right                            65363     0xff53
+Down                             65364     0xff54
+Prior                            65365     0xff55
+Next                             65366     0xff56
+End                              65367     0xff57
+Begin                            65368     0xff58
+Win_L                            65371     0xff5b
+Win_R                            65372     0xff5c
+.CE
+.CS
+App                              65373     0xff5d
+Select                           65376     0xff60
+Print                            65377     0xff61
+Execute                          65378     0xff62
+Insert                           65379     0xff63
+Undo                             65381     0xff65
+Redo                             65382     0xff66
+Menu                             65383     0xff67
+Find                             65384     0xff68
+Cancel                           65385     0xff69
+Help                             65386     0xff6a
+Break                            65387     0xff6b
+Hebrew_switch                    65406     0xff7e
+Num_Lock                         65407     0xff7f
+KP_Space                         65408     0xff80
+KP_Tab                           65417     0xff89
+KP_Enter                         65421     0xff8d
+KP_F1                            65425     0xff91
+KP_F2                            65426     0xff92
+KP_F3                            65427     0xff93
+KP_F4                            65428     0xff94
+KP_Multiply                      65450     0xffaa
+KP_Add                           65451     0xffab
+KP_Separator                     65452     0xffac
+KP_Subtract                      65453     0xffad
+KP_Decimal                       65454     0xffae
+KP_Divide                        65455     0xffaf
+KP_0                             65456     0xffb0
+KP_1                             65457     0xffb1
+KP_2                             65458     0xffb2
+KP_3                             65459     0xffb3
+KP_4                             65460     0xffb4
+KP_5                             65461     0xffb5
+KP_6                             65462     0xffb6
+KP_7                             65463     0xffb7
+KP_8                             65464     0xffb8
+KP_9                             65465     0xffb9
+KP_Equal                         65469     0xffbd
+F1                               65470     0xffbe
+F2                               65471     0xffbf
+F3                               65472     0xffc0
+F4                               65473     0xffc1
+F5                               65474     0xffc2
+F6                               65475     0xffc3
+F7                               65476     0xffc4
+F8                               65477     0xffc5
+F9                               65478     0xffc6
+F10                              65479     0xffc7
+L1                               65480     0xffc8
+L2                               65481     0xffc9
+L3                               65482     0xffca
+L4                               65483     0xffcb
+L5                               65484     0xffcc
+L6                               65485     0xffcd
+L7                               65486     0xffce
+L8                               65487     0xffcf
+L9                               65488     0xffd0
+L10                              65489     0xffd1
+R1                               65490     0xffd2
+R2                               65491     0xffd3
+R3                               65492     0xffd4
+R4                               65493     0xffd5
+R5                               65494     0xffd6
+R6                               65495     0xffd7
+R7                               65496     0xffd8
+R8                               65497     0xffd9
+R9                               65498     0xffda
+R10                              65499     0xffdb
+R11                              65500     0xffdc
+R12                              65501     0xffdd
+F33                              65502     0xffde
+R14                              65503     0xffdf
+R15                              65504     0xffe0
+Shift_L                          65505     0xffe1
+Shift_R                          65506     0xffe2
+Control_L                        65507     0xffe3
+Control_R                        65508     0xffe4
+Caps_Lock                        65509     0xffe5
+Shift_Lock                       65510     0xffe6
+Meta_L                           65511     0xffe7
+Meta_R                           65512     0xffe8
+Alt_L                            65513     0xffe9
+Alt_R                            65514     0xffea
+Super_L                          65515     0xffeb
+Super_R                          65516     0xffec
+Hyper_L                          65517     0xffed
+Hyper_R                          65518     0xffee
+Delete                           65535     0xffff
+.CE
+
+.SH "SEE ALSO"
+bind
+
+.SH KEYWORDS
+keysym, bind, binding
diff --git a/tk/doc/update.n b/tk/doc/update.n
new file mode 100644 (file)
index 0000000..522b176
--- /dev/null
@@ -0,0 +1,48 @@
+'\"
+'\" Copyright (c) 1990-1992 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
+'\"
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+'\" SCCS: @(#) update.n 1.3 96/03/25 20:26:34
+'\" 
+.so man.macros
+.TH update n 7.5 Tcl "Tcl Built-In Commands"
+.BS
+'\" Note:  do not modify the .SH NAME line immediately below!
+.SH NAME
+update \- Process pending events and idle callbacks
+.SH SYNOPSIS
+\fBupdate\fR ?\fBidletasks\fR?
+.BE
+
+.SH DESCRIPTION
+.PP
+This command is used to bring the application ``up to date''
+by entering the event loop repeated until all pending events
+(including idle callbacks) have been processed.
+.PP
+If the \fBidletasks\fR keyword is specified as an argument to the
+command, then no new events or errors are processed;  only idle
+callbacks are invoked.
+This causes operations that are normally deferred, such as display
+updates and window layout calculations, to be performed immediately.
+.PP
+The \fBupdate idletasks\fR command is useful in scripts where
+changes have been made to the application's state and you want those
+changes to appear on the display immediately, rather than waiting
+for the script to complete.  Most display updates are performed as
+idle callbacks, so \fBupdate idletasks\fR will cause them to run.
+However, there are some kinds of updates that only happen in
+response to events, such as those triggered by window size changes;
+these updates will not occur in \fBupdate idletasks\fR.
+.PP
+The \fBupdate\fR command with no options is useful in scripts where
+you are performing a long-running computation but you still want
+the application to respond to events such as user interactions;  if
+you occasionally call \fBupdate\fR then user input will be processed
+during the next call to \fBupdate\fR.
+
+.SH KEYWORDS
+event, flush, handler, idle, update
diff --git a/tk/generic/patchlevel.h b/tk/generic/patchlevel.h
new file mode 100644 (file)
index 0000000..8053233
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * patchlevel.h --
+ *
+ * This file does nothing except define a "patch level" for Tk.
+ * The patch level has the form "X.YpZ" where X.Y is the base
+ * release, and Z is a serial number that is used to sequence
+ * patches for a given release.  Thus 4.0p1 is the first patch
+ * to release 4.0, 4.0p2 is the patch that follows 4.0p1, and
+ * so on.  The "pZ" is omitted in an original new release, and
+ * it is replaced with "bZ" for beta releases or "aZ" for alpha
+ * releases (e.g. 4.0b1 is the first beta release of Tk 4.0).
+ * The patch level ensures that patches are applied in the
+ * correct order and only to appropriate sources.
+ *
+ * Copyright (c) 1994-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) patchlevel.h 1.16 96/04/10 14:30:23
+ */
+
+#define TK_PATCH_LEVEL "4.1"
diff --git a/tk/generic/prolog.ps b/tk/generic/prolog.ps
new file mode 100644 (file)
index 0000000..2ab1372
--- /dev/null
@@ -0,0 +1,285 @@
+%%BeginProlog
+50 dict begin
+
+% This is a standard prolog for Postscript generated by Tk's canvas
+% widget.
+% RCS: @(#) $Id$
+
+% The definitions below just define all of the variables used in
+% any of the procedures here.  This is needed for obscure reasons
+% explained on p. 716 of the Postscript manual (Section H.2.7,
+% "Initializing Variables," in the section on Encapsulated Postscript).
+
+/baseline 0 def
+/stipimage 0 def
+/height 0 def
+/justify 0 def
+/lineLength 0 def
+/spacing 0 def
+/stipple 0 def
+/strings 0 def
+/xoffset 0 def
+/yoffset 0 def
+/tmpstip null def
+
+% Define the array ISOLatin1Encoding (which specifies how characters are
+% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
+% level 2 is supposed to define it, but level 1 doesn't).
+
+systemdict /ISOLatin1Encoding known not {
+    /ISOLatin1Encoding [
+       /space /space /space /space /space /space /space /space
+       /space /space /space /space /space /space /space /space
+       /space /space /space /space /space /space /space /space
+       /space /space /space /space /space /space /space /space
+       /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+           /quoteright
+       /parenleft /parenright /asterisk /plus /comma /minus /period /slash
+       /zero /one /two /three /four /five /six /seven
+       /eight /nine /colon /semicolon /less /equal /greater /question
+       /at /A /B /C /D /E /F /G
+       /H /I /J /K /L /M /N /O
+       /P /Q /R /S /T /U /V /W
+       /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+       /quoteleft /a /b /c /d /e /f /g
+       /h /i /j /k /l /m /n /o
+       /p /q /r /s /t /u /v /w
+       /x /y /z /braceleft /bar /braceright /asciitilde /space
+       /space /space /space /space /space /space /space /space
+       /space /space /space /space /space /space /space /space
+       /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+       /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron
+       /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+       /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
+           /registered /macron
+       /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph
+           /periodcentered
+       /cedillar /onesuperior /ordmasculine /guillemotright /onequarter
+           /onehalf /threequarters /questiondown
+       /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+       /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex
+           /Idieresis
+       /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+       /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn
+           /germandbls
+       /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+       /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex
+           /idieresis
+       /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+       /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn
+           /ydieresis
+    ] def
+} if
+
+% font ISOEncode font
+% This procedure changes the encoding of a font from the default
+% Postscript encoding to ISOLatin1.  It's typically invoked just
+% before invoking "setfont".  The body of this procedure comes from
+% Section 5.6.1 of the Postscript book.
+
+/ISOEncode {
+    dup length dict begin
+       {1 index /FID ne {def} {pop pop} ifelse} forall
+       /Encoding ISOLatin1Encoding def
+       currentdict
+    end
+
+    % I'm not sure why it's necessary to use "definefont" on this new
+    % font, but it seems to be important; just use the name "Temporary"
+    % for the font.
+
+    /Temporary exch definefont
+} bind def
+
+% StrokeClip
+%
+% This procedure converts the current path into a clip area under
+% the assumption of stroking.  It's a bit tricky because some Postscript
+% interpreters get errors during strokepath for dashed lines.  If
+% this happens then turn off dashes and try again.
+
+/StrokeClip {
+    {strokepath} stopped {
+       (This Postscript printer gets limitcheck overflows when) =
+       (stippling dashed lines;  lines will be printed solid instead.) =
+       [] 0 setdash strokepath} if
+    clip
+} bind def
+
+% desiredSize EvenPixels closestSize
+%
+% The procedure below is used for stippling.  Given the optimal size
+% of a dot in a stipple pattern in the current user coordinate system,
+% compute the closest size that is an exact multiple of the device's
+% pixel size.  This allows stipple patterns to be displayed without
+% aliasing effects.
+
+/EvenPixels {
+    % Compute exact number of device pixels per stipple dot.
+    dup 0 matrix currentmatrix dtransform
+    dup mul exch dup mul add sqrt
+
+    % Round to an integer, make sure the number is at least 1, and compute
+    % user coord distance corresponding to this.
+    dup round dup 1 lt {pop 1} if
+    exch div mul
+} bind def
+
+% width height string StippleFill --
+%
+% Given a path already set up and a clipping region generated from
+% it, this procedure will fill the clipping region with a stipple
+% pattern.  "String" contains a proper image description of the
+% stipple pattern and "width" and "height" give its dimensions.  Each
+% stipple dot is assumed to be about one unit across in the current
+% user coordinate system.  This procedure trashes the graphics state.
+
+/StippleFill {
+    % The following code is needed to work around a NeWSprint bug.
+
+    /tmpstip 1 index def
+
+    % Change the scaling so that one user unit in user coordinates
+    % corresponds to the size of one stipple dot.
+    1 EvenPixels dup scale
+
+    % Compute the bounding box occupied by the path (which is now
+    % the clipping region), and round the lower coordinates down
+    % to the nearest starting point for the stipple pattern.  Be
+    % careful about negative numbers, since the rounding works
+    % differently on them.
+
+    pathbbox
+    4 2 roll
+    5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
+    6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
+
+    % Stack now: width height string y1 y2 x1 x2
+    % Below is a doubly-nested for loop to iterate across this area
+    % in units of the stipple pattern size, going up columns then
+    % across rows, blasting out a stipple-pattern-sized rectangle at
+    % each position
+
+    6 index exch {
+       2 index 5 index 3 index {
+           % Stack now: width height string y1 y2 x y
+
+           gsave
+           1 index exch translate
+           5 index 5 index true matrix tmpstip imagemask
+           grestore
+       } for
+       pop
+    } for
+    pop pop pop pop pop
+} bind def
+
+% -- AdjustColor --
+% Given a color value already set for output by the caller, adjusts
+% that value to a grayscale or mono value if requested by the CL
+% variable.
+
+/AdjustColor {
+    CL 2 lt {
+       currentgray
+       CL 0 eq {
+           .5 lt {0} {1} ifelse
+       } if
+       setgray
+    } if
+} bind def
+
+% x y strings spacing xoffset yoffset justify stipple DrawText --
+% This procedure does all of the real work of drawing text.  The
+% color and font must already have been set by the caller, and the
+% following arguments must be on the stack:
+%
+% x, y -       Coordinates at which to draw text.
+% strings -    An array of strings, one for each line of the text item,
+%              in order from top to bottom.
+% spacing -    Spacing between lines.
+% xoffset -    Horizontal offset for text bbox relative to x and y: 0 for
+%              nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
+% yoffset -    Vertical offset for text bbox relative to x and y: 0 for
+%              nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
+% justify -    0 for left justification, 0.5 for center, 1 for right justify.
+% stipple -    Boolean value indicating whether or not text is to be
+%              drawn in stippled fashion.  If text is stippled,
+%              procedure StippleText must have been defined to call
+%              StippleFill in the right way.
+%
+% Also, when this procedure is invoked, the color and font must already
+% have been set for the text.
+
+/DrawText {
+    /stipple exch def
+    /justify exch def
+    /yoffset exch def
+    /xoffset exch def
+    /spacing exch def
+    /strings exch def
+
+    % First scan through all of the text to find the widest line.
+
+    /lineLength 0 def
+    strings {
+       stringwidth pop
+       dup lineLength gt {/lineLength exch def} {pop} ifelse
+       newpath
+    } forall
+
+    % Compute the baseline offset and the actual font height.
+
+    0 0 moveto (TXygqPZ) false charpath
+    pathbbox dup /baseline exch def
+    exch pop exch sub /height exch def pop
+    newpath
+
+    % Translate coordinates first so that the origin is at the upper-left
+    % corner of the text's bounding box. Remember that x and y for
+    % positioning are still on the stack.
+
+    translate
+    lineLength xoffset mul
+    strings length 1 sub spacing mul height add yoffset mul translate
+
+    % Now use the baseline and justification information to translate so
+    % that the origin is at the baseline and positioning point for the
+    % first line of text.
+
+    justify lineLength mul baseline neg translate
+
+    % Iterate over each of the lines to output it.  For each line,
+    % compute its width again so it can be properly justified, then
+    % display it.
+
+    strings {
+       dup stringwidth pop
+       justify neg mul 0 moveto
+       stipple {
+
+           % The text is stippled, so turn it into a path and print
+           % by calling StippledText, which in turn calls StippleFill.
+           % Unfortunately, many Postscript interpreters will get
+           % overflow errors if we try to do the whole string at
+           % once, so do it a character at a time.
+
+           gsave
+           /char (X) def
+           {
+               char 0 3 -1 roll put
+               currentpoint
+               gsave
+               char true charpath clip StippleText
+               grestore
+               char stringwidth translate
+               moveto
+           } forall
+           grestore
+       } {show} ifelse
+       0 spacing neg translate
+    } forall
+} bind def
+
+%%EndProlog
+
diff --git a/tk/generic/tk.decls b/tk/generic/tk.decls
new file mode 100644 (file)
index 0000000..51679e2
--- /dev/null
@@ -0,0 +1,1215 @@
+# tk.decls --
+#
+#      This file contains the declarations for all supported public
+#      functions that are exported by the Tk library via the stubs table.
+#      This file is used to generate the tkDecls.h, tkPlatDecls.h,
+#      tkStub.c, and tkPlatStub.c files.
+#      
+#
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# 
+# RCS: @(#) $Id$
+
+library tk
+
+# Define the tk interface with 3 sub interfaces:
+#     tkPlat    - platform specific public
+#     tkInt     - generic private
+#     tkPlatInt - platform specific private
+
+interface tk
+hooks {tkPlat tkInt tkIntPlat tkIntXlib}
+
+# Declare each of the functions in the public Tk interface.  Note that
+# the an index should never be reused for a different function in order
+# to preserve backwards compatibility.
+
+declare 0 generic {
+    void Tk_MainLoop (void)
+}
+
+declare 1 generic {
+    XColor *Tk_3DBorderColor (Tk_3DBorder border)
+}
+
+declare 2 generic {
+    GC Tk_3DBorderGC (Tk_Window tkwin, Tk_3DBorder border, \
+           int which)
+}
+
+declare 3 generic {
+    void Tk_3DHorizontalBevel (Tk_Window tkwin, \
+           Drawable drawable, Tk_3DBorder border, int x, \
+           int y, int width, int height, int leftIn, \
+           int rightIn, int topBevel, int relief)
+}
+
+declare 4 generic {
+    void Tk_3DVerticalBevel (Tk_Window tkwin, \
+           Drawable drawable, Tk_3DBorder border, int x, \
+           int y, int width, int height, int leftBevel, \
+           int relief)
+}
+
+declare 5 generic {
+    void Tk_AddOption (Tk_Window tkwin, char *name, \
+           char *value, int priority)
+}
+
+declare 6 generic {
+    void Tk_BindEvent (Tk_BindingTable bindingTable, \
+           XEvent *eventPtr, Tk_Window tkwin, int numObjects, \
+           ClientData *objectPtr)
+}
+
+declare 7 generic {
+    void Tk_CanvasDrawableCoords (Tk_Canvas canvas, \
+           double x, double y, short *drawableXPtr, \
+           short *drawableYPtr)
+}
+
+declare 8 generic {
+    void Tk_CanvasEventuallyRedraw (Tk_Canvas canvas, int x1, int y1, \
+           int x2, int y2)
+}
+
+declare 9 generic {
+    int Tk_CanvasGetCoord (Tcl_Interp *interp, \
+           Tk_Canvas canvas, char *str, double *doublePtr)
+}
+
+declare 10 generic {
+    Tk_CanvasTextInfo *Tk_CanvasGetTextInfo (Tk_Canvas canvas)
+}
+
+declare 11 generic {
+    int Tk_CanvasPsBitmap (Tcl_Interp *interp, \
+           Tk_Canvas canvas, Pixmap bitmap, int x, int y, \
+           int width, int height)
+}
+
+declare 12 generic {
+    int Tk_CanvasPsColor (Tcl_Interp *interp, \
+           Tk_Canvas canvas, XColor *colorPtr)
+}
+
+declare 13 generic {
+    int Tk_CanvasPsFont (Tcl_Interp *interp, \
+           Tk_Canvas canvas, Tk_Font font)
+}
+
+declare 14 generic {
+    void Tk_CanvasPsPath (Tcl_Interp *interp, \
+           Tk_Canvas canvas, double *coordPtr, int numPoints)
+}
+
+declare 15 generic {
+    int Tk_CanvasPsStipple (Tcl_Interp *interp, \
+           Tk_Canvas canvas, Pixmap bitmap)
+}
+
+declare 16 generic {
+    double Tk_CanvasPsY (Tk_Canvas canvas, double y)
+}
+
+declare 17 generic {
+    void Tk_CanvasSetStippleOrigin (Tk_Canvas canvas, GC gc)
+}
+
+declare 18 generic {
+    int Tk_CanvasTagsParseProc (ClientData clientData, Tcl_Interp *interp, \
+           Tk_Window tkwin, char *value, char *widgRec, int offset)
+}
+
+declare 19 generic {
+    char * Tk_CanvasTagsPrintProc (ClientData clientData, Tk_Window tkwin, \
+           char *widgRec, int offset, Tcl_FreeProc **freeProcPtr)
+}
+
+declare 20 generic {
+    Tk_Window  Tk_CanvasTkwin (Tk_Canvas canvas)
+}
+
+declare 21 generic {
+    void Tk_CanvasWindowCoords (Tk_Canvas canvas, double x, double y, \
+           short *screenXPtr, short *screenYPtr)
+}
+
+declare 22 generic {
+    void Tk_ChangeWindowAttributes (Tk_Window tkwin, unsigned long valueMask, \
+           XSetWindowAttributes *attsPtr)
+}
+
+declare 23 generic {
+    int Tk_CharBbox (Tk_TextLayout layout, int index, int *xPtr, \
+           int *yPtr, int *widthPtr, int *heightPtr)
+}
+
+declare 24 generic {
+    void Tk_ClearSelection (Tk_Window tkwin, Atom selection)
+}
+
+declare 25 generic {
+    int Tk_ClipboardAppend (Tcl_Interp *interp,Tk_Window tkwin, \
+           Atom target, Atom format, char* buffer)
+}
+
+declare 26 generic {
+    int Tk_ClipboardClear (Tcl_Interp *interp, Tk_Window tkwin)
+}
+
+declare 27 generic {
+    int Tk_ConfigureInfo (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tk_ConfigSpec *specs, \
+           char *widgRec, char *argvName, int flags)
+}
+
+declare 28 generic {
+    int Tk_ConfigureValue (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tk_ConfigSpec *specs, \
+           char *widgRec, char *argvName, int flags)
+}
+
+declare 29 generic {
+    int Tk_ConfigureWidget (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tk_ConfigSpec *specs, \
+           int argc, char **argv, char *widgRec, \
+           int flags)
+}
+
+declare 30 generic {
+    void Tk_ConfigureWindow (Tk_Window tkwin, \
+           unsigned int valueMask, XWindowChanges *valuePtr)
+}
+
+declare 31 generic {
+    Tk_TextLayout Tk_ComputeTextLayout (Tk_Font font, \
+           CONST char *str, int numChars, int wrapLength, \
+           Tk_Justify justify, int flags, int *widthPtr, \
+           int *heightPtr)
+}
+
+declare 32 generic {
+    Tk_Window Tk_CoordsToWindow (int rootX, int rootY, Tk_Window tkwin)
+}
+
+declare 33 generic {
+    unsigned long Tk_CreateBinding (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable, ClientData object, \
+           char *eventStr, char *command, int append)
+}
+
+declare 34 generic {
+    Tk_BindingTable Tk_CreateBindingTable (Tcl_Interp *interp)
+}
+
+declare 35 generic {
+    Tk_ErrorHandler Tk_CreateErrorHandler (Display *display, \
+           int errNum, int request, int minorCode, \
+           Tk_ErrorProc *errorProc, ClientData clientData)
+}
+
+declare 36 generic {
+    void Tk_CreateEventHandler (Tk_Window token, \
+           unsigned long mask, Tk_EventProc *proc, \
+           ClientData clientData)
+}
+
+declare 37 generic {
+    void Tk_CreateGenericHandler (Tk_GenericProc *proc, ClientData clientData)
+}
+
+declare 38 generic {
+    void Tk_CreateImageType (Tk_ImageType *typePtr)
+}
+
+declare 39 generic {
+    void Tk_CreateItemType (Tk_ItemType *typePtr)
+}
+
+declare 40 generic {
+    void Tk_CreatePhotoImageFormat (Tk_PhotoImageFormat *formatPtr)
+}
+
+declare 41 generic {
+    void Tk_CreateSelHandler (Tk_Window tkwin, \
+           Atom selection, Atom target, \
+           Tk_SelectionProc *proc, ClientData clientData, \
+           Atom format)
+}
+
+declare 42 generic {
+    Tk_Window Tk_CreateWindow (Tcl_Interp *interp, \
+           Tk_Window parent, char *name, char *screenName)
+}
+
+declare 43 generic {
+    Tk_Window Tk_CreateWindowFromPath (Tcl_Interp *interp, Tk_Window tkwin, \
+           char *pathName, char *screenName)
+}
+
+declare 44 generic {
+    int Tk_DefineBitmap (Tcl_Interp *interp, CONST char *name, char *source, \
+           int width, int height)
+}
+
+declare 45 generic {
+    void Tk_DefineCursor (Tk_Window window, Tk_Cursor cursor)
+}
+
+declare 46 generic {
+    void Tk_DeleteAllBindings (Tk_BindingTable bindingTable, ClientData object)
+}
+
+declare 47 generic {
+    int Tk_DeleteBinding (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable, ClientData object, \
+           char *eventStr)
+}
+
+declare 48 generic {
+    void Tk_DeleteBindingTable (Tk_BindingTable bindingTable)
+}
+
+declare 49 generic {
+    void Tk_DeleteErrorHandler (Tk_ErrorHandler handler)
+}
+
+declare 50 generic {
+    void Tk_DeleteEventHandler (Tk_Window token, \
+           unsigned long mask, Tk_EventProc *proc, \
+           ClientData clientData)
+}
+
+declare 51 generic {
+    void Tk_DeleteGenericHandler (Tk_GenericProc *proc, ClientData clientData)
+}
+
+declare 52 generic {
+    void Tk_DeleteImage (Tcl_Interp *interp, char *name)
+}
+
+declare 53 generic {
+    void Tk_DeleteSelHandler (Tk_Window tkwin, Atom selection, Atom target)
+}
+
+declare 54 generic {
+    void Tk_DestroyWindow (Tk_Window tkwin)
+}
+
+declare 55 generic {
+    char * Tk_DisplayName (Tk_Window tkwin)
+}
+
+declare 56 generic {
+    int Tk_DistanceToTextLayout (Tk_TextLayout layout, int x, int y)
+}
+
+declare 57 generic {
+    void Tk_Draw3DPolygon (Tk_Window tkwin, \
+           Drawable drawable, Tk_3DBorder border, \
+           XPoint *pointPtr, int numPoints, int borderWidth, \
+           int leftRelief)
+}
+
+declare 58 generic {
+    void Tk_Draw3DRectangle (Tk_Window tkwin, Drawable drawable, \
+           Tk_3DBorder border, int x, int y, int width, int height, \
+           int borderWidth, int relief)
+}
+
+declare 59 generic {
+    void Tk_DrawChars (Display *display, Drawable drawable, GC gc, \
+           Tk_Font tkfont, CONST char *source, int numBytes, int x, int y)
+}
+
+declare 60 generic {
+    void Tk_DrawFocusHighlight (Tk_Window tkwin, GC gc, int width, \
+           Drawable drawable)
+}
+
+declare 61 generic {
+    void Tk_DrawTextLayout (Display *display, \
+           Drawable drawable, GC gc, Tk_TextLayout layout, \
+           int x, int y, int firstChar, int lastChar)
+}
+
+declare 62 generic {
+    void Tk_Fill3DPolygon (Tk_Window tkwin, \
+           Drawable drawable, Tk_3DBorder border, \
+           XPoint *pointPtr, int numPoints, int borderWidth, \
+           int leftRelief)
+}
+
+declare 63 generic {
+    void Tk_Fill3DRectangle (Tk_Window tkwin, \
+           Drawable drawable, Tk_3DBorder border, int x, \
+           int y, int width, int height, int borderWidth, \
+           int relief)
+}
+
+declare 64 generic {
+    Tk_PhotoHandle Tk_FindPhoto (Tcl_Interp *interp, char *imageName)
+}
+
+declare 65 generic {
+    Font Tk_FontId (Tk_Font font)
+}
+
+declare 66 generic {
+    void Tk_Free3DBorder (Tk_3DBorder border)
+}
+
+declare 67 generic {
+    void Tk_FreeBitmap (Display *display, Pixmap bitmap)
+}
+
+declare 68 generic {
+    void Tk_FreeColor (XColor *colorPtr)
+}
+
+declare 69 generic {
+    void Tk_FreeColormap (Display *display, Colormap colormap)
+}
+
+declare 70 generic {
+    void Tk_FreeCursor (Display *display, Tk_Cursor cursor)
+}
+
+declare 71 generic {
+    void Tk_FreeFont (Tk_Font f)
+}
+
+declare 72 generic {
+    void Tk_FreeGC (Display *display, GC gc)
+}
+
+declare 73 generic {
+    void Tk_FreeImage (Tk_Image image)
+}
+
+declare 74 generic {
+    void Tk_FreeOptions (Tk_ConfigSpec *specs, \
+           char *widgRec, Display *display, int needFlags)
+}
+
+declare 75 generic {
+    void Tk_FreePixmap (Display *display, Pixmap pixmap)
+}
+
+declare 76 generic {
+    void Tk_FreeTextLayout (Tk_TextLayout textLayout)
+}
+
+declare 77 generic {
+    void Tk_FreeXId (Display *display, XID xid)
+}
+
+declare 78 generic {
+    GC Tk_GCForColor (XColor *colorPtr, Drawable drawable)
+}
+
+declare 79 generic {
+    void Tk_GeometryRequest (Tk_Window tkwin, int reqWidth,  int reqHeight)
+}
+
+declare 80 generic {
+    Tk_3DBorder        Tk_Get3DBorder (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tk_Uid colorName)
+}
+
+declare 81 generic {
+    void Tk_GetAllBindings (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable, ClientData object)
+}
+
+declare 82 generic {
+    int Tk_GetAnchor (Tcl_Interp *interp, \
+           char *str, Tk_Anchor *anchorPtr)
+}
+
+declare 83 generic {
+    char * Tk_GetAtomName (Tk_Window tkwin, Atom atom)
+}
+
+declare 84 generic {
+    char * Tk_GetBinding (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable, ClientData object, \
+           char *eventStr)
+}
+
+declare 85 generic {
+    Pixmap Tk_GetBitmap (Tcl_Interp *interp, Tk_Window tkwin, CONST char * str)
+}
+
+declare 86 generic {
+    Pixmap Tk_GetBitmapFromData (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *source, int width, int height)
+}
+
+declare 87 generic {
+    int Tk_GetCapStyle (Tcl_Interp *interp, char *str, int *capPtr)
+}
+
+declare 88 generic {
+    XColor * Tk_GetColor (Tcl_Interp *interp, Tk_Window tkwin, Tk_Uid name)
+}
+
+declare 89 generic {
+    XColor * Tk_GetColorByValue (Tk_Window tkwin, XColor *colorPtr)
+}
+
+declare 90 generic {
+    Colormap Tk_GetColormap (Tcl_Interp *interp, Tk_Window tkwin, char *str)
+}
+
+declare 91 generic {
+    Tk_Cursor Tk_GetCursor (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tk_Uid str)
+}
+
+declare 92 generic {
+    Tk_Cursor Tk_GetCursorFromData (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *source, char *mask, \
+           int width, int height, int xHot, int yHot, \
+           Tk_Uid fg, Tk_Uid bg)
+}
+
+declare 93 generic {
+    Tk_Font Tk_GetFont (Tcl_Interp *interp, \
+           Tk_Window tkwin, CONST char *str)
+}
+
+declare 94 generic {
+    Tk_Font Tk_GetFontFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 95 generic {
+    void Tk_GetFontMetrics (Tk_Font font, Tk_FontMetrics *fmPtr)
+}
+
+declare 96 generic {
+    GC Tk_GetGC (Tk_Window tkwin, unsigned long valueMask, XGCValues *valuePtr)
+}
+
+declare 97 generic {
+    Tk_Image Tk_GetImage (Tcl_Interp *interp, Tk_Window tkwin, char *name, \
+           Tk_ImageChangedProc *changeProc, ClientData clientData)
+}
+
+declare 98 generic {
+    ClientData Tk_GetImageMasterData (Tcl_Interp *interp, \
+           char *name, Tk_ImageType **typePtrPtr)
+}
+
+declare 99 generic {
+    Tk_ItemType * Tk_GetItemTypes (void)
+}
+
+declare 100 generic {
+    int Tk_GetJoinStyle (Tcl_Interp *interp, char *str, int *joinPtr)
+}
+
+declare 101 generic {
+    int Tk_GetJustify (Tcl_Interp *interp, \
+           char *str, Tk_Justify *justifyPtr)
+}
+
+declare 102 generic {
+    int Tk_GetNumMainWindows (void)
+}
+
+declare 103 generic {
+    Tk_Uid Tk_GetOption (Tk_Window tkwin, char *name, char *className)
+}
+
+declare 104 generic {
+    int Tk_GetPixels (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *str, int *intPtr)
+}
+
+declare 105 generic {
+    Pixmap Tk_GetPixmap (Display *display, Drawable d, \
+           int width, int height, int depth)
+}
+
+declare 106 generic {
+    int Tk_GetRelief (Tcl_Interp *interp, char *name, int *reliefPtr)
+}
+
+declare 107 generic {
+    void Tk_GetRootCoords (Tk_Window tkwin, int *xPtr, int *yPtr)
+}
+
+declare 108 generic {
+    int Tk_GetScrollInfo (Tcl_Interp *interp, \
+           int argc, char **argv, double *dblPtr, int *intPtr)
+}
+
+declare 109 generic {
+    int Tk_GetScreenMM (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *str, double *doublePtr)
+}
+
+declare 110 generic {
+    int Tk_GetSelection (Tcl_Interp *interp, \
+           Tk_Window tkwin, Atom selection, Atom target, \
+           Tk_GetSelProc *proc, ClientData clientData)
+}
+
+declare 111 generic {
+    Tk_Uid Tk_GetUid (CONST char *str)
+}
+
+declare 112 generic {
+    Visual * Tk_GetVisual (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *str, int *depthPtr, \
+           Colormap *colormapPtr)
+}
+
+declare 113 generic {
+    void Tk_GetVRootGeometry (Tk_Window tkwin, \
+           int *xPtr, int *yPtr, int *widthPtr, int *heightPtr)
+}
+
+declare 114 generic {
+    int Tk_Grab (Tcl_Interp *interp, Tk_Window tkwin, int grabGlobal)
+}
+
+declare 115 generic {
+    void Tk_HandleEvent (XEvent *eventPtr)
+}
+
+declare 116 generic {
+    Tk_Window Tk_IdToWindow (Display *display, Window window)
+}
+
+declare 117 generic {
+    void Tk_ImageChanged (Tk_ImageMaster master, int x, int y, \
+           int width, int height, int imageWidth, int imageHeight)
+}
+
+declare 118 generic {
+    int Tk_Init (Tcl_Interp *interp)
+}
+
+declare 119 generic {
+    Atom Tk_InternAtom (Tk_Window tkwin, char *name)
+}
+
+declare 120 generic {
+    int Tk_IntersectTextLayout (Tk_TextLayout layout, int x, int y, \
+           int width, int height)
+}
+
+declare 121 generic {
+    void Tk_MaintainGeometry (Tk_Window slave, \
+           Tk_Window master, int x, int y, int width, int height)
+}
+
+declare 122 generic {
+    Tk_Window Tk_MainWindow (Tcl_Interp *interp)
+}
+
+declare 123 generic {
+    void Tk_MakeWindowExist (Tk_Window tkwin)
+}
+
+declare 124 generic {
+    void Tk_ManageGeometry (Tk_Window tkwin, \
+           Tk_GeomMgr *mgrPtr, ClientData clientData)
+}
+
+declare 125 generic {
+    void Tk_MapWindow (Tk_Window tkwin)
+}
+
+declare 126 generic {
+    int Tk_MeasureChars (Tk_Font tkfont, \
+           CONST char *source, int numBytes, int maxPixels, \
+           int flags, int *lengthPtr)
+}
+
+declare 127 generic {
+    void Tk_MoveResizeWindow (Tk_Window tkwin, \
+           int x, int y, int width, int height)
+}
+
+declare 128 generic {
+    void Tk_MoveWindow (Tk_Window tkwin, int x, int y)
+}
+
+declare 129 generic {
+    void Tk_MoveToplevelWindow (Tk_Window tkwin, int x, int y)
+}
+
+declare 130 generic {
+    char * Tk_NameOf3DBorder (Tk_3DBorder border)
+}
+
+declare 131 generic {
+    char * Tk_NameOfAnchor (Tk_Anchor anchor)
+}
+
+declare 132 generic {
+    char * Tk_NameOfBitmap (Display *display, Pixmap bitmap)
+}
+
+declare 133 generic {
+    char * Tk_NameOfCapStyle (int cap)
+}
+
+declare 134 generic {
+    char * Tk_NameOfColor (XColor *colorPtr)
+}
+
+declare 135 generic {
+    char * Tk_NameOfCursor (Display *display, Tk_Cursor cursor)
+}
+
+declare 136 generic {
+    char * Tk_NameOfFont (Tk_Font font)
+}
+
+declare 137 generic {
+    char * Tk_NameOfImage (Tk_ImageMaster imageMaster)
+}
+
+declare 138 generic {
+    char * Tk_NameOfJoinStyle (int join)
+}
+
+declare 139 generic {
+    char * Tk_NameOfJustify (Tk_Justify justify)
+}
+
+declare 140 generic {
+    char * Tk_NameOfRelief (int relief)
+}
+
+declare 141 generic {
+    Tk_Window Tk_NameToWindow (Tcl_Interp *interp, \
+           char *pathName, Tk_Window tkwin)
+}
+
+declare 142 generic {
+    void Tk_OwnSelection (Tk_Window tkwin, \
+           Atom selection, Tk_LostSelProc *proc, \
+           ClientData clientData)
+}
+
+declare 143 generic {
+    int Tk_ParseArgv (Tcl_Interp *interp, \
+           Tk_Window tkwin, int *argcPtr, char **argv, \
+           Tk_ArgvInfo *argTable, int flags)
+}
+
+declare 144 generic {
+    void Tk_PhotoPutBlock (Tk_PhotoHandle handle, \
+           Tk_PhotoImageBlock *blockPtr, int x, int y, \
+           int width, int height)
+}
+
+declare 145 generic {
+    void Tk_PhotoPutZoomedBlock (Tk_PhotoHandle handle, \
+           Tk_PhotoImageBlock *blockPtr, int x, int y, \
+           int width, int height, int zoomX, int zoomY, \
+           int subsampleX, int subsampleY)
+}
+
+declare 146 generic {
+    int Tk_PhotoGetImage (Tk_PhotoHandle handle, Tk_PhotoImageBlock *blockPtr)
+}
+
+declare 147 generic {
+    void Tk_PhotoBlank (Tk_PhotoHandle handle)
+}
+
+declare 148 generic {
+    void Tk_PhotoExpand (Tk_PhotoHandle handle, int width, int height )
+}
+
+declare 149 generic {
+    void Tk_PhotoGetSize (Tk_PhotoHandle handle, int *widthPtr, int *heightPtr)
+}
+
+declare 150 generic {
+    void Tk_PhotoSetSize (Tk_PhotoHandle handle, int width, int height)
+}
+
+declare 151 generic {
+    int Tk_PointToChar (Tk_TextLayout layout, int x, int y)
+}
+
+declare 152 generic {
+    int Tk_PostscriptFontName (Tk_Font tkfont, Tcl_DString *dsPtr)
+}
+
+declare 153 generic {
+    void Tk_PreserveColormap (Display *display, Colormap colormap)
+}
+
+declare 154 generic {
+    void Tk_QueueWindowEvent (XEvent *eventPtr, Tcl_QueuePosition position)
+}
+
+declare 155 generic {
+    void Tk_RedrawImage (Tk_Image image, int imageX, \
+           int imageY, int width, int height, \
+           Drawable drawable, int drawableX, int drawableY)
+}
+
+declare 156 generic {
+    void Tk_ResizeWindow (Tk_Window tkwin, int width, int height)
+}
+
+declare 157 generic {
+    int Tk_RestackWindow (Tk_Window tkwin, int aboveBelow, Tk_Window other)
+}
+
+declare 158 generic {
+    Tk_RestrictProc *Tk_RestrictEvents (Tk_RestrictProc *proc, \
+           ClientData arg, ClientData *prevArgPtr)
+}
+
+declare 159 generic {
+    int Tk_SafeInit (Tcl_Interp *interp)
+}
+
+declare 160 generic {
+    char * Tk_SetAppName (Tk_Window tkwin, char *name)
+}
+
+declare 161 generic {
+    void Tk_SetBackgroundFromBorder (Tk_Window tkwin, Tk_3DBorder border)
+}
+
+declare 162 generic {
+    void Tk_SetClass (Tk_Window tkwin, char *className)
+}
+
+declare 163 generic {
+    void Tk_SetGrid (Tk_Window tkwin, int reqWidth, int reqHeight, \
+           int gridWidth, int gridHeight)
+}
+
+declare 164 generic {
+    void Tk_SetInternalBorder (Tk_Window tkwin, int width)
+}
+
+declare 165 generic {
+    void Tk_SetWindowBackground (Tk_Window tkwin, unsigned long pixel)
+}
+
+declare 166 generic {
+    void Tk_SetWindowBackgroundPixmap (Tk_Window tkwin, Pixmap pixmap)
+}
+
+declare 167 generic {
+    void Tk_SetWindowBorder (Tk_Window tkwin, unsigned long pixel)
+}
+
+declare 168 generic {
+    void Tk_SetWindowBorderWidth (Tk_Window tkwin, int width)
+}
+
+declare 169 generic {
+    void Tk_SetWindowBorderPixmap (Tk_Window tkwin, Pixmap pixmap)
+}
+
+declare 170 generic {
+    void Tk_SetWindowColormap (Tk_Window tkwin, Colormap colormap)
+}
+
+declare 171 generic {
+    int Tk_SetWindowVisual (Tk_Window tkwin, Visual *visual, int depth,\
+           Colormap colormap)
+}
+
+declare 172 generic {
+    void Tk_SizeOfBitmap (Display *display, Pixmap bitmap, int *widthPtr, \
+           int *heightPtr)
+}
+
+declare 173 generic {
+    void Tk_SizeOfImage (Tk_Image image, int *widthPtr, int *heightPtr)
+}
+
+declare 174 generic {
+    int Tk_StrictMotif (Tk_Window tkwin)
+}
+
+declare 175 generic {
+    void Tk_TextLayoutToPostscript (Tcl_Interp *interp, Tk_TextLayout layout)
+}
+
+declare 176 generic {
+    int Tk_TextWidth (Tk_Font font, CONST char *str, int numBytes)
+}
+
+declare 177 generic {
+    void Tk_UndefineCursor (Tk_Window window)
+}
+
+declare 178 generic {
+    void Tk_UnderlineChars (Display *display, \
+           Drawable drawable, GC gc, Tk_Font tkfont, \
+           CONST char *source, int x, int y, int firstByte, \
+           int lastByte)
+}
+
+declare 179 generic {
+    void Tk_UnderlineTextLayout (Display *display, Drawable drawable, GC gc, \
+           Tk_TextLayout layout, int x, int y, \
+           int underline)
+}
+
+declare 180 generic {
+    void Tk_Ungrab (Tk_Window tkwin)
+}
+
+declare 181 generic {
+    void Tk_UnmaintainGeometry (Tk_Window slave, Tk_Window master)
+}
+
+declare 182 generic {
+    void Tk_UnmapWindow (Tk_Window tkwin)
+}
+
+declare 183 generic {
+    void Tk_UnsetGrid (Tk_Window tkwin)
+}
+
+declare 184 generic {
+    void Tk_UpdatePointer (Tk_Window tkwin, int x, int y, int state)
+}
+
+# new functions for 8.1
+
+declare 185 generic {
+    Pixmap  Tk_AllocBitmapFromObj (Tcl_Interp *interp, Tk_Window tkwin, \
+    Tcl_Obj *objPtr)
+}
+
+declare 186 generic {
+    Tk_3DBorder Tk_Alloc3DBorderFromObj (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tcl_Obj *objPtr)
+}
+
+declare 187 generic {
+    XColor *  Tk_AllocColorFromObj (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tcl_Obj *objPtr)
+}
+
+declare 188 generic {
+    Tk_Cursor Tk_AllocCursorFromObj (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tcl_Obj *objPtr)
+}
+
+declare 189 generic {
+    Tk_Font  Tk_AllocFontFromObj (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tcl_Obj *objPtr)
+
+}
+
+declare 190 generic {
+    Tk_OptionTable Tk_CreateOptionTable (Tcl_Interp *interp, \
+           CONST Tk_OptionSpec *templatePtr)
+}
+
+declare 191 generic {
+    void  Tk_DeleteOptionTable (Tk_OptionTable optionTable)
+}
+
+declare 192 generic {
+    void  Tk_Free3DBorderFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 193 generic {
+    void  Tk_FreeBitmapFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 194 generic {
+    void  Tk_FreeColorFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 195 generic {
+    void  Tk_FreeConfigOptions (char *recordPtr, Tk_OptionTable optionToken, \
+           Tk_Window tkwin)
+
+}
+
+declare 196 generic {
+    void  Tk_FreeSavedOptions (Tk_SavedOptions *savePtr)
+}
+
+declare 197 generic {
+    void  Tk_FreeCursorFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 198 generic {
+    void  Tk_FreeFontFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 199 generic {
+    Tk_3DBorder Tk_Get3DBorderFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 200 generic {
+    int  Tk_GetAnchorFromObj (Tcl_Interp *interp, Tcl_Obj *objPtr, \
+           Tk_Anchor *anchorPtr)
+}
+
+declare 201 generic {
+    Pixmap  Tk_GetBitmapFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 202 generic {
+    XColor *  Tk_GetColorFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 203 generic {
+    Tk_Cursor Tk_GetCursorFromObj (Tk_Window tkwin, Tcl_Obj *objPtr)
+}
+
+declare 204 generic {
+    Tcl_Obj * Tk_GetOptionInfo (Tcl_Interp *interp, \
+           char *recordPtr, Tk_OptionTable optionTable, \
+           Tcl_Obj *namePtr, Tk_Window tkwin)
+}
+
+declare 205 generic {
+    Tcl_Obj * Tk_GetOptionValue (Tcl_Interp *interp, char *recordPtr, \
+           Tk_OptionTable optionTable, Tcl_Obj *namePtr, Tk_Window tkwin)
+}
+
+declare 206 generic {
+    int  Tk_GetJustifyFromObj (Tcl_Interp *interp, \
+           Tcl_Obj *objPtr, Tk_Justify *justifyPtr)
+}
+
+declare 207 generic {
+    int  Tk_GetMMFromObj (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tcl_Obj *objPtr, double *doublePtr)
+}
+
+declare 208 generic {
+    int  Tk_GetPixelsFromObj (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tcl_Obj *objPtr, int *intPtr)
+}
+
+declare 209 generic {
+    int  Tk_GetReliefFromObj (Tcl_Interp *interp, \
+           Tcl_Obj *objPtr, int *resultPtr)
+}
+
+declare 210 generic {
+    int  Tk_GetScrollInfoObj (Tcl_Interp *interp, \
+           int objc, Tcl_Obj *CONST objv[], double *dblPtr, int *intPtr)
+}
+
+declare 211 generic {
+    int  Tk_InitOptions (
+       Tcl_Interp *interp, char *recordPtr, \
+              Tk_OptionTable optionToken, Tk_Window tkwin)
+}
+
+declare 212 generic {
+    void  Tk_MainEx (int argc, char **argv, Tcl_AppInitProc *appInitProc, \
+           Tcl_Interp *interp)
+}
+
+declare 213 generic {
+    void  Tk_RestoreSavedOptions (Tk_SavedOptions *savePtr)
+}
+
+declare 214 generic {
+    int  Tk_SetOptions (Tcl_Interp *interp, char *recordPtr, \
+           Tk_OptionTable optionTable, int objc, \
+           Tcl_Obj *CONST objv[], Tk_Window tkwin, \
+           Tk_SavedOptions *savePtr, int *maskPtr)
+}
+
+declare 215 generic {
+    void Tk_InitConsoleChannels (Tcl_Interp *interp)
+}
+
+declare 216 generic {
+    int Tk_CreateConsoleWindow (Tcl_Interp *interp)
+}
+
+declare 217 generic {
+    void Tk_CreateSmoothMethod (Tcl_Interp *interp, Tk_SmoothMethod *method)
+}
+
+#declare 218 generic {
+#    void Tk_CreateCanvasVisitor (Tcl_Interp *interp, VOID *typePtr)
+#}
+
+#declare 219 generic {
+#    VOID *Tk_GetCanvasVisitor (Tcl_Interp *interp, CONST char *name)
+#}
+
+declare 220 generic {
+    int Tk_GetDash (Tcl_Interp *interp, CONST char *value, Tk_Dash *dash)
+}
+declare 221 generic {
+    void Tk_CreateOutline (Tk_Outline *outline)
+}
+declare 222 generic {
+    void Tk_DeleteOutline (Display *display, Tk_Outline *outline)
+}
+declare 223 generic {
+    int Tk_ConfigOutlineGC (XGCValues *gcValues, Tk_Canvas canvas, \
+           Tk_Item *item, Tk_Outline *outline)
+}
+declare 224 generic {
+    int Tk_ChangeOutlineGC (Tk_Canvas canvas, Tk_Item *item, \
+           Tk_Outline *outline)
+}
+declare 225 generic {
+    int Tk_ResetOutlineGC (Tk_Canvas canvas, Tk_Item *item, \
+           Tk_Outline *outline)
+}
+declare 226 generic {
+    int Tk_CanvasPsOutline (Tk_Canvas canvas, Tk_Item *item, \
+           Tk_Outline *outline)
+}
+declare 227 generic {
+    void Tk_SetTSOrigin (Tk_Window tkwin, GC gc, int x, int y)
+}
+declare 228 generic {
+    int Tk_CanvasGetCoordFromObj (Tcl_Interp *interp, Tk_Canvas canvas, \
+           Tcl_Obj *obj, double *doublePtr)
+}
+declare 229 generic {
+    void Tk_CanvasSetOffset (Tk_Canvas canvas, GC gc, Tk_TSOffset *offset)
+}
+declare 230 generic {
+    void Tk_DitherPhoto (Tk_PhotoHandle handle, int x, int y, int width, \
+           int height)
+}
+declare 231 generic {
+    int Tk_PostscriptBitmap (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tk_PostscriptInfo psInfo, Pixmap bitmap, int startX, \
+           int startY, int width, int height)
+}
+declare 232 generic {
+    int Tk_PostscriptColor (Tcl_Interp *interp, Tk_PostscriptInfo psInfo, \
+           XColor *colorPtr)
+}
+declare 233 generic {
+    int Tk_PostscriptFont (Tcl_Interp *interp, Tk_PostscriptInfo psInfo, \
+           Tk_Font font)
+}
+declare 234 generic {
+    int Tk_PostscriptImage (Tk_Image image, Tcl_Interp *interp, \
+           Tk_Window tkwin, Tk_PostscriptInfo psinfo, int x, int y, \
+           int width, int height, int prepass)
+}
+declare 235 generic {
+    void Tk_PostscriptPath (Tcl_Interp *interp, Tk_PostscriptInfo psInfo, \
+           double *coordPtr, int numPoints)
+}
+declare 236 generic {
+    int Tk_PostscriptStipple (Tcl_Interp *interp, Tk_Window tkwin, \
+           Tk_PostscriptInfo psInfo, Pixmap bitmap)
+}
+declare 237 generic {
+    double Tk_PostscriptY (double y, Tk_PostscriptInfo psInfo)
+}
+declare 238 generic {
+    int        Tk_PostscriptPhoto (Tcl_Interp *interp, \
+           Tk_PhotoImageBlock *blockPtr, Tk_PostscriptInfo psInfo, \
+           int width, int height)
+}
+
+# Define the platform specific public Tk interface.  These functions are
+# only available on the designated platform.
+
+interface tkPlat
+
+# Unix specific functions
+#   (none)
+
+# Windows specific functions
+
+declare 0 win {
+    Window Tk_AttachHWND (Tk_Window tkwin, HWND hwnd)
+}
+
+declare 1 win {
+    HINSTANCE Tk_GetHINSTANCE (void)
+}
+
+declare 2 win {
+    HWND Tk_GetHWND (Window window)
+}
+
+declare 3 win {
+    Tk_Window Tk_HWNDToWindow (HWND hwnd)
+}
+
+declare 4 win {
+    void Tk_PointerEvent (HWND hwnd, int x, int y)
+}
+
+declare 5 win {
+    int Tk_TranslateWinEvent (HWND hwnd, \
+           UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result)
+}
+
+# Mac specific functions
+
+declare 0 mac {
+    void Tk_MacSetEmbedHandler ( \
+           Tk_MacEmbedRegisterWinProc *registerWinProcPtr, \
+           Tk_MacEmbedGetGrafPortProc *getPortProcPtr, \
+           Tk_MacEmbedMakeContainerExistProc *containerExistProcPtr, \
+           Tk_MacEmbedGetClipProc *getClipProc, \
+           Tk_MacEmbedGetOffsetInParentProc *getOffsetProc)
+}
+declare 1 mac {
+    void Tk_MacTurnOffMenus (void)
+}
+
+declare 2 mac {
+    void Tk_MacTkOwnsCursor (int tkOwnsIt)
+}
+
+declare 3 mac {
+    void TkMacInitMenus (Tcl_Interp *interp)
+}
+
+declare 4 mac {
+    void TkMacInitAppleEvents (Tcl_Interp *interp)
+}
+
+declare 5 mac {
+    int TkMacConvertEvent (EventRecord *eventPtr)
+}
+
+declare 6 mac {
+    int TkMacConvertTkEvent (EventRecord *eventPtr, Window window)
+}
+
+declare 7 mac {
+    void TkGenWMConfigureEvent (Tk_Window tkwin, \
+           int x, int y, int width, int height, int flags)
+}
+
+declare 8 mac {
+    void TkMacInvalClipRgns (TkWindow *winPtr)
+}
+
+declare 9 mac {
+    int TkMacHaveAppearance (void)
+}
+
+declare 10 mac {
+    GWorldPtr TkMacGetDrawablePort (Drawable drawable)
+}
+
diff --git a/tk/generic/tkDecls.h b/tk/generic/tkDecls.h
new file mode 100644 (file)
index 0000000..c60345a
--- /dev/null
@@ -0,0 +1,2050 @@
+/*
+ * tkDecls.h --
+ *
+ *     Declarations of functions in the platform independent public Tcl API.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#ifndef _TKDECLS
+#define _TKDECLS
+
+#ifdef BUILD_tk
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tk.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+/*
+ * Exported function declarations:
+ */
+
+/* 0 */
+EXTERN void            Tk_MainLoop _ANSI_ARGS_((void));
+/* 1 */
+EXTERN XColor *                Tk_3DBorderColor _ANSI_ARGS_((Tk_3DBorder border));
+/* 2 */
+EXTERN GC              Tk_3DBorderGC _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tk_3DBorder border, int which));
+/* 3 */
+EXTERN void            Tk_3DHorizontalBevel _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, int x, 
+                               int y, int width, int height, int leftIn, 
+                               int rightIn, int topBevel, int relief));
+/* 4 */
+EXTERN void            Tk_3DVerticalBevel _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, int x, 
+                               int y, int width, int height, int leftBevel, 
+                               int relief));
+/* 5 */
+EXTERN void            Tk_AddOption _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name, char * value, int priority));
+/* 6 */
+EXTERN void            Tk_BindEvent _ANSI_ARGS_((
+                               Tk_BindingTable bindingTable, 
+                               XEvent * eventPtr, Tk_Window tkwin, 
+                               int numObjects, ClientData * objectPtr));
+/* 7 */
+EXTERN void            Tk_CanvasDrawableCoords _ANSI_ARGS_((
+                               Tk_Canvas canvas, double x, double y, 
+                               short * drawableXPtr, short * drawableYPtr));
+/* 8 */
+EXTERN void            Tk_CanvasEventuallyRedraw _ANSI_ARGS_((
+                               Tk_Canvas canvas, int x1, int y1, int x2, 
+                               int y2));
+/* 9 */
+EXTERN int             Tk_CanvasGetCoord _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, char * str, 
+                               double * doublePtr));
+/* 10 */
+EXTERN Tk_CanvasTextInfo * Tk_CanvasGetTextInfo _ANSI_ARGS_((
+                               Tk_Canvas canvas));
+/* 11 */
+EXTERN int             Tk_CanvasPsBitmap _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, Pixmap bitmap, int x, 
+                               int y, int width, int height));
+/* 12 */
+EXTERN int             Tk_CanvasPsColor _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, XColor * colorPtr));
+/* 13 */
+EXTERN int             Tk_CanvasPsFont _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, Tk_Font font));
+/* 14 */
+EXTERN void            Tk_CanvasPsPath _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, double * coordPtr, 
+                               int numPoints));
+/* 15 */
+EXTERN int             Tk_CanvasPsStipple _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Canvas canvas, Pixmap bitmap));
+/* 16 */
+EXTERN double          Tk_CanvasPsY _ANSI_ARGS_((Tk_Canvas canvas, double y));
+/* 17 */
+EXTERN void            Tk_CanvasSetStippleOrigin _ANSI_ARGS_((
+                               Tk_Canvas canvas, GC gc));
+/* 18 */
+EXTERN int             Tk_CanvasTagsParseProc _ANSI_ARGS_((
+                               ClientData clientData, Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * value, 
+                               char * widgRec, int offset));
+/* 19 */
+EXTERN char *          Tk_CanvasTagsPrintProc _ANSI_ARGS_((
+                               ClientData clientData, Tk_Window tkwin, 
+                               char * widgRec, int offset, 
+                               Tcl_FreeProc ** freeProcPtr));
+/* 20 */
+EXTERN Tk_Window       Tk_CanvasTkwin _ANSI_ARGS_((Tk_Canvas canvas));
+/* 21 */
+EXTERN void            Tk_CanvasWindowCoords _ANSI_ARGS_((Tk_Canvas canvas, 
+                               double x, double y, short * screenXPtr, 
+                               short * screenYPtr));
+/* 22 */
+EXTERN void            Tk_ChangeWindowAttributes _ANSI_ARGS_((
+                               Tk_Window tkwin, unsigned long valueMask, 
+                               XSetWindowAttributes * attsPtr));
+/* 23 */
+EXTERN int             Tk_CharBbox _ANSI_ARGS_((Tk_TextLayout layout, 
+                               int index, int * xPtr, int * yPtr, 
+                               int * widthPtr, int * heightPtr));
+/* 24 */
+EXTERN void            Tk_ClearSelection _ANSI_ARGS_((Tk_Window tkwin, 
+                               Atom selection));
+/* 25 */
+EXTERN int             Tk_ClipboardAppend _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Atom target, Atom format, 
+                               char* buffer));
+/* 26 */
+EXTERN int             Tk_ClipboardClear _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin));
+/* 27 */
+EXTERN int             Tk_ConfigureInfo _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_ConfigSpec * specs, 
+                               char * widgRec, char * argvName, int flags));
+/* 28 */
+EXTERN int             Tk_ConfigureValue _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_ConfigSpec * specs, 
+                               char * widgRec, char * argvName, int flags));
+/* 29 */
+EXTERN int             Tk_ConfigureWidget _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_ConfigSpec * specs, 
+                               int argc, char ** argv, char * widgRec, 
+                               int flags));
+/* 30 */
+EXTERN void            Tk_ConfigureWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               unsigned int valueMask, 
+                               XWindowChanges * valuePtr));
+/* 31 */
+EXTERN Tk_TextLayout   Tk_ComputeTextLayout _ANSI_ARGS_((Tk_Font font, 
+                               CONST char * str, int numChars, 
+                               int wrapLength, Tk_Justify justify, 
+                               int flags, int * widthPtr, int * heightPtr));
+/* 32 */
+EXTERN Tk_Window       Tk_CoordsToWindow _ANSI_ARGS_((int rootX, int rootY, 
+                               Tk_Window tkwin));
+/* 33 */
+EXTERN unsigned long   Tk_CreateBinding _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable, 
+                               ClientData object, char * eventStr, 
+                               char * command, int append));
+/* 34 */
+EXTERN Tk_BindingTable Tk_CreateBindingTable _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 35 */
+EXTERN Tk_ErrorHandler Tk_CreateErrorHandler _ANSI_ARGS_((Display * display, 
+                               int errNum, int request, int minorCode, 
+                               Tk_ErrorProc * errorProc, 
+                               ClientData clientData));
+/* 36 */
+EXTERN void            Tk_CreateEventHandler _ANSI_ARGS_((Tk_Window token, 
+                               unsigned long mask, Tk_EventProc * proc, 
+                               ClientData clientData));
+/* 37 */
+EXTERN void            Tk_CreateGenericHandler _ANSI_ARGS_((
+                               Tk_GenericProc * proc, ClientData clientData));
+/* 38 */
+EXTERN void            Tk_CreateImageType _ANSI_ARGS_((
+                               Tk_ImageType * typePtr));
+/* 39 */
+EXTERN void            Tk_CreateItemType _ANSI_ARGS_((Tk_ItemType * typePtr));
+/* 40 */
+EXTERN void            Tk_CreatePhotoImageFormat _ANSI_ARGS_((
+                               Tk_PhotoImageFormat * formatPtr));
+/* 41 */
+EXTERN void            Tk_CreateSelHandler _ANSI_ARGS_((Tk_Window tkwin, 
+                               Atom selection, Atom target, 
+                               Tk_SelectionProc * proc, 
+                               ClientData clientData, Atom format));
+/* 42 */
+EXTERN Tk_Window       Tk_CreateWindow _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window parent, char * name, 
+                               char * screenName));
+/* 43 */
+EXTERN Tk_Window       Tk_CreateWindowFromPath _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               char * pathName, char * screenName));
+/* 44 */
+EXTERN int             Tk_DefineBitmap _ANSI_ARGS_((Tcl_Interp * interp, 
+                               CONST char * name, char * source, int width, 
+                               int height));
+/* 45 */
+EXTERN void            Tk_DefineCursor _ANSI_ARGS_((Tk_Window window, 
+                               Tk_Cursor cursor));
+/* 46 */
+EXTERN void            Tk_DeleteAllBindings _ANSI_ARGS_((
+                               Tk_BindingTable bindingTable, 
+                               ClientData object));
+/* 47 */
+EXTERN int             Tk_DeleteBinding _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable, 
+                               ClientData object, char * eventStr));
+/* 48 */
+EXTERN void            Tk_DeleteBindingTable _ANSI_ARGS_((
+                               Tk_BindingTable bindingTable));
+/* 49 */
+EXTERN void            Tk_DeleteErrorHandler _ANSI_ARGS_((
+                               Tk_ErrorHandler handler));
+/* 50 */
+EXTERN void            Tk_DeleteEventHandler _ANSI_ARGS_((Tk_Window token, 
+                               unsigned long mask, Tk_EventProc * proc, 
+                               ClientData clientData));
+/* 51 */
+EXTERN void            Tk_DeleteGenericHandler _ANSI_ARGS_((
+                               Tk_GenericProc * proc, ClientData clientData));
+/* 52 */
+EXTERN void            Tk_DeleteImage _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * name));
+/* 53 */
+EXTERN void            Tk_DeleteSelHandler _ANSI_ARGS_((Tk_Window tkwin, 
+                               Atom selection, Atom target));
+/* 54 */
+EXTERN void            Tk_DestroyWindow _ANSI_ARGS_((Tk_Window tkwin));
+/* 55 */
+EXTERN char *          Tk_DisplayName _ANSI_ARGS_((Tk_Window tkwin));
+/* 56 */
+EXTERN int             Tk_DistanceToTextLayout _ANSI_ARGS_((
+                               Tk_TextLayout layout, int x, int y));
+/* 57 */
+EXTERN void            Tk_Draw3DPolygon _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, 
+                               XPoint * pointPtr, int numPoints, 
+                               int borderWidth, int leftRelief));
+/* 58 */
+EXTERN void            Tk_Draw3DRectangle _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, int x, 
+                               int y, int width, int height, 
+                               int borderWidth, int relief));
+/* 59 */
+EXTERN void            Tk_DrawChars _ANSI_ARGS_((Display * display, 
+                               Drawable drawable, GC gc, Tk_Font tkfont, 
+                               CONST char * source, int numBytes, int x, 
+                               int y));
+/* 60 */
+EXTERN void            Tk_DrawFocusHighlight _ANSI_ARGS_((Tk_Window tkwin, 
+                               GC gc, int width, Drawable drawable));
+/* 61 */
+EXTERN void            Tk_DrawTextLayout _ANSI_ARGS_((Display * display, 
+                               Drawable drawable, GC gc, 
+                               Tk_TextLayout layout, int x, int y, 
+                               int firstChar, int lastChar));
+/* 62 */
+EXTERN void            Tk_Fill3DPolygon _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, 
+                               XPoint * pointPtr, int numPoints, 
+                               int borderWidth, int leftRelief));
+/* 63 */
+EXTERN void            Tk_Fill3DRectangle _ANSI_ARGS_((Tk_Window tkwin, 
+                               Drawable drawable, Tk_3DBorder border, int x, 
+                               int y, int width, int height, 
+                               int borderWidth, int relief));
+/* 64 */
+EXTERN Tk_PhotoHandle  Tk_FindPhoto _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * imageName));
+/* 65 */
+EXTERN Font            Tk_FontId _ANSI_ARGS_((Tk_Font font));
+/* 66 */
+EXTERN void            Tk_Free3DBorder _ANSI_ARGS_((Tk_3DBorder border));
+/* 67 */
+EXTERN void            Tk_FreeBitmap _ANSI_ARGS_((Display * display, 
+                               Pixmap bitmap));
+/* 68 */
+EXTERN void            Tk_FreeColor _ANSI_ARGS_((XColor * colorPtr));
+/* 69 */
+EXTERN void            Tk_FreeColormap _ANSI_ARGS_((Display * display, 
+                               Colormap colormap));
+/* 70 */
+EXTERN void            Tk_FreeCursor _ANSI_ARGS_((Display * display, 
+                               Tk_Cursor cursor));
+/* 71 */
+EXTERN void            Tk_FreeFont _ANSI_ARGS_((Tk_Font f));
+/* 72 */
+EXTERN void            Tk_FreeGC _ANSI_ARGS_((Display * display, GC gc));
+/* 73 */
+EXTERN void            Tk_FreeImage _ANSI_ARGS_((Tk_Image image));
+/* 74 */
+EXTERN void            Tk_FreeOptions _ANSI_ARGS_((Tk_ConfigSpec * specs, 
+                               char * widgRec, Display * display, 
+                               int needFlags));
+/* 75 */
+EXTERN void            Tk_FreePixmap _ANSI_ARGS_((Display * display, 
+                               Pixmap pixmap));
+/* 76 */
+EXTERN void            Tk_FreeTextLayout _ANSI_ARGS_((
+                               Tk_TextLayout textLayout));
+/* 77 */
+EXTERN void            Tk_FreeXId _ANSI_ARGS_((Display * display, XID xid));
+/* 78 */
+EXTERN GC              Tk_GCForColor _ANSI_ARGS_((XColor * colorPtr, 
+                               Drawable drawable));
+/* 79 */
+EXTERN void            Tk_GeometryRequest _ANSI_ARGS_((Tk_Window tkwin, 
+                               int reqWidth, int reqHeight));
+/* 80 */
+EXTERN Tk_3DBorder     Tk_Get3DBorder _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_Uid colorName));
+/* 81 */
+EXTERN void            Tk_GetAllBindings _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable, 
+                               ClientData object));
+/* 82 */
+EXTERN int             Tk_GetAnchor _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * str, Tk_Anchor * anchorPtr));
+/* 83 */
+EXTERN char *          Tk_GetAtomName _ANSI_ARGS_((Tk_Window tkwin, 
+                               Atom atom));
+/* 84 */
+EXTERN char *          Tk_GetBinding _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable, 
+                               ClientData object, char * eventStr));
+/* 85 */
+EXTERN Pixmap          Tk_GetBitmap _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, CONST char * str));
+/* 86 */
+EXTERN Pixmap          Tk_GetBitmapFromData _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               char * source, int width, int height));
+/* 87 */
+EXTERN int             Tk_GetCapStyle _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * str, int * capPtr));
+/* 88 */
+EXTERN XColor *                Tk_GetColor _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_Uid name));
+/* 89 */
+EXTERN XColor *                Tk_GetColorByValue _ANSI_ARGS_((Tk_Window tkwin, 
+                               XColor * colorPtr));
+/* 90 */
+EXTERN Colormap                Tk_GetColormap _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * str));
+/* 91 */
+EXTERN Tk_Cursor       Tk_GetCursor _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_Uid str));
+/* 92 */
+EXTERN Tk_Cursor       Tk_GetCursorFromData _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               char * source, char * mask, int width, 
+                               int height, int xHot, int yHot, Tk_Uid fg, 
+                               Tk_Uid bg));
+/* 93 */
+EXTERN Tk_Font         Tk_GetFont _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, CONST char * str));
+/* 94 */
+EXTERN Tk_Font         Tk_GetFontFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 95 */
+EXTERN void            Tk_GetFontMetrics _ANSI_ARGS_((Tk_Font font, 
+                               Tk_FontMetrics * fmPtr));
+/* 96 */
+EXTERN GC              Tk_GetGC _ANSI_ARGS_((Tk_Window tkwin, 
+                               unsigned long valueMask, 
+                               XGCValues * valuePtr));
+/* 97 */
+EXTERN Tk_Image                Tk_GetImage _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * name, 
+                               Tk_ImageChangedProc * changeProc, 
+                               ClientData clientData));
+/* 98 */
+EXTERN ClientData      Tk_GetImageMasterData _ANSI_ARGS_((
+                               Tcl_Interp * interp, char * name, 
+                               Tk_ImageType ** typePtrPtr));
+/* 99 */
+EXTERN Tk_ItemType *   Tk_GetItemTypes _ANSI_ARGS_((void));
+/* 100 */
+EXTERN int             Tk_GetJoinStyle _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * str, int * joinPtr));
+/* 101 */
+EXTERN int             Tk_GetJustify _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * str, Tk_Justify * justifyPtr));
+/* 102 */
+EXTERN int             Tk_GetNumMainWindows _ANSI_ARGS_((void));
+/* 103 */
+EXTERN Tk_Uid          Tk_GetOption _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name, char * className));
+/* 104 */
+EXTERN int             Tk_GetPixels _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * str, int * intPtr));
+/* 105 */
+EXTERN Pixmap          Tk_GetPixmap _ANSI_ARGS_((Display * display, 
+                               Drawable d, int width, int height, int depth));
+/* 106 */
+EXTERN int             Tk_GetRelief _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * name, int * reliefPtr));
+/* 107 */
+EXTERN void            Tk_GetRootCoords _ANSI_ARGS_((Tk_Window tkwin, 
+                               int * xPtr, int * yPtr));
+/* 108 */
+EXTERN int             Tk_GetScrollInfo _ANSI_ARGS_((Tcl_Interp * interp, 
+                               int argc, char ** argv, double * dblPtr, 
+                               int * intPtr));
+/* 109 */
+EXTERN int             Tk_GetScreenMM _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * str, 
+                               double * doublePtr));
+/* 110 */
+EXTERN int             Tk_GetSelection _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Atom selection, Atom target, 
+                               Tk_GetSelProc * proc, ClientData clientData));
+/* 111 */
+EXTERN Tk_Uid          Tk_GetUid _ANSI_ARGS_((CONST char * str));
+/* 112 */
+EXTERN Visual *                Tk_GetVisual _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * str, int * depthPtr, 
+                               Colormap * colormapPtr));
+/* 113 */
+EXTERN void            Tk_GetVRootGeometry _ANSI_ARGS_((Tk_Window tkwin, 
+                               int * xPtr, int * yPtr, int * widthPtr, 
+                               int * heightPtr));
+/* 114 */
+EXTERN int             Tk_Grab _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, int grabGlobal));
+/* 115 */
+EXTERN void            Tk_HandleEvent _ANSI_ARGS_((XEvent * eventPtr));
+/* 116 */
+EXTERN Tk_Window       Tk_IdToWindow _ANSI_ARGS_((Display * display, 
+                               Window window));
+/* 117 */
+EXTERN void            Tk_ImageChanged _ANSI_ARGS_((Tk_ImageMaster master, 
+                               int x, int y, int width, int height, 
+                               int imageWidth, int imageHeight));
+/* 118 */
+EXTERN int             Tk_Init _ANSI_ARGS_((Tcl_Interp * interp));
+/* 119 */
+EXTERN Atom            Tk_InternAtom _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 120 */
+EXTERN int             Tk_IntersectTextLayout _ANSI_ARGS_((
+                               Tk_TextLayout layout, int x, int y, 
+                               int width, int height));
+/* 121 */
+EXTERN void            Tk_MaintainGeometry _ANSI_ARGS_((Tk_Window slave, 
+                               Tk_Window master, int x, int y, int width, 
+                               int height));
+/* 122 */
+EXTERN Tk_Window       Tk_MainWindow _ANSI_ARGS_((Tcl_Interp * interp));
+/* 123 */
+EXTERN void            Tk_MakeWindowExist _ANSI_ARGS_((Tk_Window tkwin));
+/* 124 */
+EXTERN void            Tk_ManageGeometry _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tk_GeomMgr * mgrPtr, ClientData clientData));
+/* 125 */
+EXTERN void            Tk_MapWindow _ANSI_ARGS_((Tk_Window tkwin));
+/* 126 */
+EXTERN int             Tk_MeasureChars _ANSI_ARGS_((Tk_Font tkfont, 
+                               CONST char * source, int numBytes, 
+                               int maxPixels, int flags, int * lengthPtr));
+/* 127 */
+EXTERN void            Tk_MoveResizeWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int x, int y, int width, int height));
+/* 128 */
+EXTERN void            Tk_MoveWindow _ANSI_ARGS_((Tk_Window tkwin, int x, 
+                               int y));
+/* 129 */
+EXTERN void            Tk_MoveToplevelWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int x, int y));
+/* 130 */
+EXTERN char *          Tk_NameOf3DBorder _ANSI_ARGS_((Tk_3DBorder border));
+/* 131 */
+EXTERN char *          Tk_NameOfAnchor _ANSI_ARGS_((Tk_Anchor anchor));
+/* 132 */
+EXTERN char *          Tk_NameOfBitmap _ANSI_ARGS_((Display * display, 
+                               Pixmap bitmap));
+/* 133 */
+EXTERN char *          Tk_NameOfCapStyle _ANSI_ARGS_((int cap));
+/* 134 */
+EXTERN char *          Tk_NameOfColor _ANSI_ARGS_((XColor * colorPtr));
+/* 135 */
+EXTERN char *          Tk_NameOfCursor _ANSI_ARGS_((Display * display, 
+                               Tk_Cursor cursor));
+/* 136 */
+EXTERN char *          Tk_NameOfFont _ANSI_ARGS_((Tk_Font font));
+/* 137 */
+EXTERN char *          Tk_NameOfImage _ANSI_ARGS_((
+                               Tk_ImageMaster imageMaster));
+/* 138 */
+EXTERN char *          Tk_NameOfJoinStyle _ANSI_ARGS_((int join));
+/* 139 */
+EXTERN char *          Tk_NameOfJustify _ANSI_ARGS_((Tk_Justify justify));
+/* 140 */
+EXTERN char *          Tk_NameOfRelief _ANSI_ARGS_((int relief));
+/* 141 */
+EXTERN Tk_Window       Tk_NameToWindow _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * pathName, Tk_Window tkwin));
+/* 142 */
+EXTERN void            Tk_OwnSelection _ANSI_ARGS_((Tk_Window tkwin, 
+                               Atom selection, Tk_LostSelProc * proc, 
+                               ClientData clientData));
+/* 143 */
+EXTERN int             Tk_ParseArgv _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, int * argcPtr, char ** argv, 
+                               Tk_ArgvInfo * argTable, int flags));
+/* 144 */
+EXTERN void            Tk_PhotoPutBlock _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               Tk_PhotoImageBlock * blockPtr, int x, int y, 
+                               int width, int height));
+/* 145 */
+EXTERN void            Tk_PhotoPutZoomedBlock _ANSI_ARGS_((
+                               Tk_PhotoHandle handle, 
+                               Tk_PhotoImageBlock * blockPtr, int x, int y, 
+                               int width, int height, int zoomX, int zoomY, 
+                               int subsampleX, int subsampleY));
+/* 146 */
+EXTERN int             Tk_PhotoGetImage _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               Tk_PhotoImageBlock * blockPtr));
+/* 147 */
+EXTERN void            Tk_PhotoBlank _ANSI_ARGS_((Tk_PhotoHandle handle));
+/* 148 */
+EXTERN void            Tk_PhotoExpand _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               int width, int height));
+/* 149 */
+EXTERN void            Tk_PhotoGetSize _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               int * widthPtr, int * heightPtr));
+/* 150 */
+EXTERN void            Tk_PhotoSetSize _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               int width, int height));
+/* 151 */
+EXTERN int             Tk_PointToChar _ANSI_ARGS_((Tk_TextLayout layout, 
+                               int x, int y));
+/* 152 */
+EXTERN int             Tk_PostscriptFontName _ANSI_ARGS_((Tk_Font tkfont, 
+                               Tcl_DString * dsPtr));
+/* 153 */
+EXTERN void            Tk_PreserveColormap _ANSI_ARGS_((Display * display, 
+                               Colormap colormap));
+/* 154 */
+EXTERN void            Tk_QueueWindowEvent _ANSI_ARGS_((XEvent * eventPtr, 
+                               Tcl_QueuePosition position));
+/* 155 */
+EXTERN void            Tk_RedrawImage _ANSI_ARGS_((Tk_Image image, 
+                               int imageX, int imageY, int width, 
+                               int height, Drawable drawable, int drawableX, 
+                               int drawableY));
+/* 156 */
+EXTERN void            Tk_ResizeWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int width, int height));
+/* 157 */
+EXTERN int             Tk_RestackWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int aboveBelow, Tk_Window other));
+/* 158 */
+EXTERN Tk_RestrictProc * Tk_RestrictEvents _ANSI_ARGS_((
+                               Tk_RestrictProc * proc, ClientData arg, 
+                               ClientData * prevArgPtr));
+/* 159 */
+EXTERN int             Tk_SafeInit _ANSI_ARGS_((Tcl_Interp * interp));
+/* 160 */
+EXTERN char *          Tk_SetAppName _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 161 */
+EXTERN void            Tk_SetBackgroundFromBorder _ANSI_ARGS_((
+                               Tk_Window tkwin, Tk_3DBorder border));
+/* 162 */
+EXTERN void            Tk_SetClass _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * className));
+/* 163 */
+EXTERN void            Tk_SetGrid _ANSI_ARGS_((Tk_Window tkwin, 
+                               int reqWidth, int reqHeight, int gridWidth, 
+                               int gridHeight));
+/* 164 */
+EXTERN void            Tk_SetInternalBorder _ANSI_ARGS_((Tk_Window tkwin, 
+                               int width));
+/* 165 */
+EXTERN void            Tk_SetWindowBackground _ANSI_ARGS_((Tk_Window tkwin, 
+                               unsigned long pixel));
+/* 166 */
+EXTERN void            Tk_SetWindowBackgroundPixmap _ANSI_ARGS_((
+                               Tk_Window tkwin, Pixmap pixmap));
+/* 167 */
+EXTERN void            Tk_SetWindowBorder _ANSI_ARGS_((Tk_Window tkwin, 
+                               unsigned long pixel));
+/* 168 */
+EXTERN void            Tk_SetWindowBorderWidth _ANSI_ARGS_((Tk_Window tkwin, 
+                               int width));
+/* 169 */
+EXTERN void            Tk_SetWindowBorderPixmap _ANSI_ARGS_((
+                               Tk_Window tkwin, Pixmap pixmap));
+/* 170 */
+EXTERN void            Tk_SetWindowColormap _ANSI_ARGS_((Tk_Window tkwin, 
+                               Colormap colormap));
+/* 171 */
+EXTERN int             Tk_SetWindowVisual _ANSI_ARGS_((Tk_Window tkwin, 
+                               Visual * visual, int depth, 
+                               Colormap colormap));
+/* 172 */
+EXTERN void            Tk_SizeOfBitmap _ANSI_ARGS_((Display * display, 
+                               Pixmap bitmap, int * widthPtr, 
+                               int * heightPtr));
+/* 173 */
+EXTERN void            Tk_SizeOfImage _ANSI_ARGS_((Tk_Image image, 
+                               int * widthPtr, int * heightPtr));
+/* 174 */
+EXTERN int             Tk_StrictMotif _ANSI_ARGS_((Tk_Window tkwin));
+/* 175 */
+EXTERN void            Tk_TextLayoutToPostscript _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_TextLayout layout));
+/* 176 */
+EXTERN int             Tk_TextWidth _ANSI_ARGS_((Tk_Font font, 
+                               CONST char * str, int numBytes));
+/* 177 */
+EXTERN void            Tk_UndefineCursor _ANSI_ARGS_((Tk_Window window));
+/* 178 */
+EXTERN void            Tk_UnderlineChars _ANSI_ARGS_((Display * display, 
+                               Drawable drawable, GC gc, Tk_Font tkfont, 
+                               CONST char * source, int x, int y, 
+                               int firstByte, int lastByte));
+/* 179 */
+EXTERN void            Tk_UnderlineTextLayout _ANSI_ARGS_((
+                               Display * display, Drawable drawable, GC gc, 
+                               Tk_TextLayout layout, int x, int y, 
+                               int underline));
+/* 180 */
+EXTERN void            Tk_Ungrab _ANSI_ARGS_((Tk_Window tkwin));
+/* 181 */
+EXTERN void            Tk_UnmaintainGeometry _ANSI_ARGS_((Tk_Window slave, 
+                               Tk_Window master));
+/* 182 */
+EXTERN void            Tk_UnmapWindow _ANSI_ARGS_((Tk_Window tkwin));
+/* 183 */
+EXTERN void            Tk_UnsetGrid _ANSI_ARGS_((Tk_Window tkwin));
+/* 184 */
+EXTERN void            Tk_UpdatePointer _ANSI_ARGS_((Tk_Window tkwin, int x, 
+                               int y, int state));
+/* 185 */
+EXTERN Pixmap          Tk_AllocBitmapFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 186 */
+EXTERN Tk_3DBorder     Tk_Alloc3DBorderFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 187 */
+EXTERN XColor *                Tk_AllocColorFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 188 */
+EXTERN Tk_Cursor       Tk_AllocCursorFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 189 */
+EXTERN Tk_Font         Tk_AllocFontFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tcl_Obj * objPtr));
+/* 190 */
+EXTERN Tk_OptionTable  Tk_CreateOptionTable _ANSI_ARGS_((
+                               Tcl_Interp * interp, 
+                               CONST Tk_OptionSpec * templatePtr));
+/* 191 */
+EXTERN void            Tk_DeleteOptionTable _ANSI_ARGS_((
+                               Tk_OptionTable optionTable));
+/* 192 */
+EXTERN void            Tk_Free3DBorderFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 193 */
+EXTERN void            Tk_FreeBitmapFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 194 */
+EXTERN void            Tk_FreeColorFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 195 */
+EXTERN void            Tk_FreeConfigOptions _ANSI_ARGS_((char * recordPtr, 
+                               Tk_OptionTable optionToken, Tk_Window tkwin));
+/* 196 */
+EXTERN void            Tk_FreeSavedOptions _ANSI_ARGS_((
+                               Tk_SavedOptions * savePtr));
+/* 197 */
+EXTERN void            Tk_FreeCursorFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 198 */
+EXTERN void            Tk_FreeFontFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 199 */
+EXTERN Tk_3DBorder     Tk_Get3DBorderFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 200 */
+EXTERN int             Tk_GetAnchorFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tcl_Obj * objPtr, Tk_Anchor * anchorPtr));
+/* 201 */
+EXTERN Pixmap          Tk_GetBitmapFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 202 */
+EXTERN XColor *                Tk_GetColorFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 203 */
+EXTERN Tk_Cursor       Tk_GetCursorFromObj _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tcl_Obj * objPtr));
+/* 204 */
+EXTERN Tcl_Obj *       Tk_GetOptionInfo _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * recordPtr, Tk_OptionTable optionTable, 
+                               Tcl_Obj * namePtr, Tk_Window tkwin));
+/* 205 */
+EXTERN Tcl_Obj *       Tk_GetOptionValue _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * recordPtr, Tk_OptionTable optionTable, 
+                               Tcl_Obj * namePtr, Tk_Window tkwin));
+/* 206 */
+EXTERN int             Tk_GetJustifyFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tcl_Obj * objPtr, 
+                               Tk_Justify * justifyPtr));
+/* 207 */
+EXTERN int             Tk_GetMMFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tcl_Obj * objPtr, 
+                               double * doublePtr));
+/* 208 */
+EXTERN int             Tk_GetPixelsFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tcl_Obj * objPtr, 
+                               int * intPtr));
+/* 209 */
+EXTERN int             Tk_GetReliefFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tcl_Obj * objPtr, int * resultPtr));
+/* 210 */
+EXTERN int             Tk_GetScrollInfoObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               int objc, Tcl_Obj *CONST objv[], 
+                               double * dblPtr, int * intPtr));
+/* 211 */
+EXTERN int             Tk_InitOptions _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * recordPtr, Tk_OptionTable optionToken, 
+                               Tk_Window tkwin));
+/* 212 */
+EXTERN void            Tk_MainEx _ANSI_ARGS_((int argc, char ** argv, 
+                               Tcl_AppInitProc * appInitProc, 
+                               Tcl_Interp * interp));
+/* 213 */
+EXTERN void            Tk_RestoreSavedOptions _ANSI_ARGS_((
+                               Tk_SavedOptions * savePtr));
+/* 214 */
+EXTERN int             Tk_SetOptions _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * recordPtr, Tk_OptionTable optionTable, 
+                               int objc, Tcl_Obj *CONST objv[], 
+                               Tk_Window tkwin, Tk_SavedOptions * savePtr, 
+                               int * maskPtr));
+/* 215 */
+EXTERN void            Tk_InitConsoleChannels _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 216 */
+EXTERN int             Tk_CreateConsoleWindow _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 217 */
+EXTERN void            Tk_CreateSmoothMethod _ANSI_ARGS_((
+                               Tcl_Interp * interp, 
+                               Tk_SmoothMethod * method));
+/* Slot 218 is reserved */
+/* Slot 219 is reserved */
+/* 220 */
+EXTERN int             Tk_GetDash _ANSI_ARGS_((Tcl_Interp * interp, 
+                               CONST char * value, Tk_Dash * dash));
+/* 221 */
+EXTERN void            Tk_CreateOutline _ANSI_ARGS_((Tk_Outline * outline));
+/* 222 */
+EXTERN void            Tk_DeleteOutline _ANSI_ARGS_((Display * display, 
+                               Tk_Outline * outline));
+/* 223 */
+EXTERN int             Tk_ConfigOutlineGC _ANSI_ARGS_((XGCValues * gcValues, 
+                               Tk_Canvas canvas, Tk_Item * item, 
+                               Tk_Outline * outline));
+/* 224 */
+EXTERN int             Tk_ChangeOutlineGC _ANSI_ARGS_((Tk_Canvas canvas, 
+                               Tk_Item * item, Tk_Outline * outline));
+/* 225 */
+EXTERN int             Tk_ResetOutlineGC _ANSI_ARGS_((Tk_Canvas canvas, 
+                               Tk_Item * item, Tk_Outline * outline));
+/* 226 */
+EXTERN int             Tk_CanvasPsOutline _ANSI_ARGS_((Tk_Canvas canvas, 
+                               Tk_Item * item, Tk_Outline * outline));
+/* 227 */
+EXTERN void            Tk_SetTSOrigin _ANSI_ARGS_((Tk_Window tkwin, GC gc, 
+                               int x, int y));
+/* 228 */
+EXTERN int             Tk_CanvasGetCoordFromObj _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Canvas canvas, 
+                               Tcl_Obj * obj, double * doublePtr));
+/* 229 */
+EXTERN void            Tk_CanvasSetOffset _ANSI_ARGS_((Tk_Canvas canvas, 
+                               GC gc, Tk_TSOffset * offset));
+/* 230 */
+EXTERN void            Tk_DitherPhoto _ANSI_ARGS_((Tk_PhotoHandle handle, 
+                               int x, int y, int width, int height));
+/* 231 */
+EXTERN int             Tk_PostscriptBitmap _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_PostscriptInfo psInfo, 
+                               Pixmap bitmap, int startX, int startY, 
+                               int width, int height));
+/* 232 */
+EXTERN int             Tk_PostscriptColor _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_PostscriptInfo psInfo, XColor * colorPtr));
+/* 233 */
+EXTERN int             Tk_PostscriptFont _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_PostscriptInfo psInfo, Tk_Font font));
+/* 234 */
+EXTERN int             Tk_PostscriptImage _ANSI_ARGS_((Tk_Image image, 
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tk_PostscriptInfo psinfo, int x, int y, 
+                               int width, int height, int prepass));
+/* 235 */
+EXTERN void            Tk_PostscriptPath _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_PostscriptInfo psInfo, double * coordPtr, 
+                               int numPoints));
+/* 236 */
+EXTERN int             Tk_PostscriptStipple _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Window tkwin, 
+                               Tk_PostscriptInfo psInfo, Pixmap bitmap));
+/* 237 */
+EXTERN double          Tk_PostscriptY _ANSI_ARGS_((double y, 
+                               Tk_PostscriptInfo psInfo));
+/* 238 */
+EXTERN int             Tk_PostscriptPhoto _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_PhotoImageBlock * blockPtr, 
+                               Tk_PostscriptInfo psInfo, int width, 
+                               int height));
+
+typedef struct TkStubHooks {
+    struct TkPlatStubs *tkPlatStubs;
+    struct TkIntStubs *tkIntStubs;
+    struct TkIntPlatStubs *tkIntPlatStubs;
+    struct TkIntXlibStubs *tkIntXlibStubs;
+} TkStubHooks;
+
+typedef struct TkStubs {
+    int magic;
+    struct TkStubHooks *hooks;
+
+    void (*tk_MainLoop) _ANSI_ARGS_((void)); /* 0 */
+    XColor * (*tk_3DBorderColor) _ANSI_ARGS_((Tk_3DBorder border)); /* 1 */
+    GC (*tk_3DBorderGC) _ANSI_ARGS_((Tk_Window tkwin, Tk_3DBorder border, int which)); /* 2 */
+    void (*tk_3DHorizontalBevel) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int leftIn, int rightIn, int topBevel, int relief)); /* 3 */
+    void (*tk_3DVerticalBevel) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int leftBevel, int relief)); /* 4 */
+    void (*tk_AddOption) _ANSI_ARGS_((Tk_Window tkwin, char * name, char * value, int priority)); /* 5 */
+    void (*tk_BindEvent) _ANSI_ARGS_((Tk_BindingTable bindingTable, XEvent * eventPtr, Tk_Window tkwin, int numObjects, ClientData * objectPtr)); /* 6 */
+    void (*tk_CanvasDrawableCoords) _ANSI_ARGS_((Tk_Canvas canvas, double x, double y, short * drawableXPtr, short * drawableYPtr)); /* 7 */
+    void (*tk_CanvasEventuallyRedraw) _ANSI_ARGS_((Tk_Canvas canvas, int x1, int y1, int x2, int y2)); /* 8 */
+    int (*tk_CanvasGetCoord) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, char * str, double * doublePtr)); /* 9 */
+    Tk_CanvasTextInfo * (*tk_CanvasGetTextInfo) _ANSI_ARGS_((Tk_Canvas canvas)); /* 10 */
+    int (*tk_CanvasPsBitmap) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, Pixmap bitmap, int x, int y, int width, int height)); /* 11 */
+    int (*tk_CanvasPsColor) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, XColor * colorPtr)); /* 12 */
+    int (*tk_CanvasPsFont) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, Tk_Font font)); /* 13 */
+    void (*tk_CanvasPsPath) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, double * coordPtr, int numPoints)); /* 14 */
+    int (*tk_CanvasPsStipple) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, Pixmap bitmap)); /* 15 */
+    double (*tk_CanvasPsY) _ANSI_ARGS_((Tk_Canvas canvas, double y)); /* 16 */
+    void (*tk_CanvasSetStippleOrigin) _ANSI_ARGS_((Tk_Canvas canvas, GC gc)); /* 17 */
+    int (*tk_CanvasTagsParseProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, Tk_Window tkwin, char * value, char * widgRec, int offset)); /* 18 */
+    char * (*tk_CanvasTagsPrintProc) _ANSI_ARGS_((ClientData clientData, Tk_Window tkwin, char * widgRec, int offset, Tcl_FreeProc ** freeProcPtr)); /* 19 */
+    Tk_Window (*tk_CanvasTkwin) _ANSI_ARGS_((Tk_Canvas canvas)); /* 20 */
+    void (*tk_CanvasWindowCoords) _ANSI_ARGS_((Tk_Canvas canvas, double x, double y, short * screenXPtr, short * screenYPtr)); /* 21 */
+    void (*tk_ChangeWindowAttributes) _ANSI_ARGS_((Tk_Window tkwin, unsigned long valueMask, XSetWindowAttributes * attsPtr)); /* 22 */
+    int (*tk_CharBbox) _ANSI_ARGS_((Tk_TextLayout layout, int index, int * xPtr, int * yPtr, int * widthPtr, int * heightPtr)); /* 23 */
+    void (*tk_ClearSelection) _ANSI_ARGS_((Tk_Window tkwin, Atom selection)); /* 24 */
+    int (*tk_ClipboardAppend) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Atom target, Atom format, char* buffer)); /* 25 */
+    int (*tk_ClipboardClear) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin)); /* 26 */
+    int (*tk_ConfigureInfo) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_ConfigSpec * specs, char * widgRec, char * argvName, int flags)); /* 27 */
+    int (*tk_ConfigureValue) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_ConfigSpec * specs, char * widgRec, char * argvName, int flags)); /* 28 */
+    int (*tk_ConfigureWidget) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_ConfigSpec * specs, int argc, char ** argv, char * widgRec, int flags)); /* 29 */
+    void (*tk_ConfigureWindow) _ANSI_ARGS_((Tk_Window tkwin, unsigned int valueMask, XWindowChanges * valuePtr)); /* 30 */
+    Tk_TextLayout (*tk_ComputeTextLayout) _ANSI_ARGS_((Tk_Font font, CONST char * str, int numChars, int wrapLength, Tk_Justify justify, int flags, int * widthPtr, int * heightPtr)); /* 31 */
+    Tk_Window (*tk_CoordsToWindow) _ANSI_ARGS_((int rootX, int rootY, Tk_Window tkwin)); /* 32 */
+    unsigned long (*tk_CreateBinding) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable, ClientData object, char * eventStr, char * command, int append)); /* 33 */
+    Tk_BindingTable (*tk_CreateBindingTable) _ANSI_ARGS_((Tcl_Interp * interp)); /* 34 */
+    Tk_ErrorHandler (*tk_CreateErrorHandler) _ANSI_ARGS_((Display * display, int errNum, int request, int minorCode, Tk_ErrorProc * errorProc, ClientData clientData)); /* 35 */
+    void (*tk_CreateEventHandler) _ANSI_ARGS_((Tk_Window token, unsigned long mask, Tk_EventProc * proc, ClientData clientData)); /* 36 */
+    void (*tk_CreateGenericHandler) _ANSI_ARGS_((Tk_GenericProc * proc, ClientData clientData)); /* 37 */
+    void (*tk_CreateImageType) _ANSI_ARGS_((Tk_ImageType * typePtr)); /* 38 */
+    void (*tk_CreateItemType) _ANSI_ARGS_((Tk_ItemType * typePtr)); /* 39 */
+    void (*tk_CreatePhotoImageFormat) _ANSI_ARGS_((Tk_PhotoImageFormat * formatPtr)); /* 40 */
+    void (*tk_CreateSelHandler) _ANSI_ARGS_((Tk_Window tkwin, Atom selection, Atom target, Tk_SelectionProc * proc, ClientData clientData, Atom format)); /* 41 */
+    Tk_Window (*tk_CreateWindow) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window parent, char * name, char * screenName)); /* 42 */
+    Tk_Window (*tk_CreateWindowFromPath) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * pathName, char * screenName)); /* 43 */
+    int (*tk_DefineBitmap) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * name, char * source, int width, int height)); /* 44 */
+    void (*tk_DefineCursor) _ANSI_ARGS_((Tk_Window window, Tk_Cursor cursor)); /* 45 */
+    void (*tk_DeleteAllBindings) _ANSI_ARGS_((Tk_BindingTable bindingTable, ClientData object)); /* 46 */
+    int (*tk_DeleteBinding) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable, ClientData object, char * eventStr)); /* 47 */
+    void (*tk_DeleteBindingTable) _ANSI_ARGS_((Tk_BindingTable bindingTable)); /* 48 */
+    void (*tk_DeleteErrorHandler) _ANSI_ARGS_((Tk_ErrorHandler handler)); /* 49 */
+    void (*tk_DeleteEventHandler) _ANSI_ARGS_((Tk_Window token, unsigned long mask, Tk_EventProc * proc, ClientData clientData)); /* 50 */
+    void (*tk_DeleteGenericHandler) _ANSI_ARGS_((Tk_GenericProc * proc, ClientData clientData)); /* 51 */
+    void (*tk_DeleteImage) _ANSI_ARGS_((Tcl_Interp * interp, char * name)); /* 52 */
+    void (*tk_DeleteSelHandler) _ANSI_ARGS_((Tk_Window tkwin, Atom selection, Atom target)); /* 53 */
+    void (*tk_DestroyWindow) _ANSI_ARGS_((Tk_Window tkwin)); /* 54 */
+    char * (*tk_DisplayName) _ANSI_ARGS_((Tk_Window tkwin)); /* 55 */
+    int (*tk_DistanceToTextLayout) _ANSI_ARGS_((Tk_TextLayout layout, int x, int y)); /* 56 */
+    void (*tk_Draw3DPolygon) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, XPoint * pointPtr, int numPoints, int borderWidth, int leftRelief)); /* 57 */
+    void (*tk_Draw3DRectangle) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int borderWidth, int relief)); /* 58 */
+    void (*tk_DrawChars) _ANSI_ARGS_((Display * display, Drawable drawable, GC gc, Tk_Font tkfont, CONST char * source, int numBytes, int x, int y)); /* 59 */
+    void (*tk_DrawFocusHighlight) _ANSI_ARGS_((Tk_Window tkwin, GC gc, int width, Drawable drawable)); /* 60 */
+    void (*tk_DrawTextLayout) _ANSI_ARGS_((Display * display, Drawable drawable, GC gc, Tk_TextLayout layout, int x, int y, int firstChar, int lastChar)); /* 61 */
+    void (*tk_Fill3DPolygon) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, XPoint * pointPtr, int numPoints, int borderWidth, int leftRelief)); /* 62 */
+    void (*tk_Fill3DRectangle) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int borderWidth, int relief)); /* 63 */
+    Tk_PhotoHandle (*tk_FindPhoto) _ANSI_ARGS_((Tcl_Interp * interp, char * imageName)); /* 64 */
+    Font (*tk_FontId) _ANSI_ARGS_((Tk_Font font)); /* 65 */
+    void (*tk_Free3DBorder) _ANSI_ARGS_((Tk_3DBorder border)); /* 66 */
+    void (*tk_FreeBitmap) _ANSI_ARGS_((Display * display, Pixmap bitmap)); /* 67 */
+    void (*tk_FreeColor) _ANSI_ARGS_((XColor * colorPtr)); /* 68 */
+    void (*tk_FreeColormap) _ANSI_ARGS_((Display * display, Colormap colormap)); /* 69 */
+    void (*tk_FreeCursor) _ANSI_ARGS_((Display * display, Tk_Cursor cursor)); /* 70 */
+    void (*tk_FreeFont) _ANSI_ARGS_((Tk_Font f)); /* 71 */
+    void (*tk_FreeGC) _ANSI_ARGS_((Display * display, GC gc)); /* 72 */
+    void (*tk_FreeImage) _ANSI_ARGS_((Tk_Image image)); /* 73 */
+    void (*tk_FreeOptions) _ANSI_ARGS_((Tk_ConfigSpec * specs, char * widgRec, Display * display, int needFlags)); /* 74 */
+    void (*tk_FreePixmap) _ANSI_ARGS_((Display * display, Pixmap pixmap)); /* 75 */
+    void (*tk_FreeTextLayout) _ANSI_ARGS_((Tk_TextLayout textLayout)); /* 76 */
+    void (*tk_FreeXId) _ANSI_ARGS_((Display * display, XID xid)); /* 77 */
+    GC (*tk_GCForColor) _ANSI_ARGS_((XColor * colorPtr, Drawable drawable)); /* 78 */
+    void (*tk_GeometryRequest) _ANSI_ARGS_((Tk_Window tkwin, int reqWidth, int reqHeight)); /* 79 */
+    Tk_3DBorder (*tk_Get3DBorder) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid colorName)); /* 80 */
+    void (*tk_GetAllBindings) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable, ClientData object)); /* 81 */
+    int (*tk_GetAnchor) _ANSI_ARGS_((Tcl_Interp * interp, char * str, Tk_Anchor * anchorPtr)); /* 82 */
+    char * (*tk_GetAtomName) _ANSI_ARGS_((Tk_Window tkwin, Atom atom)); /* 83 */
+    char * (*tk_GetBinding) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable, ClientData object, char * eventStr)); /* 84 */
+    Pixmap (*tk_GetBitmap) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, CONST char * str)); /* 85 */
+    Pixmap (*tk_GetBitmapFromData) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * source, int width, int height)); /* 86 */
+    int (*tk_GetCapStyle) _ANSI_ARGS_((Tcl_Interp * interp, char * str, int * capPtr)); /* 87 */
+    XColor * (*tk_GetColor) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid name)); /* 88 */
+    XColor * (*tk_GetColorByValue) _ANSI_ARGS_((Tk_Window tkwin, XColor * colorPtr)); /* 89 */
+    Colormap (*tk_GetColormap) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str)); /* 90 */
+    Tk_Cursor (*tk_GetCursor) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid str)); /* 91 */
+    Tk_Cursor (*tk_GetCursorFromData) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * source, char * mask, int width, int height, int xHot, int yHot, Tk_Uid fg, Tk_Uid bg)); /* 92 */
+    Tk_Font (*tk_GetFont) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, CONST char * str)); /* 93 */
+    Tk_Font (*tk_GetFontFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 94 */
+    void (*tk_GetFontMetrics) _ANSI_ARGS_((Tk_Font font, Tk_FontMetrics * fmPtr)); /* 95 */
+    GC (*tk_GetGC) _ANSI_ARGS_((Tk_Window tkwin, unsigned long valueMask, XGCValues * valuePtr)); /* 96 */
+    Tk_Image (*tk_GetImage) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * name, Tk_ImageChangedProc * changeProc, ClientData clientData)); /* 97 */
+    ClientData (*tk_GetImageMasterData) _ANSI_ARGS_((Tcl_Interp * interp, char * name, Tk_ImageType ** typePtrPtr)); /* 98 */
+    Tk_ItemType * (*tk_GetItemTypes) _ANSI_ARGS_((void)); /* 99 */
+    int (*tk_GetJoinStyle) _ANSI_ARGS_((Tcl_Interp * interp, char * str, int * joinPtr)); /* 100 */
+    int (*tk_GetJustify) _ANSI_ARGS_((Tcl_Interp * interp, char * str, Tk_Justify * justifyPtr)); /* 101 */
+    int (*tk_GetNumMainWindows) _ANSI_ARGS_((void)); /* 102 */
+    Tk_Uid (*tk_GetOption) _ANSI_ARGS_((Tk_Window tkwin, char * name, char * className)); /* 103 */
+    int (*tk_GetPixels) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, int * intPtr)); /* 104 */
+    Pixmap (*tk_GetPixmap) _ANSI_ARGS_((Display * display, Drawable d, int width, int height, int depth)); /* 105 */
+    int (*tk_GetRelief) _ANSI_ARGS_((Tcl_Interp * interp, char * name, int * reliefPtr)); /* 106 */
+    void (*tk_GetRootCoords) _ANSI_ARGS_((Tk_Window tkwin, int * xPtr, int * yPtr)); /* 107 */
+    int (*tk_GetScrollInfo) _ANSI_ARGS_((Tcl_Interp * interp, int argc, char ** argv, double * dblPtr, int * intPtr)); /* 108 */
+    int (*tk_GetScreenMM) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, double * doublePtr)); /* 109 */
+    int (*tk_GetSelection) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Atom selection, Atom target, Tk_GetSelProc * proc, ClientData clientData)); /* 110 */
+    Tk_Uid (*tk_GetUid) _ANSI_ARGS_((CONST char * str)); /* 111 */
+    Visual * (*tk_GetVisual) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, int * depthPtr, Colormap * colormapPtr)); /* 112 */
+    void (*tk_GetVRootGeometry) _ANSI_ARGS_((Tk_Window tkwin, int * xPtr, int * yPtr, int * widthPtr, int * heightPtr)); /* 113 */
+    int (*tk_Grab) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, int grabGlobal)); /* 114 */
+    void (*tk_HandleEvent) _ANSI_ARGS_((XEvent * eventPtr)); /* 115 */
+    Tk_Window (*tk_IdToWindow) _ANSI_ARGS_((Display * display, Window window)); /* 116 */
+    void (*tk_ImageChanged) _ANSI_ARGS_((Tk_ImageMaster master, int x, int y, int width, int height, int imageWidth, int imageHeight)); /* 117 */
+    int (*tk_Init) _ANSI_ARGS_((Tcl_Interp * interp)); /* 118 */
+    Atom (*tk_InternAtom) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 119 */
+    int (*tk_IntersectTextLayout) _ANSI_ARGS_((Tk_TextLayout layout, int x, int y, int width, int height)); /* 120 */
+    void (*tk_MaintainGeometry) _ANSI_ARGS_((Tk_Window slave, Tk_Window master, int x, int y, int width, int height)); /* 121 */
+    Tk_Window (*tk_MainWindow) _ANSI_ARGS_((Tcl_Interp * interp)); /* 122 */
+    void (*tk_MakeWindowExist) _ANSI_ARGS_((Tk_Window tkwin)); /* 123 */
+    void (*tk_ManageGeometry) _ANSI_ARGS_((Tk_Window tkwin, Tk_GeomMgr * mgrPtr, ClientData clientData)); /* 124 */
+    void (*tk_MapWindow) _ANSI_ARGS_((Tk_Window tkwin)); /* 125 */
+    int (*tk_MeasureChars) _ANSI_ARGS_((Tk_Font tkfont, CONST char * source, int numBytes, int maxPixels, int flags, int * lengthPtr)); /* 126 */
+    void (*tk_MoveResizeWindow) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height)); /* 127 */
+    void (*tk_MoveWindow) _ANSI_ARGS_((Tk_Window tkwin, int x, int y)); /* 128 */
+    void (*tk_MoveToplevelWindow) _ANSI_ARGS_((Tk_Window tkwin, int x, int y)); /* 129 */
+    char * (*tk_NameOf3DBorder) _ANSI_ARGS_((Tk_3DBorder border)); /* 130 */
+    char * (*tk_NameOfAnchor) _ANSI_ARGS_((Tk_Anchor anchor)); /* 131 */
+    char * (*tk_NameOfBitmap) _ANSI_ARGS_((Display * display, Pixmap bitmap)); /* 132 */
+    char * (*tk_NameOfCapStyle) _ANSI_ARGS_((int cap)); /* 133 */
+    char * (*tk_NameOfColor) _ANSI_ARGS_((XColor * colorPtr)); /* 134 */
+    char * (*tk_NameOfCursor) _ANSI_ARGS_((Display * display, Tk_Cursor cursor)); /* 135 */
+    char * (*tk_NameOfFont) _ANSI_ARGS_((Tk_Font font)); /* 136 */
+    char * (*tk_NameOfImage) _ANSI_ARGS_((Tk_ImageMaster imageMaster)); /* 137 */
+    char * (*tk_NameOfJoinStyle) _ANSI_ARGS_((int join)); /* 138 */
+    char * (*tk_NameOfJustify) _ANSI_ARGS_((Tk_Justify justify)); /* 139 */
+    char * (*tk_NameOfRelief) _ANSI_ARGS_((int relief)); /* 140 */
+    Tk_Window (*tk_NameToWindow) _ANSI_ARGS_((Tcl_Interp * interp, char * pathName, Tk_Window tkwin)); /* 141 */
+    void (*tk_OwnSelection) _ANSI_ARGS_((Tk_Window tkwin, Atom selection, Tk_LostSelProc * proc, ClientData clientData)); /* 142 */
+    int (*tk_ParseArgv) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, int * argcPtr, char ** argv, Tk_ArgvInfo * argTable, int flags)); /* 143 */
+    void (*tk_PhotoPutBlock) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr, int x, int y, int width, int height)); /* 144 */
+    void (*tk_PhotoPutZoomedBlock) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr, int x, int y, int width, int height, int zoomX, int zoomY, int subsampleX, int subsampleY)); /* 145 */
+    int (*tk_PhotoGetImage) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr)); /* 146 */
+    void (*tk_PhotoBlank) _ANSI_ARGS_((Tk_PhotoHandle handle)); /* 147 */
+    void (*tk_PhotoExpand) _ANSI_ARGS_((Tk_PhotoHandle handle, int width, int height)); /* 148 */
+    void (*tk_PhotoGetSize) _ANSI_ARGS_((Tk_PhotoHandle handle, int * widthPtr, int * heightPtr)); /* 149 */
+    void (*tk_PhotoSetSize) _ANSI_ARGS_((Tk_PhotoHandle handle, int width, int height)); /* 150 */
+    int (*tk_PointToChar) _ANSI_ARGS_((Tk_TextLayout layout, int x, int y)); /* 151 */
+    int (*tk_PostscriptFontName) _ANSI_ARGS_((Tk_Font tkfont, Tcl_DString * dsPtr)); /* 152 */
+    void (*tk_PreserveColormap) _ANSI_ARGS_((Display * display, Colormap colormap)); /* 153 */
+    void (*tk_QueueWindowEvent) _ANSI_ARGS_((XEvent * eventPtr, Tcl_QueuePosition position)); /* 154 */
+    void (*tk_RedrawImage) _ANSI_ARGS_((Tk_Image image, int imageX, int imageY, int width, int height, Drawable drawable, int drawableX, int drawableY)); /* 155 */
+    void (*tk_ResizeWindow) _ANSI_ARGS_((Tk_Window tkwin, int width, int height)); /* 156 */
+    int (*tk_RestackWindow) _ANSI_ARGS_((Tk_Window tkwin, int aboveBelow, Tk_Window other)); /* 157 */
+    Tk_RestrictProc * (*tk_RestrictEvents) _ANSI_ARGS_((Tk_RestrictProc * proc, ClientData arg, ClientData * prevArgPtr)); /* 158 */
+    int (*tk_SafeInit) _ANSI_ARGS_((Tcl_Interp * interp)); /* 159 */
+    char * (*tk_SetAppName) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 160 */
+    void (*tk_SetBackgroundFromBorder) _ANSI_ARGS_((Tk_Window tkwin, Tk_3DBorder border)); /* 161 */
+    void (*tk_SetClass) _ANSI_ARGS_((Tk_Window tkwin, char * className)); /* 162 */
+    void (*tk_SetGrid) _ANSI_ARGS_((Tk_Window tkwin, int reqWidth, int reqHeight, int gridWidth, int gridHeight)); /* 163 */
+    void (*tk_SetInternalBorder) _ANSI_ARGS_((Tk_Window tkwin, int width)); /* 164 */
+    void (*tk_SetWindowBackground) _ANSI_ARGS_((Tk_Window tkwin, unsigned long pixel)); /* 165 */
+    void (*tk_SetWindowBackgroundPixmap) _ANSI_ARGS_((Tk_Window tkwin, Pixmap pixmap)); /* 166 */
+    void (*tk_SetWindowBorder) _ANSI_ARGS_((Tk_Window tkwin, unsigned long pixel)); /* 167 */
+    void (*tk_SetWindowBorderWidth) _ANSI_ARGS_((Tk_Window tkwin, int width)); /* 168 */
+    void (*tk_SetWindowBorderPixmap) _ANSI_ARGS_((Tk_Window tkwin, Pixmap pixmap)); /* 169 */
+    void (*tk_SetWindowColormap) _ANSI_ARGS_((Tk_Window tkwin, Colormap colormap)); /* 170 */
+    int (*tk_SetWindowVisual) _ANSI_ARGS_((Tk_Window tkwin, Visual * visual, int depth, Colormap colormap)); /* 171 */
+    void (*tk_SizeOfBitmap) _ANSI_ARGS_((Display * display, Pixmap bitmap, int * widthPtr, int * heightPtr)); /* 172 */
+    void (*tk_SizeOfImage) _ANSI_ARGS_((Tk_Image image, int * widthPtr, int * heightPtr)); /* 173 */
+    int (*tk_StrictMotif) _ANSI_ARGS_((Tk_Window tkwin)); /* 174 */
+    void (*tk_TextLayoutToPostscript) _ANSI_ARGS_((Tcl_Interp * interp, Tk_TextLayout layout)); /* 175 */
+    int (*tk_TextWidth) _ANSI_ARGS_((Tk_Font font, CONST char * str, int numBytes)); /* 176 */
+    void (*tk_UndefineCursor) _ANSI_ARGS_((Tk_Window window)); /* 177 */
+    void (*tk_UnderlineChars) _ANSI_ARGS_((Display * display, Drawable drawable, GC gc, Tk_Font tkfont, CONST char * source, int x, int y, int firstByte, int lastByte)); /* 178 */
+    void (*tk_UnderlineTextLayout) _ANSI_ARGS_((Display * display, Drawable drawable, GC gc, Tk_TextLayout layout, int x, int y, int underline)); /* 179 */
+    void (*tk_Ungrab) _ANSI_ARGS_((Tk_Window tkwin)); /* 180 */
+    void (*tk_UnmaintainGeometry) _ANSI_ARGS_((Tk_Window slave, Tk_Window master)); /* 181 */
+    void (*tk_UnmapWindow) _ANSI_ARGS_((Tk_Window tkwin)); /* 182 */
+    void (*tk_UnsetGrid) _ANSI_ARGS_((Tk_Window tkwin)); /* 183 */
+    void (*tk_UpdatePointer) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int state)); /* 184 */
+    Pixmap (*tk_AllocBitmapFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr)); /* 185 */
+    Tk_3DBorder (*tk_Alloc3DBorderFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr)); /* 186 */
+    XColor * (*tk_AllocColorFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr)); /* 187 */
+    Tk_Cursor (*tk_AllocCursorFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr)); /* 188 */
+    Tk_Font (*tk_AllocFontFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr)); /* 189 */
+    Tk_OptionTable (*tk_CreateOptionTable) _ANSI_ARGS_((Tcl_Interp * interp, CONST Tk_OptionSpec * templatePtr)); /* 190 */
+    void (*tk_DeleteOptionTable) _ANSI_ARGS_((Tk_OptionTable optionTable)); /* 191 */
+    void (*tk_Free3DBorderFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 192 */
+    void (*tk_FreeBitmapFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 193 */
+    void (*tk_FreeColorFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 194 */
+    void (*tk_FreeConfigOptions) _ANSI_ARGS_((char * recordPtr, Tk_OptionTable optionToken, Tk_Window tkwin)); /* 195 */
+    void (*tk_FreeSavedOptions) _ANSI_ARGS_((Tk_SavedOptions * savePtr)); /* 196 */
+    void (*tk_FreeCursorFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 197 */
+    void (*tk_FreeFontFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 198 */
+    Tk_3DBorder (*tk_Get3DBorderFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 199 */
+    int (*tk_GetAnchorFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * objPtr, Tk_Anchor * anchorPtr)); /* 200 */
+    Pixmap (*tk_GetBitmapFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 201 */
+    XColor * (*tk_GetColorFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 202 */
+    Tk_Cursor (*tk_GetCursorFromObj) _ANSI_ARGS_((Tk_Window tkwin, Tcl_Obj * objPtr)); /* 203 */
+    Tcl_Obj * (*tk_GetOptionInfo) _ANSI_ARGS_((Tcl_Interp * interp, char * recordPtr, Tk_OptionTable optionTable, Tcl_Obj * namePtr, Tk_Window tkwin)); /* 204 */
+    Tcl_Obj * (*tk_GetOptionValue) _ANSI_ARGS_((Tcl_Interp * interp, char * recordPtr, Tk_OptionTable optionTable, Tcl_Obj * namePtr, Tk_Window tkwin)); /* 205 */
+    int (*tk_GetJustifyFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * objPtr, Tk_Justify * justifyPtr)); /* 206 */
+    int (*tk_GetMMFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr, double * doublePtr)); /* 207 */
+    int (*tk_GetPixelsFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr, int * intPtr)); /* 208 */
+    int (*tk_GetReliefFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * objPtr, int * resultPtr)); /* 209 */
+    int (*tk_GetScrollInfoObj) _ANSI_ARGS_((Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[], double * dblPtr, int * intPtr)); /* 210 */
+    int (*tk_InitOptions) _ANSI_ARGS_((Tcl_Interp * interp, char * recordPtr, Tk_OptionTable optionToken, Tk_Window tkwin)); /* 211 */
+    void (*tk_MainEx) _ANSI_ARGS_((int argc, char ** argv, Tcl_AppInitProc * appInitProc, Tcl_Interp * interp)); /* 212 */
+    void (*tk_RestoreSavedOptions) _ANSI_ARGS_((Tk_SavedOptions * savePtr)); /* 213 */
+    int (*tk_SetOptions) _ANSI_ARGS_((Tcl_Interp * interp, char * recordPtr, Tk_OptionTable optionTable, int objc, Tcl_Obj *CONST objv[], Tk_Window tkwin, Tk_SavedOptions * savePtr, int * maskPtr)); /* 214 */
+    void (*tk_InitConsoleChannels) _ANSI_ARGS_((Tcl_Interp * interp)); /* 215 */
+    int (*tk_CreateConsoleWindow) _ANSI_ARGS_((Tcl_Interp * interp)); /* 216 */
+    void (*tk_CreateSmoothMethod) _ANSI_ARGS_((Tcl_Interp * interp, Tk_SmoothMethod * method)); /* 217 */
+    void *reserved218;
+    void *reserved219;
+    int (*tk_GetDash) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * value, Tk_Dash * dash)); /* 220 */
+    void (*tk_CreateOutline) _ANSI_ARGS_((Tk_Outline * outline)); /* 221 */
+    void (*tk_DeleteOutline) _ANSI_ARGS_((Display * display, Tk_Outline * outline)); /* 222 */
+    int (*tk_ConfigOutlineGC) _ANSI_ARGS_((XGCValues * gcValues, Tk_Canvas canvas, Tk_Item * item, Tk_Outline * outline)); /* 223 */
+    int (*tk_ChangeOutlineGC) _ANSI_ARGS_((Tk_Canvas canvas, Tk_Item * item, Tk_Outline * outline)); /* 224 */
+    int (*tk_ResetOutlineGC) _ANSI_ARGS_((Tk_Canvas canvas, Tk_Item * item, Tk_Outline * outline)); /* 225 */
+    int (*tk_CanvasPsOutline) _ANSI_ARGS_((Tk_Canvas canvas, Tk_Item * item, Tk_Outline * outline)); /* 226 */
+    void (*tk_SetTSOrigin) _ANSI_ARGS_((Tk_Window tkwin, GC gc, int x, int y)); /* 227 */
+    int (*tk_CanvasGetCoordFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, Tcl_Obj * obj, double * doublePtr)); /* 228 */
+    void (*tk_CanvasSetOffset) _ANSI_ARGS_((Tk_Canvas canvas, GC gc, Tk_TSOffset * offset)); /* 229 */
+    void (*tk_DitherPhoto) _ANSI_ARGS_((Tk_PhotoHandle handle, int x, int y, int width, int height)); /* 230 */
+    int (*tk_PostscriptBitmap) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_PostscriptInfo psInfo, Pixmap bitmap, int startX, int startY, int width, int height)); /* 231 */
+    int (*tk_PostscriptColor) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PostscriptInfo psInfo, XColor * colorPtr)); /* 232 */
+    int (*tk_PostscriptFont) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PostscriptInfo psInfo, Tk_Font font)); /* 233 */
+    int (*tk_PostscriptImage) _ANSI_ARGS_((Tk_Image image, Tcl_Interp * interp, Tk_Window tkwin, Tk_PostscriptInfo psinfo, int x, int y, int width, int height, int prepass)); /* 234 */
+    void (*tk_PostscriptPath) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PostscriptInfo psInfo, double * coordPtr, int numPoints)); /* 235 */
+    int (*tk_PostscriptStipple) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_PostscriptInfo psInfo, Pixmap bitmap)); /* 236 */
+    double (*tk_PostscriptY) _ANSI_ARGS_((double y, Tk_PostscriptInfo psInfo)); /* 237 */
+    int (*tk_PostscriptPhoto) _ANSI_ARGS_((Tcl_Interp * interp, Tk_PhotoImageBlock * blockPtr, Tk_PostscriptInfo psInfo, int width, int height)); /* 238 */
+} TkStubs;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern TkStubs *tkStubsPtr;
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS)
+
+/*
+ * Inline function declarations:
+ */
+
+#ifndef Tk_MainLoop
+#define Tk_MainLoop \
+       (tkStubsPtr->tk_MainLoop) /* 0 */
+#endif
+#ifndef Tk_3DBorderColor
+#define Tk_3DBorderColor \
+       (tkStubsPtr->tk_3DBorderColor) /* 1 */
+#endif
+#ifndef Tk_3DBorderGC
+#define Tk_3DBorderGC \
+       (tkStubsPtr->tk_3DBorderGC) /* 2 */
+#endif
+#ifndef Tk_3DHorizontalBevel
+#define Tk_3DHorizontalBevel \
+       (tkStubsPtr->tk_3DHorizontalBevel) /* 3 */
+#endif
+#ifndef Tk_3DVerticalBevel
+#define Tk_3DVerticalBevel \
+       (tkStubsPtr->tk_3DVerticalBevel) /* 4 */
+#endif
+#ifndef Tk_AddOption
+#define Tk_AddOption \
+       (tkStubsPtr->tk_AddOption) /* 5 */
+#endif
+#ifndef Tk_BindEvent
+#define Tk_BindEvent \
+       (tkStubsPtr->tk_BindEvent) /* 6 */
+#endif
+#ifndef Tk_CanvasDrawableCoords
+#define Tk_CanvasDrawableCoords \
+       (tkStubsPtr->tk_CanvasDrawableCoords) /* 7 */
+#endif
+#ifndef Tk_CanvasEventuallyRedraw
+#define Tk_CanvasEventuallyRedraw \
+       (tkStubsPtr->tk_CanvasEventuallyRedraw) /* 8 */
+#endif
+#ifndef Tk_CanvasGetCoord
+#define Tk_CanvasGetCoord \
+       (tkStubsPtr->tk_CanvasGetCoord) /* 9 */
+#endif
+#ifndef Tk_CanvasGetTextInfo
+#define Tk_CanvasGetTextInfo \
+       (tkStubsPtr->tk_CanvasGetTextInfo) /* 10 */
+#endif
+#ifndef Tk_CanvasPsBitmap
+#define Tk_CanvasPsBitmap \
+       (tkStubsPtr->tk_CanvasPsBitmap) /* 11 */
+#endif
+#ifndef Tk_CanvasPsColor
+#define Tk_CanvasPsColor \
+       (tkStubsPtr->tk_CanvasPsColor) /* 12 */
+#endif
+#ifndef Tk_CanvasPsFont
+#define Tk_CanvasPsFont \
+       (tkStubsPtr->tk_CanvasPsFont) /* 13 */
+#endif
+#ifndef Tk_CanvasPsPath
+#define Tk_CanvasPsPath \
+       (tkStubsPtr->tk_CanvasPsPath) /* 14 */
+#endif
+#ifndef Tk_CanvasPsStipple
+#define Tk_CanvasPsStipple \
+       (tkStubsPtr->tk_CanvasPsStipple) /* 15 */
+#endif
+#ifndef Tk_CanvasPsY
+#define Tk_CanvasPsY \
+       (tkStubsPtr->tk_CanvasPsY) /* 16 */
+#endif
+#ifndef Tk_CanvasSetStippleOrigin
+#define Tk_CanvasSetStippleOrigin \
+       (tkStubsPtr->tk_CanvasSetStippleOrigin) /* 17 */
+#endif
+#ifndef Tk_CanvasTagsParseProc
+#define Tk_CanvasTagsParseProc \
+       (tkStubsPtr->tk_CanvasTagsParseProc) /* 18 */
+#endif
+#ifndef Tk_CanvasTagsPrintProc
+#define Tk_CanvasTagsPrintProc \
+       (tkStubsPtr->tk_CanvasTagsPrintProc) /* 19 */
+#endif
+#ifndef Tk_CanvasTkwin
+#define Tk_CanvasTkwin \
+       (tkStubsPtr->tk_CanvasTkwin) /* 20 */
+#endif
+#ifndef Tk_CanvasWindowCoords
+#define Tk_CanvasWindowCoords \
+       (tkStubsPtr->tk_CanvasWindowCoords) /* 21 */
+#endif
+#ifndef Tk_ChangeWindowAttributes
+#define Tk_ChangeWindowAttributes \
+       (tkStubsPtr->tk_ChangeWindowAttributes) /* 22 */
+#endif
+#ifndef Tk_CharBbox
+#define Tk_CharBbox \
+       (tkStubsPtr->tk_CharBbox) /* 23 */
+#endif
+#ifndef Tk_ClearSelection
+#define Tk_ClearSelection \
+       (tkStubsPtr->tk_ClearSelection) /* 24 */
+#endif
+#ifndef Tk_ClipboardAppend
+#define Tk_ClipboardAppend \
+       (tkStubsPtr->tk_ClipboardAppend) /* 25 */
+#endif
+#ifndef Tk_ClipboardClear
+#define Tk_ClipboardClear \
+       (tkStubsPtr->tk_ClipboardClear) /* 26 */
+#endif
+#ifndef Tk_ConfigureInfo
+#define Tk_ConfigureInfo \
+       (tkStubsPtr->tk_ConfigureInfo) /* 27 */
+#endif
+#ifndef Tk_ConfigureValue
+#define Tk_ConfigureValue \
+       (tkStubsPtr->tk_ConfigureValue) /* 28 */
+#endif
+#ifndef Tk_ConfigureWidget
+#define Tk_ConfigureWidget \
+       (tkStubsPtr->tk_ConfigureWidget) /* 29 */
+#endif
+#ifndef Tk_ConfigureWindow
+#define Tk_ConfigureWindow \
+       (tkStubsPtr->tk_ConfigureWindow) /* 30 */
+#endif
+#ifndef Tk_ComputeTextLayout
+#define Tk_ComputeTextLayout \
+       (tkStubsPtr->tk_ComputeTextLayout) /* 31 */
+#endif
+#ifndef Tk_CoordsToWindow
+#define Tk_CoordsToWindow \
+       (tkStubsPtr->tk_CoordsToWindow) /* 32 */
+#endif
+#ifndef Tk_CreateBinding
+#define Tk_CreateBinding \
+       (tkStubsPtr->tk_CreateBinding) /* 33 */
+#endif
+#ifndef Tk_CreateBindingTable
+#define Tk_CreateBindingTable \
+       (tkStubsPtr->tk_CreateBindingTable) /* 34 */
+#endif
+#ifndef Tk_CreateErrorHandler
+#define Tk_CreateErrorHandler \
+       (tkStubsPtr->tk_CreateErrorHandler) /* 35 */
+#endif
+#ifndef Tk_CreateEventHandler
+#define Tk_CreateEventHandler \
+       (tkStubsPtr->tk_CreateEventHandler) /* 36 */
+#endif
+#ifndef Tk_CreateGenericHandler
+#define Tk_CreateGenericHandler \
+       (tkStubsPtr->tk_CreateGenericHandler) /* 37 */
+#endif
+#ifndef Tk_CreateImageType
+#define Tk_CreateImageType \
+       (tkStubsPtr->tk_CreateImageType) /* 38 */
+#endif
+#ifndef Tk_CreateItemType
+#define Tk_CreateItemType \
+       (tkStubsPtr->tk_CreateItemType) /* 39 */
+#endif
+#ifndef Tk_CreatePhotoImageFormat
+#define Tk_CreatePhotoImageFormat \
+       (tkStubsPtr->tk_CreatePhotoImageFormat) /* 40 */
+#endif
+#ifndef Tk_CreateSelHandler
+#define Tk_CreateSelHandler \
+       (tkStubsPtr->tk_CreateSelHandler) /* 41 */
+#endif
+#ifndef Tk_CreateWindow
+#define Tk_CreateWindow \
+       (tkStubsPtr->tk_CreateWindow) /* 42 */
+#endif
+#ifndef Tk_CreateWindowFromPath
+#define Tk_CreateWindowFromPath \
+       (tkStubsPtr->tk_CreateWindowFromPath) /* 43 */
+#endif
+#ifndef Tk_DefineBitmap
+#define Tk_DefineBitmap \
+       (tkStubsPtr->tk_DefineBitmap) /* 44 */
+#endif
+#ifndef Tk_DefineCursor
+#define Tk_DefineCursor \
+       (tkStubsPtr->tk_DefineCursor) /* 45 */
+#endif
+#ifndef Tk_DeleteAllBindings
+#define Tk_DeleteAllBindings \
+       (tkStubsPtr->tk_DeleteAllBindings) /* 46 */
+#endif
+#ifndef Tk_DeleteBinding
+#define Tk_DeleteBinding \
+       (tkStubsPtr->tk_DeleteBinding) /* 47 */
+#endif
+#ifndef Tk_DeleteBindingTable
+#define Tk_DeleteBindingTable \
+       (tkStubsPtr->tk_DeleteBindingTable) /* 48 */
+#endif
+#ifndef Tk_DeleteErrorHandler
+#define Tk_DeleteErrorHandler \
+       (tkStubsPtr->tk_DeleteErrorHandler) /* 49 */
+#endif
+#ifndef Tk_DeleteEventHandler
+#define Tk_DeleteEventHandler \
+       (tkStubsPtr->tk_DeleteEventHandler) /* 50 */
+#endif
+#ifndef Tk_DeleteGenericHandler
+#define Tk_DeleteGenericHandler \
+       (tkStubsPtr->tk_DeleteGenericHandler) /* 51 */
+#endif
+#ifndef Tk_DeleteImage
+#define Tk_DeleteImage \
+       (tkStubsPtr->tk_DeleteImage) /* 52 */
+#endif
+#ifndef Tk_DeleteSelHandler
+#define Tk_DeleteSelHandler \
+       (tkStubsPtr->tk_DeleteSelHandler) /* 53 */
+#endif
+#ifndef Tk_DestroyWindow
+#define Tk_DestroyWindow \
+       (tkStubsPtr->tk_DestroyWindow) /* 54 */
+#endif
+#ifndef Tk_DisplayName
+#define Tk_DisplayName \
+       (tkStubsPtr->tk_DisplayName) /* 55 */
+#endif
+#ifndef Tk_DistanceToTextLayout
+#define Tk_DistanceToTextLayout \
+       (tkStubsPtr->tk_DistanceToTextLayout) /* 56 */
+#endif
+#ifndef Tk_Draw3DPolygon
+#define Tk_Draw3DPolygon \
+       (tkStubsPtr->tk_Draw3DPolygon) /* 57 */
+#endif
+#ifndef Tk_Draw3DRectangle
+#define Tk_Draw3DRectangle \
+       (tkStubsPtr->tk_Draw3DRectangle) /* 58 */
+#endif
+#ifndef Tk_DrawChars
+#define Tk_DrawChars \
+       (tkStubsPtr->tk_DrawChars) /* 59 */
+#endif
+#ifndef Tk_DrawFocusHighlight
+#define Tk_DrawFocusHighlight \
+       (tkStubsPtr->tk_DrawFocusHighlight) /* 60 */
+#endif
+#ifndef Tk_DrawTextLayout
+#define Tk_DrawTextLayout \
+       (tkStubsPtr->tk_DrawTextLayout) /* 61 */
+#endif
+#ifndef Tk_Fill3DPolygon
+#define Tk_Fill3DPolygon \
+       (tkStubsPtr->tk_Fill3DPolygon) /* 62 */
+#endif
+#ifndef Tk_Fill3DRectangle
+#define Tk_Fill3DRectangle \
+       (tkStubsPtr->tk_Fill3DRectangle) /* 63 */
+#endif
+#ifndef Tk_FindPhoto
+#define Tk_FindPhoto \
+       (tkStubsPtr->tk_FindPhoto) /* 64 */
+#endif
+#ifndef Tk_FontId
+#define Tk_FontId \
+       (tkStubsPtr->tk_FontId) /* 65 */
+#endif
+#ifndef Tk_Free3DBorder
+#define Tk_Free3DBorder \
+       (tkStubsPtr->tk_Free3DBorder) /* 66 */
+#endif
+#ifndef Tk_FreeBitmap
+#define Tk_FreeBitmap \
+       (tkStubsPtr->tk_FreeBitmap) /* 67 */
+#endif
+#ifndef Tk_FreeColor
+#define Tk_FreeColor \
+       (tkStubsPtr->tk_FreeColor) /* 68 */
+#endif
+#ifndef Tk_FreeColormap
+#define Tk_FreeColormap \
+       (tkStubsPtr->tk_FreeColormap) /* 69 */
+#endif
+#ifndef Tk_FreeCursor
+#define Tk_FreeCursor \
+       (tkStubsPtr->tk_FreeCursor) /* 70 */
+#endif
+#ifndef Tk_FreeFont
+#define Tk_FreeFont \
+       (tkStubsPtr->tk_FreeFont) /* 71 */
+#endif
+#ifndef Tk_FreeGC
+#define Tk_FreeGC \
+       (tkStubsPtr->tk_FreeGC) /* 72 */
+#endif
+#ifndef Tk_FreeImage
+#define Tk_FreeImage \
+       (tkStubsPtr->tk_FreeImage) /* 73 */
+#endif
+#ifndef Tk_FreeOptions
+#define Tk_FreeOptions \
+       (tkStubsPtr->tk_FreeOptions) /* 74 */
+#endif
+#ifndef Tk_FreePixmap
+#define Tk_FreePixmap \
+       (tkStubsPtr->tk_FreePixmap) /* 75 */
+#endif
+#ifndef Tk_FreeTextLayout
+#define Tk_FreeTextLayout \
+       (tkStubsPtr->tk_FreeTextLayout) /* 76 */
+#endif
+#ifndef Tk_FreeXId
+#define Tk_FreeXId \
+       (tkStubsPtr->tk_FreeXId) /* 77 */
+#endif
+#ifndef Tk_GCForColor
+#define Tk_GCForColor \
+       (tkStubsPtr->tk_GCForColor) /* 78 */
+#endif
+#ifndef Tk_GeometryRequest
+#define Tk_GeometryRequest \
+       (tkStubsPtr->tk_GeometryRequest) /* 79 */
+#endif
+#ifndef Tk_Get3DBorder
+#define Tk_Get3DBorder \
+       (tkStubsPtr->tk_Get3DBorder) /* 80 */
+#endif
+#ifndef Tk_GetAllBindings
+#define Tk_GetAllBindings \
+       (tkStubsPtr->tk_GetAllBindings) /* 81 */
+#endif
+#ifndef Tk_GetAnchor
+#define Tk_GetAnchor \
+       (tkStubsPtr->tk_GetAnchor) /* 82 */
+#endif
+#ifndef Tk_GetAtomName
+#define Tk_GetAtomName \
+       (tkStubsPtr->tk_GetAtomName) /* 83 */
+#endif
+#ifndef Tk_GetBinding
+#define Tk_GetBinding \
+       (tkStubsPtr->tk_GetBinding) /* 84 */
+#endif
+#ifndef Tk_GetBitmap
+#define Tk_GetBitmap \
+       (tkStubsPtr->tk_GetBitmap) /* 85 */
+#endif
+#ifndef Tk_GetBitmapFromData
+#define Tk_GetBitmapFromData \
+       (tkStubsPtr->tk_GetBitmapFromData) /* 86 */
+#endif
+#ifndef Tk_GetCapStyle
+#define Tk_GetCapStyle \
+       (tkStubsPtr->tk_GetCapStyle) /* 87 */
+#endif
+#ifndef Tk_GetColor
+#define Tk_GetColor \
+       (tkStubsPtr->tk_GetColor) /* 88 */
+#endif
+#ifndef Tk_GetColorByValue
+#define Tk_GetColorByValue \
+       (tkStubsPtr->tk_GetColorByValue) /* 89 */
+#endif
+#ifndef Tk_GetColormap
+#define Tk_GetColormap \
+       (tkStubsPtr->tk_GetColormap) /* 90 */
+#endif
+#ifndef Tk_GetCursor
+#define Tk_GetCursor \
+       (tkStubsPtr->tk_GetCursor) /* 91 */
+#endif
+#ifndef Tk_GetCursorFromData
+#define Tk_GetCursorFromData \
+       (tkStubsPtr->tk_GetCursorFromData) /* 92 */
+#endif
+#ifndef Tk_GetFont
+#define Tk_GetFont \
+       (tkStubsPtr->tk_GetFont) /* 93 */
+#endif
+#ifndef Tk_GetFontFromObj
+#define Tk_GetFontFromObj \
+       (tkStubsPtr->tk_GetFontFromObj) /* 94 */
+#endif
+#ifndef Tk_GetFontMetrics
+#define Tk_GetFontMetrics \
+       (tkStubsPtr->tk_GetFontMetrics) /* 95 */
+#endif
+#ifndef Tk_GetGC
+#define Tk_GetGC \
+       (tkStubsPtr->tk_GetGC) /* 96 */
+#endif
+#ifndef Tk_GetImage
+#define Tk_GetImage \
+       (tkStubsPtr->tk_GetImage) /* 97 */
+#endif
+#ifndef Tk_GetImageMasterData
+#define Tk_GetImageMasterData \
+       (tkStubsPtr->tk_GetImageMasterData) /* 98 */
+#endif
+#ifndef Tk_GetItemTypes
+#define Tk_GetItemTypes \
+       (tkStubsPtr->tk_GetItemTypes) /* 99 */
+#endif
+#ifndef Tk_GetJoinStyle
+#define Tk_GetJoinStyle \
+       (tkStubsPtr->tk_GetJoinStyle) /* 100 */
+#endif
+#ifndef Tk_GetJustify
+#define Tk_GetJustify \
+       (tkStubsPtr->tk_GetJustify) /* 101 */
+#endif
+#ifndef Tk_GetNumMainWindows
+#define Tk_GetNumMainWindows \
+       (tkStubsPtr->tk_GetNumMainWindows) /* 102 */
+#endif
+#ifndef Tk_GetOption
+#define Tk_GetOption \
+       (tkStubsPtr->tk_GetOption) /* 103 */
+#endif
+#ifndef Tk_GetPixels
+#define Tk_GetPixels \
+       (tkStubsPtr->tk_GetPixels) /* 104 */
+#endif
+#ifndef Tk_GetPixmap
+#define Tk_GetPixmap \
+       (tkStubsPtr->tk_GetPixmap) /* 105 */
+#endif
+#ifndef Tk_GetRelief
+#define Tk_GetRelief \
+       (tkStubsPtr->tk_GetRelief) /* 106 */
+#endif
+#ifndef Tk_GetRootCoords
+#define Tk_GetRootCoords \
+       (tkStubsPtr->tk_GetRootCoords) /* 107 */
+#endif
+#ifndef Tk_GetScrollInfo
+#define Tk_GetScrollInfo \
+       (tkStubsPtr->tk_GetScrollInfo) /* 108 */
+#endif
+#ifndef Tk_GetScreenMM
+#define Tk_GetScreenMM \
+       (tkStubsPtr->tk_GetScreenMM) /* 109 */
+#endif
+#ifndef Tk_GetSelection
+#define Tk_GetSelection \
+       (tkStubsPtr->tk_GetSelection) /* 110 */
+#endif
+#ifndef Tk_GetUid
+#define Tk_GetUid \
+       (tkStubsPtr->tk_GetUid) /* 111 */
+#endif
+#ifndef Tk_GetVisual
+#define Tk_GetVisual \
+       (tkStubsPtr->tk_GetVisual) /* 112 */
+#endif
+#ifndef Tk_GetVRootGeometry
+#define Tk_GetVRootGeometry \
+       (tkStubsPtr->tk_GetVRootGeometry) /* 113 */
+#endif
+#ifndef Tk_Grab
+#define Tk_Grab \
+       (tkStubsPtr->tk_Grab) /* 114 */
+#endif
+#ifndef Tk_HandleEvent
+#define Tk_HandleEvent \
+       (tkStubsPtr->tk_HandleEvent) /* 115 */
+#endif
+#ifndef Tk_IdToWindow
+#define Tk_IdToWindow \
+       (tkStubsPtr->tk_IdToWindow) /* 116 */
+#endif
+#ifndef Tk_ImageChanged
+#define Tk_ImageChanged \
+       (tkStubsPtr->tk_ImageChanged) /* 117 */
+#endif
+#ifndef Tk_Init
+#define Tk_Init \
+       (tkStubsPtr->tk_Init) /* 118 */
+#endif
+#ifndef Tk_InternAtom
+#define Tk_InternAtom \
+       (tkStubsPtr->tk_InternAtom) /* 119 */
+#endif
+#ifndef Tk_IntersectTextLayout
+#define Tk_IntersectTextLayout \
+       (tkStubsPtr->tk_IntersectTextLayout) /* 120 */
+#endif
+#ifndef Tk_MaintainGeometry
+#define Tk_MaintainGeometry \
+       (tkStubsPtr->tk_MaintainGeometry) /* 121 */
+#endif
+#ifndef Tk_MainWindow
+#define Tk_MainWindow \
+       (tkStubsPtr->tk_MainWindow) /* 122 */
+#endif
+#ifndef Tk_MakeWindowExist
+#define Tk_MakeWindowExist \
+       (tkStubsPtr->tk_MakeWindowExist) /* 123 */
+#endif
+#ifndef Tk_ManageGeometry
+#define Tk_ManageGeometry \
+       (tkStubsPtr->tk_ManageGeometry) /* 124 */
+#endif
+#ifndef Tk_MapWindow
+#define Tk_MapWindow \
+       (tkStubsPtr->tk_MapWindow) /* 125 */
+#endif
+#ifndef Tk_MeasureChars
+#define Tk_MeasureChars \
+       (tkStubsPtr->tk_MeasureChars) /* 126 */
+#endif
+#ifndef Tk_MoveResizeWindow
+#define Tk_MoveResizeWindow \
+       (tkStubsPtr->tk_MoveResizeWindow) /* 127 */
+#endif
+#ifndef Tk_MoveWindow
+#define Tk_MoveWindow \
+       (tkStubsPtr->tk_MoveWindow) /* 128 */
+#endif
+#ifndef Tk_MoveToplevelWindow
+#define Tk_MoveToplevelWindow \
+       (tkStubsPtr->tk_MoveToplevelWindow) /* 129 */
+#endif
+#ifndef Tk_NameOf3DBorder
+#define Tk_NameOf3DBorder \
+       (tkStubsPtr->tk_NameOf3DBorder) /* 130 */
+#endif
+#ifndef Tk_NameOfAnchor
+#define Tk_NameOfAnchor \
+       (tkStubsPtr->tk_NameOfAnchor) /* 131 */
+#endif
+#ifndef Tk_NameOfBitmap
+#define Tk_NameOfBitmap \
+       (tkStubsPtr->tk_NameOfBitmap) /* 132 */
+#endif
+#ifndef Tk_NameOfCapStyle
+#define Tk_NameOfCapStyle \
+       (tkStubsPtr->tk_NameOfCapStyle) /* 133 */
+#endif
+#ifndef Tk_NameOfColor
+#define Tk_NameOfColor \
+       (tkStubsPtr->tk_NameOfColor) /* 134 */
+#endif
+#ifndef Tk_NameOfCursor
+#define Tk_NameOfCursor \
+       (tkStubsPtr->tk_NameOfCursor) /* 135 */
+#endif
+#ifndef Tk_NameOfFont
+#define Tk_NameOfFont \
+       (tkStubsPtr->tk_NameOfFont) /* 136 */
+#endif
+#ifndef Tk_NameOfImage
+#define Tk_NameOfImage \
+       (tkStubsPtr->tk_NameOfImage) /* 137 */
+#endif
+#ifndef Tk_NameOfJoinStyle
+#define Tk_NameOfJoinStyle \
+       (tkStubsPtr->tk_NameOfJoinStyle) /* 138 */
+#endif
+#ifndef Tk_NameOfJustify
+#define Tk_NameOfJustify \
+       (tkStubsPtr->tk_NameOfJustify) /* 139 */
+#endif
+#ifndef Tk_NameOfRelief
+#define Tk_NameOfRelief \
+       (tkStubsPtr->tk_NameOfRelief) /* 140 */
+#endif
+#ifndef Tk_NameToWindow
+#define Tk_NameToWindow \
+       (tkStubsPtr->tk_NameToWindow) /* 141 */
+#endif
+#ifndef Tk_OwnSelection
+#define Tk_OwnSelection \
+       (tkStubsPtr->tk_OwnSelection) /* 142 */
+#endif
+#ifndef Tk_ParseArgv
+#define Tk_ParseArgv \
+       (tkStubsPtr->tk_ParseArgv) /* 143 */
+#endif
+#ifndef Tk_PhotoPutBlock
+#define Tk_PhotoPutBlock \
+       (tkStubsPtr->tk_PhotoPutBlock) /* 144 */
+#endif
+#ifndef Tk_PhotoPutZoomedBlock
+#define Tk_PhotoPutZoomedBlock \
+       (tkStubsPtr->tk_PhotoPutZoomedBlock) /* 145 */
+#endif
+#ifndef Tk_PhotoGetImage
+#define Tk_PhotoGetImage \
+       (tkStubsPtr->tk_PhotoGetImage) /* 146 */
+#endif
+#ifndef Tk_PhotoBlank
+#define Tk_PhotoBlank \
+       (tkStubsPtr->tk_PhotoBlank) /* 147 */
+#endif
+#ifndef Tk_PhotoExpand
+#define Tk_PhotoExpand \
+       (tkStubsPtr->tk_PhotoExpand) /* 148 */
+#endif
+#ifndef Tk_PhotoGetSize
+#define Tk_PhotoGetSize \
+       (tkStubsPtr->tk_PhotoGetSize) /* 149 */
+#endif
+#ifndef Tk_PhotoSetSize
+#define Tk_PhotoSetSize \
+       (tkStubsPtr->tk_PhotoSetSize) /* 150 */
+#endif
+#ifndef Tk_PointToChar
+#define Tk_PointToChar \
+       (tkStubsPtr->tk_PointToChar) /* 151 */
+#endif
+#ifndef Tk_PostscriptFontName
+#define Tk_PostscriptFontName \
+       (tkStubsPtr->tk_PostscriptFontName) /* 152 */
+#endif
+#ifndef Tk_PreserveColormap
+#define Tk_PreserveColormap \
+       (tkStubsPtr->tk_PreserveColormap) /* 153 */
+#endif
+#ifndef Tk_QueueWindowEvent
+#define Tk_QueueWindowEvent \
+       (tkStubsPtr->tk_QueueWindowEvent) /* 154 */
+#endif
+#ifndef Tk_RedrawImage
+#define Tk_RedrawImage \
+       (tkStubsPtr->tk_RedrawImage) /* 155 */
+#endif
+#ifndef Tk_ResizeWindow
+#define Tk_ResizeWindow \
+       (tkStubsPtr->tk_ResizeWindow) /* 156 */
+#endif
+#ifndef Tk_RestackWindow
+#define Tk_RestackWindow \
+       (tkStubsPtr->tk_RestackWindow) /* 157 */
+#endif
+#ifndef Tk_RestrictEvents
+#define Tk_RestrictEvents \
+       (tkStubsPtr->tk_RestrictEvents) /* 158 */
+#endif
+#ifndef Tk_SafeInit
+#define Tk_SafeInit \
+       (tkStubsPtr->tk_SafeInit) /* 159 */
+#endif
+#ifndef Tk_SetAppName
+#define Tk_SetAppName \
+       (tkStubsPtr->tk_SetAppName) /* 160 */
+#endif
+#ifndef Tk_SetBackgroundFromBorder
+#define Tk_SetBackgroundFromBorder \
+       (tkStubsPtr->tk_SetBackgroundFromBorder) /* 161 */
+#endif
+#ifndef Tk_SetClass
+#define Tk_SetClass \
+       (tkStubsPtr->tk_SetClass) /* 162 */
+#endif
+#ifndef Tk_SetGrid
+#define Tk_SetGrid \
+       (tkStubsPtr->tk_SetGrid) /* 163 */
+#endif
+#ifndef Tk_SetInternalBorder
+#define Tk_SetInternalBorder \
+       (tkStubsPtr->tk_SetInternalBorder) /* 164 */
+#endif
+#ifndef Tk_SetWindowBackground
+#define Tk_SetWindowBackground \
+       (tkStubsPtr->tk_SetWindowBackground) /* 165 */
+#endif
+#ifndef Tk_SetWindowBackgroundPixmap
+#define Tk_SetWindowBackgroundPixmap \
+       (tkStubsPtr->tk_SetWindowBackgroundPixmap) /* 166 */
+#endif
+#ifndef Tk_SetWindowBorder
+#define Tk_SetWindowBorder \
+       (tkStubsPtr->tk_SetWindowBorder) /* 167 */
+#endif
+#ifndef Tk_SetWindowBorderWidth
+#define Tk_SetWindowBorderWidth \
+       (tkStubsPtr->tk_SetWindowBorderWidth) /* 168 */
+#endif
+#ifndef Tk_SetWindowBorderPixmap
+#define Tk_SetWindowBorderPixmap \
+       (tkStubsPtr->tk_SetWindowBorderPixmap) /* 169 */
+#endif
+#ifndef Tk_SetWindowColormap
+#define Tk_SetWindowColormap \
+       (tkStubsPtr->tk_SetWindowColormap) /* 170 */
+#endif
+#ifndef Tk_SetWindowVisual
+#define Tk_SetWindowVisual \
+       (tkStubsPtr->tk_SetWindowVisual) /* 171 */
+#endif
+#ifndef Tk_SizeOfBitmap
+#define Tk_SizeOfBitmap \
+       (tkStubsPtr->tk_SizeOfBitmap) /* 172 */
+#endif
+#ifndef Tk_SizeOfImage
+#define Tk_SizeOfImage \
+       (tkStubsPtr->tk_SizeOfImage) /* 173 */
+#endif
+#ifndef Tk_StrictMotif
+#define Tk_StrictMotif \
+       (tkStubsPtr->tk_StrictMotif) /* 174 */
+#endif
+#ifndef Tk_TextLayoutToPostscript
+#define Tk_TextLayoutToPostscript \
+       (tkStubsPtr->tk_TextLayoutToPostscript) /* 175 */
+#endif
+#ifndef Tk_TextWidth
+#define Tk_TextWidth \
+       (tkStubsPtr->tk_TextWidth) /* 176 */
+#endif
+#ifndef Tk_UndefineCursor
+#define Tk_UndefineCursor \
+       (tkStubsPtr->tk_UndefineCursor) /* 177 */
+#endif
+#ifndef Tk_UnderlineChars
+#define Tk_UnderlineChars \
+       (tkStubsPtr->tk_UnderlineChars) /* 178 */
+#endif
+#ifndef Tk_UnderlineTextLayout
+#define Tk_UnderlineTextLayout \
+       (tkStubsPtr->tk_UnderlineTextLayout) /* 179 */
+#endif
+#ifndef Tk_Ungrab
+#define Tk_Ungrab \
+       (tkStubsPtr->tk_Ungrab) /* 180 */
+#endif
+#ifndef Tk_UnmaintainGeometry
+#define Tk_UnmaintainGeometry \
+       (tkStubsPtr->tk_UnmaintainGeometry) /* 181 */
+#endif
+#ifndef Tk_UnmapWindow
+#define Tk_UnmapWindow \
+       (tkStubsPtr->tk_UnmapWindow) /* 182 */
+#endif
+#ifndef Tk_UnsetGrid
+#define Tk_UnsetGrid \
+       (tkStubsPtr->tk_UnsetGrid) /* 183 */
+#endif
+#ifndef Tk_UpdatePointer
+#define Tk_UpdatePointer \
+       (tkStubsPtr->tk_UpdatePointer) /* 184 */
+#endif
+#ifndef Tk_AllocBitmapFromObj
+#define Tk_AllocBitmapFromObj \
+       (tkStubsPtr->tk_AllocBitmapFromObj) /* 185 */
+#endif
+#ifndef Tk_Alloc3DBorderFromObj
+#define Tk_Alloc3DBorderFromObj \
+       (tkStubsPtr->tk_Alloc3DBorderFromObj) /* 186 */
+#endif
+#ifndef Tk_AllocColorFromObj
+#define Tk_AllocColorFromObj \
+       (tkStubsPtr->tk_AllocColorFromObj) /* 187 */
+#endif
+#ifndef Tk_AllocCursorFromObj
+#define Tk_AllocCursorFromObj \
+       (tkStubsPtr->tk_AllocCursorFromObj) /* 188 */
+#endif
+#ifndef Tk_AllocFontFromObj
+#define Tk_AllocFontFromObj \
+       (tkStubsPtr->tk_AllocFontFromObj) /* 189 */
+#endif
+#ifndef Tk_CreateOptionTable
+#define Tk_CreateOptionTable \
+       (tkStubsPtr->tk_CreateOptionTable) /* 190 */
+#endif
+#ifndef Tk_DeleteOptionTable
+#define Tk_DeleteOptionTable \
+       (tkStubsPtr->tk_DeleteOptionTable) /* 191 */
+#endif
+#ifndef Tk_Free3DBorderFromObj
+#define Tk_Free3DBorderFromObj \
+       (tkStubsPtr->tk_Free3DBorderFromObj) /* 192 */
+#endif
+#ifndef Tk_FreeBitmapFromObj
+#define Tk_FreeBitmapFromObj \
+       (tkStubsPtr->tk_FreeBitmapFromObj) /* 193 */
+#endif
+#ifndef Tk_FreeColorFromObj
+#define Tk_FreeColorFromObj \
+       (tkStubsPtr->tk_FreeColorFromObj) /* 194 */
+#endif
+#ifndef Tk_FreeConfigOptions
+#define Tk_FreeConfigOptions \
+       (tkStubsPtr->tk_FreeConfigOptions) /* 195 */
+#endif
+#ifndef Tk_FreeSavedOptions
+#define Tk_FreeSavedOptions \
+       (tkStubsPtr->tk_FreeSavedOptions) /* 196 */
+#endif
+#ifndef Tk_FreeCursorFromObj
+#define Tk_FreeCursorFromObj \
+       (tkStubsPtr->tk_FreeCursorFromObj) /* 197 */
+#endif
+#ifndef Tk_FreeFontFromObj
+#define Tk_FreeFontFromObj \
+       (tkStubsPtr->tk_FreeFontFromObj) /* 198 */
+#endif
+#ifndef Tk_Get3DBorderFromObj
+#define Tk_Get3DBorderFromObj \
+       (tkStubsPtr->tk_Get3DBorderFromObj) /* 199 */
+#endif
+#ifndef Tk_GetAnchorFromObj
+#define Tk_GetAnchorFromObj \
+       (tkStubsPtr->tk_GetAnchorFromObj) /* 200 */
+#endif
+#ifndef Tk_GetBitmapFromObj
+#define Tk_GetBitmapFromObj \
+       (tkStubsPtr->tk_GetBitmapFromObj) /* 201 */
+#endif
+#ifndef Tk_GetColorFromObj
+#define Tk_GetColorFromObj \
+       (tkStubsPtr->tk_GetColorFromObj) /* 202 */
+#endif
+#ifndef Tk_GetCursorFromObj
+#define Tk_GetCursorFromObj \
+       (tkStubsPtr->tk_GetCursorFromObj) /* 203 */
+#endif
+#ifndef Tk_GetOptionInfo
+#define Tk_GetOptionInfo \
+       (tkStubsPtr->tk_GetOptionInfo) /* 204 */
+#endif
+#ifndef Tk_GetOptionValue
+#define Tk_GetOptionValue \
+       (tkStubsPtr->tk_GetOptionValue) /* 205 */
+#endif
+#ifndef Tk_GetJustifyFromObj
+#define Tk_GetJustifyFromObj \
+       (tkStubsPtr->tk_GetJustifyFromObj) /* 206 */
+#endif
+#ifndef Tk_GetMMFromObj
+#define Tk_GetMMFromObj \
+       (tkStubsPtr->tk_GetMMFromObj) /* 207 */
+#endif
+#ifndef Tk_GetPixelsFromObj
+#define Tk_GetPixelsFromObj \
+       (tkStubsPtr->tk_GetPixelsFromObj) /* 208 */
+#endif
+#ifndef Tk_GetReliefFromObj
+#define Tk_GetReliefFromObj \
+       (tkStubsPtr->tk_GetReliefFromObj) /* 209 */
+#endif
+#ifndef Tk_GetScrollInfoObj
+#define Tk_GetScrollInfoObj \
+       (tkStubsPtr->tk_GetScrollInfoObj) /* 210 */
+#endif
+#ifndef Tk_InitOptions
+#define Tk_InitOptions \
+       (tkStubsPtr->tk_InitOptions) /* 211 */
+#endif
+#ifndef Tk_MainEx
+#define Tk_MainEx \
+       (tkStubsPtr->tk_MainEx) /* 212 */
+#endif
+#ifndef Tk_RestoreSavedOptions
+#define Tk_RestoreSavedOptions \
+       (tkStubsPtr->tk_RestoreSavedOptions) /* 213 */
+#endif
+#ifndef Tk_SetOptions
+#define Tk_SetOptions \
+       (tkStubsPtr->tk_SetOptions) /* 214 */
+#endif
+#ifndef Tk_InitConsoleChannels
+#define Tk_InitConsoleChannels \
+       (tkStubsPtr->tk_InitConsoleChannels) /* 215 */
+#endif
+#ifndef Tk_CreateConsoleWindow
+#define Tk_CreateConsoleWindow \
+       (tkStubsPtr->tk_CreateConsoleWindow) /* 216 */
+#endif
+#ifndef Tk_CreateSmoothMethod
+#define Tk_CreateSmoothMethod \
+       (tkStubsPtr->tk_CreateSmoothMethod) /* 217 */
+#endif
+/* Slot 218 is reserved */
+/* Slot 219 is reserved */
+#ifndef Tk_GetDash
+#define Tk_GetDash \
+       (tkStubsPtr->tk_GetDash) /* 220 */
+#endif
+#ifndef Tk_CreateOutline
+#define Tk_CreateOutline \
+       (tkStubsPtr->tk_CreateOutline) /* 221 */
+#endif
+#ifndef Tk_DeleteOutline
+#define Tk_DeleteOutline \
+       (tkStubsPtr->tk_DeleteOutline) /* 222 */
+#endif
+#ifndef Tk_ConfigOutlineGC
+#define Tk_ConfigOutlineGC \
+       (tkStubsPtr->tk_ConfigOutlineGC) /* 223 */
+#endif
+#ifndef Tk_ChangeOutlineGC
+#define Tk_ChangeOutlineGC \
+       (tkStubsPtr->tk_ChangeOutlineGC) /* 224 */
+#endif
+#ifndef Tk_ResetOutlineGC
+#define Tk_ResetOutlineGC \
+       (tkStubsPtr->tk_ResetOutlineGC) /* 225 */
+#endif
+#ifndef Tk_CanvasPsOutline
+#define Tk_CanvasPsOutline \
+       (tkStubsPtr->tk_CanvasPsOutline) /* 226 */
+#endif
+#ifndef Tk_SetTSOrigin
+#define Tk_SetTSOrigin \
+       (tkStubsPtr->tk_SetTSOrigin) /* 227 */
+#endif
+#ifndef Tk_CanvasGetCoordFromObj
+#define Tk_CanvasGetCoordFromObj \
+       (tkStubsPtr->tk_CanvasGetCoordFromObj) /* 228 */
+#endif
+#ifndef Tk_CanvasSetOffset
+#define Tk_CanvasSetOffset \
+       (tkStubsPtr->tk_CanvasSetOffset) /* 229 */
+#endif
+#ifndef Tk_DitherPhoto
+#define Tk_DitherPhoto \
+       (tkStubsPtr->tk_DitherPhoto) /* 230 */
+#endif
+#ifndef Tk_PostscriptBitmap
+#define Tk_PostscriptBitmap \
+       (tkStubsPtr->tk_PostscriptBitmap) /* 231 */
+#endif
+#ifndef Tk_PostscriptColor
+#define Tk_PostscriptColor \
+       (tkStubsPtr->tk_PostscriptColor) /* 232 */
+#endif
+#ifndef Tk_PostscriptFont
+#define Tk_PostscriptFont \
+       (tkStubsPtr->tk_PostscriptFont) /* 233 */
+#endif
+#ifndef Tk_PostscriptImage
+#define Tk_PostscriptImage \
+       (tkStubsPtr->tk_PostscriptImage) /* 234 */
+#endif
+#ifndef Tk_PostscriptPath
+#define Tk_PostscriptPath \
+       (tkStubsPtr->tk_PostscriptPath) /* 235 */
+#endif
+#ifndef Tk_PostscriptStipple
+#define Tk_PostscriptStipple \
+       (tkStubsPtr->tk_PostscriptStipple) /* 236 */
+#endif
+#ifndef Tk_PostscriptY
+#define Tk_PostscriptY \
+       (tkStubsPtr->tk_PostscriptY) /* 237 */
+#endif
+#ifndef Tk_PostscriptPhoto
+#define Tk_PostscriptPhoto \
+       (tkStubsPtr->tk_PostscriptPhoto) /* 238 */
+#endif
+
+#endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#endif /* _TKDECLS */
+
+
diff --git a/tk/generic/tkInt.decls b/tk/generic/tkInt.decls
new file mode 100644 (file)
index 0000000..b4d3d47
--- /dev/null
@@ -0,0 +1,1932 @@
+       # tkInt.decls --
+#
+#      This file contains the declarations for all unsupported
+#      functions that are exported by the Tk library.  This file
+#      is used to generate the tkIntDecls.h, tkIntPlatDecls.h,
+#      tkIntStub.c, and tkPlatStub.c files.
+#
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# 
+# RCS: @(#) $Id$
+
+library tk
+
+# Define the unsupported generic interfaces.
+
+interface tkInt
+
+# Declare each of the functions in the unsupported internal Tcl
+# interface.  These interfaces are allowed to changed between versions.
+# Use at your own risk.  Note that the position of functions should not
+# be changed between versions to avoid gratuitous incompatibilities.
+
+declare 0 generic {
+    TkWindow * TkAllocWindow (TkDisplay *dispPtr, int screenNum, \
+           TkWindow *parentPtr)
+}
+
+declare 1 generic {
+    void TkBezierPoints (double control[], int numSteps, double *coordPtr)
+}
+
+declare 2 generic {
+    void TkBezierScreenPoints (Tk_Canvas canvas, double control[], \
+           int numSteps, XPoint *xPointPtr)
+}
+
+declare 3 generic {
+    void TkBindDeadWindow (TkWindow *winPtr)
+}
+
+declare 4 generic {
+    void TkBindEventProc (TkWindow *winPtr, XEvent *eventPtr)
+}
+
+declare 5 generic {
+    void TkBindFree (TkMainInfo *mainPtr)
+}
+
+declare 6 generic {
+    void TkBindInit (TkMainInfo *mainPtr)
+}
+
+declare 7 generic {
+    void TkChangeEventWindow (XEvent *eventPtr, TkWindow *winPtr)
+}
+
+declare 8 generic {
+    int TkClipInit (Tcl_Interp *interp, TkDisplay *dispPtr)
+}
+
+declare 9 generic {
+    void TkComputeAnchor (Tk_Anchor anchor, Tk_Window tkwin, \
+           int padX, int padY, int innerWidth, int innerHeight, \
+           int *xPtr, int *yPtr)
+}
+
+declare 10 generic {
+    int TkCopyAndGlobalEval (Tcl_Interp *interp, char *script)
+}
+
+declare 11 generic {
+    unsigned long TkCreateBindingProcedure (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable, \
+           ClientData object, char *eventString, \
+           TkBindEvalProc *evalProc, TkBindFreeProc *freeProc, \
+           ClientData clientData)
+}
+
+declare 12 generic {
+    TkCursor * TkCreateCursorFromData (Tk_Window tkwin, \
+           char *source, char *mask, int width, int height, \
+           int xHot, int yHot, XColor fg, XColor bg)
+}
+
+declare 13 generic {
+    int TkCreateFrame (ClientData clientData, \
+           Tcl_Interp *interp, int argc, char **argv, \
+           int toplevel, char *appName)
+}
+
+declare 14 generic {
+    Tk_Window TkCreateMainWindow (Tcl_Interp *interp, \
+           char *screenName, char *baseName)
+}
+
+declare 15 generic {
+    Time TkCurrentTime (TkDisplay *dispPtr)
+}
+
+declare 16 generic {
+    void TkDeleteAllImages (TkMainInfo *mainPtr)
+}
+
+declare 17 generic {
+    void TkDoConfigureNotify (TkWindow *winPtr)
+}
+
+declare 18 generic {
+    void TkDrawInsetFocusHighlight (Tk_Window tkwin, GC gc, int width, \
+           Drawable drawable, int padding)
+}
+
+declare 19 generic {
+    void TkEventDeadWindow (TkWindow *winPtr)
+}
+
+declare 20 generic {
+    void TkFillPolygon (Tk_Canvas canvas, \
+           double *coordPtr, int numPoints, Display *display, \
+           Drawable drawable, GC gc, GC outlineGC)
+}
+
+declare 21 generic {
+    int TkFindStateNum (Tcl_Interp *interp, \
+           CONST char *option, CONST TkStateMap *mapPtr, \
+           CONST char *strKey)
+}
+
+declare 22 generic {
+    char * TkFindStateString (CONST TkStateMap *mapPtr, int numKey)
+}
+
+declare 23 generic {
+    void TkFocusDeadWindow (TkWindow *winPtr)
+}
+
+declare 24 generic {
+    int TkFocusFilterEvent (TkWindow *winPtr, XEvent *eventPtr)
+}
+
+declare 25 generic {
+    TkWindow * TkFocusKeyEvent (TkWindow *winPtr, XEvent *eventPtr)
+}
+
+declare 26 generic {
+    void TkFontPkgInit (TkMainInfo *mainPtr)
+}
+
+declare 27 generic {
+    void TkFontPkgFree (TkMainInfo *mainPtr)
+}
+
+declare 28 generic {
+    void TkFreeBindingTags (TkWindow *winPtr)
+}
+
+# Name change only, TkFreeCursor in Tcl 8.0.x now TkpFreeCursor
+declare 29 generic {
+    void TkpFreeCursor (TkCursor *cursorPtr)
+}
+
+declare 30 generic {
+    char * TkGetBitmapData (Tcl_Interp *interp, \
+           char *string, char *fileName, int *widthPtr, \
+           int *heightPtr, int *hotXPtr, int *hotYPtr)
+}
+
+declare 31 generic {
+    void TkGetButtPoints (double p1[], double p2[], \
+           double width, int project, double m1[], double m2[])
+}
+
+declare 32 generic {
+    TkCursor * TkGetCursorByName (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tk_Uid string)
+}
+
+declare 33 generic {
+    char * TkGetDefaultScreenName (Tcl_Interp *interp, char *screenName)
+}
+
+declare 34 generic {
+    TkDisplay * TkGetDisplay (Display *display)
+}
+
+declare 35 generic {
+    int TkGetDisplayOf (Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], \
+           Tk_Window *tkwinPtr)
+}
+
+declare 36 generic {
+    TkWindow * TkGetFocusWin (TkWindow *winPtr)
+}
+
+declare 37 generic {
+    int TkGetInterpNames (Tcl_Interp *interp, Tk_Window tkwin)
+}
+
+declare 38 generic {
+    int TkGetMiterPoints (double p1[], double p2[], double p3[], \
+           double width, double m1[],double m2[])
+}
+
+declare 39 generic {
+    void TkGetPointerCoords (Tk_Window tkwin, int *xPtr, int *yPtr)
+}
+
+declare 40 generic {
+    void TkGetServerInfo (Tcl_Interp *interp, Tk_Window tkwin)
+}
+
+declare 41 generic {
+    void TkGrabDeadWindow (TkWindow *winPtr)
+}
+
+declare 42 generic {
+    int TkGrabState (TkWindow *winPtr)
+}
+
+declare 43 generic {
+    void TkIncludePoint (Tk_Item *itemPtr, double *pointPtr)
+}
+
+declare 44 generic {
+    void TkInOutEvents (XEvent *eventPtr, TkWindow *sourcePtr, \
+           TkWindow *destPtr, int leaveType, int enterType, \
+           Tcl_QueuePosition position)
+}
+
+declare 45 generic {
+    void TkInstallFrameMenu (Tk_Window tkwin)
+}
+
+declare 46 generic {
+    char * TkKeysymToString (KeySym keysym)
+}
+
+declare 47 generic {
+    int TkLineToArea (double end1Ptr[], double end2Ptr[], double rectPtr[])
+}
+
+declare 48 generic {
+    double TkLineToPoint (double end1Ptr[], \
+           double end2Ptr[], double pointPtr[])
+}
+
+declare 49 generic {
+    int TkMakeBezierCurve (Tk_Canvas canvas, \
+           double *pointPtr, int numPoints, int numSteps, \
+           XPoint xPoints[], double dblPoints[])
+}
+
+declare 50 generic {
+    void TkMakeBezierPostscript (Tcl_Interp *interp, \
+           Tk_Canvas canvas, double *pointPtr, int numPoints)
+}
+
+declare 51 generic {
+    void TkOptionClassChanged (TkWindow *winPtr)
+}
+
+declare 52 generic {
+    void TkOptionDeadWindow (TkWindow *winPtr)
+}
+
+declare 53 generic {
+    int TkOvalToArea (double *ovalPtr, double *rectPtr)
+}
+
+declare 54 generic {
+    double TkOvalToPoint (double ovalPtr[], \
+           double width, int filled, double pointPtr[])
+}
+
+declare 55 generic {
+    int TkpChangeFocus (TkWindow *winPtr, int force)
+}
+
+declare 56 generic {
+    void TkpCloseDisplay (TkDisplay *dispPtr)
+}
+
+declare 57 generic {
+    void TkpClaimFocus (TkWindow *topLevelPtr, int force)
+}
+
+declare 58 generic {
+    void TkpDisplayWarning (char *msg, char *title)
+}
+
+declare 59 generic {
+    void TkpGetAppName (Tcl_Interp *interp, Tcl_DString *name)
+}
+
+declare 60 generic {
+    TkWindow * TkpGetOtherWindow (TkWindow *winPtr)
+}
+
+declare 61 generic {
+    TkWindow * TkpGetWrapperWindow (TkWindow *winPtr)
+}
+
+declare 62 generic {
+    int TkpInit (Tcl_Interp *interp)
+}
+
+declare 63 generic {
+    void TkpInitializeMenuBindings (Tcl_Interp *interp, \
+           Tk_BindingTable bindingTable)
+}
+
+declare 64 generic {
+    void TkpMakeContainer (Tk_Window tkwin)
+}
+
+declare 65 generic {
+    void TkpMakeMenuWindow (Tk_Window tkwin, int transient)
+}
+
+declare 66 generic {
+    Window TkpMakeWindow (TkWindow *winPtr, Window parent)
+}
+
+declare 67 generic {
+    void TkpMenuNotifyToplevelCreate (Tcl_Interp *interp1, char *menuName)
+}
+
+declare 68 generic {
+    TkDisplay * TkpOpenDisplay (char *display_name)
+}
+
+declare 69 generic {
+    int TkPointerEvent (XEvent *eventPtr, TkWindow *winPtr)
+}
+
+declare 70 generic {
+    int TkPolygonToArea (double *polyPtr, int numPoints, double *rectPtr)
+}
+
+declare 71 generic {
+    double TkPolygonToPoint (double *polyPtr, int numPoints, double *pointPtr)
+}
+
+declare 72 generic {
+    int TkPositionInTree (TkWindow *winPtr, TkWindow *treePtr)
+}
+
+declare 73 generic {
+    void TkpRedirectKeyEvent (TkWindow *winPtr, XEvent *eventPtr)
+}
+
+declare 74 generic {
+    void TkpSetMainMenubar (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *menuName)
+}
+
+declare 75 generic {
+    int TkpUseWindow (Tcl_Interp *interp, Tk_Window tkwin, char *string)
+}
+
+declare 76 generic {
+    int TkpWindowWasRecentlyDeleted (Window win, TkDisplay *dispPtr)
+}
+
+declare 77 generic {
+    void TkQueueEventForAllChildren (TkWindow *winPtr, XEvent *eventPtr)
+}
+
+declare 78 generic {
+    int TkReadBitmapFile (Display* display, Drawable d, CONST char* filename, \
+           unsigned int* width_return, unsigned int* height_return, \
+           Pixmap* bitmap_return, int* x_hot_return, int* y_hot_return)
+}
+
+declare 79 generic {
+    int TkScrollWindow (Tk_Window tkwin, GC gc, \
+           int x, int y, int width, int height, int dx, \
+           int dy, TkRegion damageRgn)
+}
+
+declare 80 generic {
+    void TkSelDeadWindow (TkWindow *winPtr)
+}
+
+declare 81 generic {
+    void TkSelEventProc (Tk_Window tkwin, XEvent *eventPtr)
+}
+
+declare 82 generic {
+    void TkSelInit (Tk_Window tkwin)
+}
+
+declare 83 generic {
+    void TkSelPropProc (XEvent *eventPtr)
+}
+
+declare 84 generic {
+    void TkSetClassProcs (Tk_Window tkwin, \
+           TkClassProcs *procs, ClientData instanceData)
+}
+
+declare 85 generic {
+    void TkSetWindowMenuBar (Tcl_Interp *interp, \
+           Tk_Window tkwin, char *oldMenuName, char *menuName)
+}
+
+declare 86 generic {
+    KeySym TkStringToKeysym (char *name)
+}
+
+declare 87 generic {
+    int TkThickPolyLineToArea (double *coordPtr, \
+           int numPoints, double width, int capStyle, \
+           int joinStyle, double *rectPtr)
+}
+
+declare 88 generic {
+    void TkWmAddToColormapWindows (TkWindow *winPtr)
+}
+
+declare 89 generic {
+    void TkWmDeadWindow (TkWindow *winPtr)
+}
+
+declare 90 generic {
+    TkWindow * TkWmFocusToplevel (TkWindow *winPtr)
+}
+
+declare 91 generic {
+    void TkWmMapWindow (TkWindow *winPtr)
+}
+
+declare 92 generic {
+    void TkWmNewWindow (TkWindow *winPtr)
+}
+
+declare 93 generic {
+    void TkWmProtocolEventProc (TkWindow *winPtr, XEvent *evenvPtr)
+}
+
+declare 94 generic {
+    void TkWmRemoveFromColormapWindows (TkWindow *winPtr)
+}
+
+declare 95 generic {
+    void TkWmRestackToplevel (TkWindow *winPtr, int aboveBelow, \
+           TkWindow *otherPtr)
+}
+
+declare 96 generic {
+    void TkWmSetClass (TkWindow *winPtr)
+}
+
+declare 97 generic {
+    void TkWmUnmapWindow (TkWindow *winPtr)
+}
+
+# new for 8.1
+
+declare 98 generic {
+    Tcl_Obj * TkDebugBitmap ( Tk_Window tkwin, char *name)
+}
+
+declare 99 generic {
+    Tcl_Obj * TkDebugBorder ( Tk_Window tkwin, char *name)
+}
+
+declare 100 generic {
+    Tcl_Obj * TkDebugCursor ( Tk_Window tkwin, char *name)
+}
+
+declare 101 generic {
+    Tcl_Obj * TkDebugColor ( Tk_Window tkwin, char *name)
+}
+
+declare 102 generic {
+    Tcl_Obj * TkDebugConfig (Tcl_Interp *interp, Tk_OptionTable table)
+}
+
+declare 103 generic {
+    Tcl_Obj * TkDebugFont ( Tk_Window tkwin, char *name)
+}
+
+declare 104 generic {
+    int  TkFindStateNumObj (Tcl_Interp *interp, \
+           Tcl_Obj *optionPtr, CONST TkStateMap *mapPtr, \
+           Tcl_Obj *keyPtr)
+}
+
+declare 105 generic {
+    Tcl_HashTable *  TkGetBitmapPredefTable (void)
+}
+
+declare 106 generic {
+    TkDisplay * TkGetDisplayList (void)
+}
+
+declare 107 generic {
+    TkMainInfo * TkGetMainInfoList (void)
+}
+
+declare 108 generic {
+    int  TkGetWindowFromObj (Tcl_Interp *interp, \
+           Tk_Window tkwin, Tcl_Obj *objPtr, \
+           Tk_Window *windowPtr)
+}
+
+declare 109 generic {
+    char *  TkpGetString (TkWindow *winPtr, \
+           XEvent *eventPtr, Tcl_DString *dsPtr)
+}
+
+declare 110 generic {
+    void  TkpGetSubFonts (Tcl_Interp *interp, Tk_Font tkfont)
+}
+
+declare 111 generic {
+    Tcl_Obj * TkpGetSystemDefault (Tk_Window tkwin, \
+           char *dbName, char *className)
+}
+
+declare 112 generic {
+    void TkpMenuThreadInit (void)
+}
+
+declare 113 win {
+    void TkClipBox (TkRegion rgn, XRectangle* rect_return)
+}
+
+declare 113 mac {
+    void TkClipBox (TkRegion rgn, XRectangle* rect_return)
+}
+
+declare 114 win {
+    TkRegion TkCreateRegion (void)
+}
+
+declare 114 mac {
+    TkRegion TkCreateRegion (void)
+}
+
+declare 115 win {
+    void TkDestroyRegion (TkRegion rgn)
+}
+
+declare 115 mac {
+    void TkDestroyRegion (TkRegion rgn)
+}
+
+declare 116 win {
+    void TkIntersectRegion (TkRegion sra, TkRegion srcb, TkRegion dr_return)
+}
+
+declare 116 mac {
+    void TkIntersectRegion (TkRegion sra, TkRegion srcb, TkRegion dr_return)
+}
+
+declare 117 win {
+    int TkRectInRegion (TkRegion rgn, int x, int y, unsigned int width, \
+           unsigned int height)
+}
+
+declare 117 mac {
+    int TkRectInRegion (TkRegion rgn, int x, int y, unsigned int width, \
+           unsigned int height)
+}
+
+declare 118 win {
+    void TkSetRegion (Display* display, GC gc, TkRegion rgn)
+}
+
+declare 118 mac {
+    void TkSetRegion (Display* display, GC gc, TkRegion rgn)
+}
+
+declare 119 win {
+    void TkUnionRectWithRegion (XRectangle* rect, \
+           TkRegion src, TkRegion dr_return)
+}
+
+declare 119 mac {
+    void TkUnionRectWithRegion (XRectangle* rect, \
+           TkRegion src, TkRegion dr_return)
+}
+
+declare 130 mac {
+    Window  TkGetTransientMaster (TkWindow *winPtr)
+}
+
+declare 131 mac {
+    int  TkGenerateButtonEvent (int x, int y, \
+           Window window, unsigned int state)
+}
+
+declare 133 mac {
+    void  TkGenWMDestroyEvent (Tk_Window tkwin)
+}
+
+declare 134 mac {
+    void  TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \
+           int width, int height, int flags)
+}
+
+declare 135 generic {
+    void TkpDrawHighlightBorder (Tk_Window tkwin, GC fgGC, GC bgGC, \
+        int highlightWidth, Drawable drawable)
+}
+
+declare 136 generic {
+    void TkSetFocusWin (TkWindow *winPtr, int force) 
+}
+
+declare 137 generic {
+    void TkpSetKeycodeAndState (Tk_Window tkwin, KeySym keySym, \
+            XEvent *eventPtr)
+}
+
+declare 138 generic {
+    KeySym TkpGetKeySym (TkDisplay *dispPtr, XEvent *eventPtr)
+}
+
+declare 139 generic {
+    void TkpInitKeymapInfo (TkDisplay *dispPtr)
+}
+
+##############################################################################
+
+# Define the platform specific internal Tcl interface. These functions are
+# only available on the designated platform.
+
+interface tkIntPlat
+
+#########################
+# Unix specific functions
+
+declare 0 unix {
+    void TkCreateXEventSource (void)
+}
+
+declare 1 unix {
+    void TkFreeWindowId (TkDisplay *dispPtr, Window w)
+}
+
+declare 2 unix {
+    void TkInitXId (TkDisplay *dispPtr)
+}
+
+declare 3 unix {
+    int TkpCmapStressed (Tk_Window tkwin, Colormap colormap)
+}
+
+declare 4 unix {
+    void TkpSync (Display *display)
+}
+
+declare 5 unix {
+    Window TkUnixContainerId (TkWindow *winPtr)
+}
+
+declare 6 unix {
+    int TkUnixDoOneXEvent (Tcl_Time *timePtr)
+}
+
+declare 7 unix {
+    void TkUnixSetMenubar (Tk_Window tkwin, Tk_Window menubar)
+}
+       
+
+
+############################
+# Windows specific functions
+
+declare 0 win {
+    char * TkAlignImageData (XImage *image, int alignment, int bitOrder)
+}
+
+declare 2 win {
+    void TkGenerateActivateEvents (TkWindow *winPtr, int active)
+}
+
+declare 3 win {
+    unsigned long TkpGetMS (void)
+}
+
+declare 4 win {
+    void TkPointerDeadWindow (TkWindow *winPtr)
+}
+
+declare 5 win {
+    void TkpPrintWindowId (char *buf, Window window)
+}
+
+declare 6 win {
+    int TkpScanWindowId (Tcl_Interp *interp, char *string, int *idPtr)
+}
+
+declare 7 win {
+    void TkpSetCapture (TkWindow *winPtr)
+}
+
+declare 8 win {
+    void TkpSetCursor (TkpCursor cursor)
+}
+
+declare 9 win {
+    void TkpWmSetState (TkWindow *winPtr, int state)
+}
+
+declare 10 win {
+    void TkSetPixmapColormap (Pixmap pixmap, Colormap colormap)
+}
+
+declare 11 win {
+    void  TkWinCancelMouseTimer (void)
+}
+
+declare 12 win {
+    void  TkWinClipboardRender (TkDisplay *dispPtr, UINT format)
+}
+
+declare 13 win {
+    LRESULT  TkWinEmbeddedEventProc (HWND hwnd, UINT message, \
+           WPARAM wParam, LPARAM lParam)
+}
+
+declare 14 win {
+    void  TkWinFillRect (HDC dc, int x, int y, int width, int height, \
+           int pixel)
+}
+
+declare 15 win {
+    COLORREF  TkWinGetBorderPixels (Tk_Window tkwin, Tk_3DBorder border, \
+           int which)
+}
+
+declare 16 win {
+    HDC  TkWinGetDrawableDC (Display *display, Drawable d, TkWinDCState* state)
+}
+
+declare 17 win {
+    int  TkWinGetModifierState (void)
+}
+
+declare 18 win {
+    HPALETTE  TkWinGetSystemPalette (void)
+}
+
+declare 19 win {
+    HWND  TkWinGetWrapperWindow (Tk_Window tkwin)
+}
+
+declare 20 win {
+    int  TkWinHandleMenuEvent (HWND *phwnd, \
+           UINT *pMessage, WPARAM *pwParam, LPARAM *plParam, \
+           LRESULT *plResult)
+}
+
+declare 21 win {
+    int  TkWinIndexOfColor (XColor *colorPtr)
+}
+
+declare 22 win {
+    void  TkWinReleaseDrawableDC (Drawable d, HDC hdc, TkWinDCState* state)
+}
+
+declare 23 win {
+    LRESULT  TkWinResendEvent (WNDPROC wndproc, HWND hwnd, XEvent *eventPtr)
+}
+
+declare 24 win {
+    HPALETTE  TkWinSelectPalette (HDC dc, Colormap colormap)
+}
+
+declare 25 win {
+    void  TkWinSetMenu (Tk_Window tkwin, HMENU hMenu)
+}
+
+declare 26 win {
+    void  TkWinSetWindowPos (HWND hwnd, HWND siblingHwnd, int pos)
+}
+
+declare 27 win {
+    void  TkWinWmCleanup (HINSTANCE hInstance)
+}
+
+declare 28 win {
+    void  TkWinXCleanup (HINSTANCE hInstance)
+}
+
+declare 29 win {
+    void   TkWinXInit (HINSTANCE hInstance)
+}
+
+# new for 8.1
+
+declare 30 win {
+    void TkWinSetForegroundWindow (TkWindow *winPtr)
+}
+
+declare 31 win {
+    void TkWinDialogDebug (int debug)
+}
+
+declare 32 win {
+    Tcl_Obj * TkWinGetMenuSystemDefault (Tk_Window tkwin, \
+           char *dbName, char *className)
+}
+
+declare 33 win {
+    int TkWinGetPlatformId(void)
+}
+
+########################
+# Mac specific functions
+
+declare 0 mac {
+    void TkGenerateActivateEvents (TkWindow *winPtr, int active)
+}
+
+declare 1 mac {
+    Pixmap TkpCreateNativeBitmap (Display *display, char * source)
+}
+
+declare 2 mac {
+    void TkpDefineNativeBitmaps (void)
+}
+
+declare 3 mac {
+    unsigned long TkpGetMS (void)
+}
+
+declare 4 mac {
+    Pixmap TkpGetNativeAppBitmap (Display *display, \
+           char *name, int *width, int *height)
+}
+
+declare 5 mac {
+    void TkPointerDeadWindow (TkWindow *winPtr)
+}
+
+declare 6 mac {
+    void TkpSetCapture (TkWindow *winPtr)
+}
+
+declare 7 mac {
+    void TkpSetCursor (TkpCursor cursor)
+}
+
+declare 8 mac {
+    void TkpWmSetState (TkWindow *winPtr, int state)
+}
+
+declare 9 mac {
+    int  HandleWMEvent (EventRecord *theEvent)
+}
+
+declare 10 mac {
+    void   TkAboutDlg (void)
+}
+
+declare 11 mac {
+    void  TkCreateMacEventSource (void)
+}
+
+declare 12 mac {
+    void   TkFontList (Tcl_Interp *interp, Display *display)
+}
+
+declare 13 mac {
+    Window  TkGetTransientMaster (TkWindow *winPtr)
+}
+
+declare 14 mac {
+    int  TkGenerateButtonEvent (int x, int y, \
+           Window window, unsigned int state)
+}
+
+declare 15 mac {
+    int   TkGetCharPositions (XFontStruct *font_struct, char *string, \
+           int count, short *buffer)
+}
+
+declare 16 mac {
+    void  TkGenWMDestroyEvent (Tk_Window tkwin)
+}
+
+declare 17 mac {
+    void  TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \
+           int width, int height, int flags)
+}
+
+declare 18 mac {
+    unsigned int TkMacButtonKeyState (void)
+}
+
+declare 19 mac {
+    void  TkMacClearMenubarActive (void)
+}
+
+declare 20 mac {
+    int  TkMacConvertEvent (EventRecord *eventPtr)
+}
+
+declare 21 mac {
+    int  TkMacDispatchMenuEvent (int menuID, int index)
+}
+
+declare 22 mac {
+    void  TkMacInstallCursor (int resizeOverride)
+}
+
+declare 23 mac {
+    int  TkMacConvertTkEvent (EventRecord *eventPtr, Window window)
+}
+
+declare 24 mac {
+    void  TkMacHandleTearoffMenu (void)
+}
+
+declare 25 mac {
+    void  tkMacInstallMWConsole (Tcl_Interp *interp)
+}
+
+declare 26 mac {
+    void  TkMacInvalClipRgns (TkWindow *winPtr)
+}
+
+declare 27 mac {
+    void  TkMacDoHLEvent (EventRecord *theEvent)
+}
+
+declare 28 mac {
+    void   TkMacFontInfo (Font fontId, short *family, \
+           short *style, short *size)
+}
+
+declare 29 mac {
+    Time  TkMacGenerateTime (void)
+}
+
+declare 30 mac {
+    GWorldPtr  TkMacGetDrawablePort (Drawable drawable)
+}
+
+declare 31 mac {
+    TkWindow *  TkMacGetScrollbarGrowWindow (TkWindow *winPtr)
+}
+
+declare 32 mac {
+    Window   TkMacGetXWindow (WindowRef macWinPtr)
+}
+
+declare 33 mac {
+    int  TkMacGrowToplevel (WindowRef whichWindow, Point start)
+}
+
+declare 34 mac {
+    void   TkMacHandleMenuSelect (long mResult, int optionKeyPressed)
+}
+
+declare 35 mac {
+    int  TkMacHaveAppearance (void)
+}
+
+declare 36 mac {
+    void  TkMacInitAppleEvents (Tcl_Interp *interp)
+}
+
+declare 37 mac {
+    void   TkMacInitMenus (Tcl_Interp  *interp)
+}
+
+declare 38 mac {
+    void  TkMacInvalidateWindow (MacDrawable *macWin, int flag)
+}
+
+declare 39 mac {
+    int  TkMacIsCharacterMissing (Tk_Font tkfont, unsigned int searchChar)
+}
+
+declare 40 mac {
+    void  TkMacMakeRealWindowExist (TkWindow *winPtr)
+}
+
+declare 41 mac {
+    BitMapPtr TkMacMakeStippleMap(Drawable d1, Drawable d2)
+}
+
+declare 42 mac {
+    void  TkMacMenuClick (void)
+}
+
+declare 43 mac {
+    void  TkMacRegisterOffScreenWindow (Window window, GWorldPtr portPtr)
+}
+
+declare 44 mac {
+    int  TkMacResizable (TkWindow *winPtr)
+}
+
+declare 45 mac {
+    void  TkMacSetEmbedRgn (TkWindow *winPtr, RgnHandle rgn)
+}
+
+declare 46 mac {
+    void  TkMacSetHelpMenuItemCount (void)
+}
+
+declare 47 mac {
+    void  TkMacSetScrollbarGrow (TkWindow *winPtr, int flag)
+}
+
+declare 48 mac {
+    void  TkMacSetUpClippingRgn (Drawable drawable)
+}
+
+declare 49 mac {
+    void  TkMacSetUpGraphicsPort (GC gc)
+}
+
+declare 50 mac {
+    void   TkMacUpdateClipRgn (TkWindow *winPtr)
+}
+
+declare 51 mac {
+    void  TkMacUnregisterMacWindow (GWorldPtr portPtr)
+}
+
+declare 52 mac {
+    int  TkMacUseMenuID (short macID)
+}
+
+declare 53 mac {
+    RgnHandle  TkMacVisableClipRgn (TkWindow *winPtr)
+}
+
+declare 54 mac {
+    void  TkMacWinBounds (TkWindow *winPtr, Rect *geometry)
+}
+
+declare 55 mac {
+    void  TkMacWindowOffset (WindowRef wRef, int *xOffset, int *yOffset)
+}
+
+declare 56 mac {
+    void  TkResumeClipboard (void)
+}
+
+declare 57 mac {
+    int   TkSetMacColor (unsigned long pixel, RGBColor *macColor)
+}
+
+declare 58 mac {
+    void   TkSetWMName (TkWindow *winPtr, Tk_Uid titleUid)
+}
+
+declare 59 mac {
+    void  TkSuspendClipboard (void)
+}
+
+declare 60 mac {
+    int  TkWMGrowToplevel (WindowRef whichWindow, Point start)
+}
+
+declare 61 mac {
+    int  TkMacZoomToplevel (WindowPtr whichWindow, Point where, short zoomPart)
+}
+
+declare 62 mac {
+    Tk_Window Tk_TopCoordsToWindow (Tk_Window tkwin, \
+           int rootX, int rootY, int *newX, int *newY)
+}
+
+declare 63 mac {
+    MacDrawable * TkMacContainerId (TkWindow *winPtr)
+}
+
+declare 64 mac {
+    MacDrawable * TkMacGetHostToplevel  (TkWindow *winPtr)
+}
+
+
+##############################################################################
+
+# Define the platform specific internal Xlib interfaces. These functions are
+# only available on the designated platform.
+
+interface tkIntXlib
+
+# X functions for Windows
+
+# This slot is reserved for use by the dash patch:
+#  declare 0 win {
+#      XSetDashes
+#  }
+declare 1 win {
+    XModifierKeymap* XGetModifierMapping (Display* d)
+}
+
+declare 2 win {
+    XImage * XCreateImage (Display* d, Visual* v, unsigned int ui1, int i1, \
+           int i2, char* cp, unsigned int ui2, unsigned int ui3, int i3, \
+           int i4)
+
+}
+
+declare 3 win {
+    XImage *XGetImage (Display* d, Drawable dr, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, unsigned long ul, int i3)
+}
+
+declare 4 win {
+    char *XGetAtomName (Display* d,Atom a)
+
+}
+
+declare 5 win {
+    char *XKeysymToString (KeySym k)
+}
+
+declare 6 win {
+    Colormap XCreateColormap (Display* d, Window w, Visual* v, int i)
+
+}
+
+declare 7 win {
+    Cursor XCreatePixmapCursor (Display* d, Pixmap p1, Pixmap p2, \
+           XColor* x1, XColor* x2, \
+           unsigned int ui1, unsigned int ui2)
+}
+
+declare 8 win {
+    Cursor XCreateGlyphCursor (Display* d, Font f1, Font f2, \
+           unsigned int ui1, unsigned int ui2, XColor* x1, XColor* x2)
+}
+
+declare 9 win {
+    GContext XGContextFromGC (GC g)
+}
+
+declare 10 win {
+    XHostAddress *XListHosts (Display* d, int* i, Bool* b)
+}
+
+# second parameter was of type KeyCode
+declare 11 win {
+    KeySym XKeycodeToKeysym (Display* d, unsigned int k, int i)
+}
+
+declare 12 win {
+    KeySym XStringToKeysym (_Xconst char* c)
+}
+
+declare 13 win {
+    Window XRootWindow (Display* d, int i)
+}
+
+declare 14 win {
+    XErrorHandler XSetErrorHandler  (XErrorHandler x)
+}
+
+declare 15 win {
+    Status XIconifyWindow (Display* d, Window w, int i)
+}
+
+declare 16 win {
+    Status XWithdrawWindow (Display* d, Window w, int i)
+}
+
+declare 17 win {
+    Status XGetWMColormapWindows (Display* d, Window w, Window** wpp, int* ip)
+}
+
+declare 18 win {
+    Status XAllocColor (Display* d, Colormap c, XColor* xp)
+}
+
+declare 19 win {
+    void XBell (Display* d, int i)
+}
+
+declare 20 win {
+    void XChangeProperty (Display* d, Window w, Atom a1, Atom a2, int i1, \
+           int i2, _Xconst unsigned char* c, int i3)
+}
+
+declare 21 win {
+    void XChangeWindowAttributes (Display* d, Window w, unsigned long ul, \
+           XSetWindowAttributes* x)
+}
+
+declare 22 win {
+    void XClearWindow (Display* d, Window w)
+}
+
+declare 23 win {
+    void XConfigureWindow (Display* d, Window w, unsigned int i, \
+           XWindowChanges* x)
+}
+
+declare 24 win {
+    void XCopyArea (Display* d, Drawable dr1, Drawable dr2, GC g, int i1, \
+           int i2, unsigned int ui1, \
+           unsigned int ui2, int i3, int i4)
+}
+
+declare 25 win {
+    void XCopyPlane (Display* d, Drawable dr1, Drawable dr2, GC g, int i1, \
+           int i2, unsigned int ui1, \
+           unsigned int ui2, int i3, int i4, unsigned long ul)
+}
+
+declare 26 win {
+    Pixmap XCreateBitmapFromData(Display* display, Drawable d, \
+           _Xconst char* data, unsigned int width,unsigned int height)
+}
+
+declare 27 win {
+    void XDefineCursor (Display* d, Window w, Cursor c)
+}
+
+declare 28 win {
+    void XDeleteProperty (Display* d, Window w, Atom a)
+}
+
+declare 29 win {
+    void XDestroyWindow (Display* d, Window w)
+}
+
+declare 30 win {
+    void XDrawArc (Display* d, Drawable dr, GC g, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, int i3, int i4)
+}
+
+declare 31 win {
+    void XDrawLines (Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2)
+}
+
+declare 32 win {
+    void XDrawRectangle (Display* d, Drawable dr, GC g, int i1, int i2,\
+           unsigned int ui1, unsigned int ui2)
+}
+
+declare 33 win {
+    void XFillArc (Display* d, Drawable dr, GC g, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, int i3, int i4)
+}
+
+declare 34 win {
+    void XFillPolygon (Display* d, Drawable dr, GC g, XPoint* x, \
+           int i1, int i2, int i3)
+}
+
+declare 35 win {
+    void XFillRectangles (Display* d, Drawable dr, GC g, XRectangle* x, int i)
+}
+
+declare 36 win {
+    void XForceScreenSaver (Display* d, int i)
+}
+
+declare 37 win {
+    void XFreeColormap (Display* d, Colormap c)
+}
+
+declare 38 win {
+    void XFreeColors (Display* d, Colormap c, \
+           unsigned long* ulp, int i, unsigned long ul)
+}
+
+declare 39 win {
+    void XFreeCursor (Display* d, Cursor c)
+}
+
+declare 40 win {
+    void XFreeModifiermap (XModifierKeymap* x)
+}
+
+declare 41 win {
+    Status XGetGeometry (Display* d, Drawable dr, Window* w, int* i1, \
+           int* i2, unsigned int* ui1, unsigned int* ui2, unsigned int* ui3, \
+           unsigned int* ui4)
+}
+
+declare 42 win {
+    void XGetInputFocus (Display* d, Window* w, int* i)
+}
+
+declare 43 win {
+    int XGetWindowProperty (Display* d, Window w, Atom a1, long l1, long l2, \
+           Bool b, Atom a2, Atom* ap, int* ip, unsigned long* ulp1, \
+           unsigned long* ulp2, unsigned char** cpp)
+}
+
+declare 44 win {
+    Status XGetWindowAttributes (Display* d, Window w, XWindowAttributes* x)
+}
+
+declare 45 win {
+    int XGrabKeyboard (Display* d, Window w, Bool b, int i1, int i2, Time t)
+}
+
+declare 46 win {
+    int XGrabPointer (Display* d, Window w1, Bool b, unsigned int ui, \
+           int i1, int i2, Window w2, Cursor c, Time t)
+}
+
+declare 47 win {
+    KeyCode XKeysymToKeycode (Display* d, KeySym k)
+}
+
+declare 48 win {
+    Status XLookupColor (Display* d, Colormap c1, _Xconst char* c2, \
+           XColor* x1, XColor* x2)
+}
+
+declare 49 win {
+    void XMapWindow (Display* d, Window w)
+}
+
+declare 50 win {
+    void XMoveResizeWindow (Display* d, Window w, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2)
+}
+
+declare 51 win {
+    void XMoveWindow (Display* d, Window w, int i1, int i2)
+}
+
+declare 52 win {
+    void XNextEvent (Display* d, XEvent* x)
+}
+
+declare 53 win {
+    void XPutBackEvent (Display* d, XEvent* x)
+}
+
+declare 54 win {
+    void XQueryColors (Display* d, Colormap c, XColor* x, int i)
+}
+
+declare 55 win {
+    Bool XQueryPointer (Display* d, Window w1, Window* w2, Window* w3, \
+           int* i1, int* i2, int* i3, int* i4, unsigned int* ui)
+}
+
+declare 56 win {
+    Status XQueryTree (Display* d, Window w1, Window* w2, Window* w3, \
+           Window** w4, unsigned int* ui)
+}
+
+declare 57 win {
+    void XRaiseWindow (Display* d, Window w)
+}
+
+declare 58 win {
+    void XRefreshKeyboardMapping (XMappingEvent* x)
+}
+
+declare 59 win {
+    void XResizeWindow (Display* d, Window w, unsigned int ui1, \
+           unsigned int ui2)
+}
+
+declare 60 win {
+    void XSelectInput (Display* d, Window w, long l)
+}
+
+declare 61 win {
+    Status XSendEvent (Display* d, Window w, Bool b, long l, XEvent* x)
+}
+
+declare 62 win {
+    void XSetCommand (Display* d, Window w, char** c, int i)
+}
+
+declare 63 win {
+    void XSetIconName (Display* d, Window w, _Xconst char* c)
+}
+
+declare 64 win {
+    void XSetInputFocus (Display* d, Window w, int i, Time t)
+}
+
+declare 65 win {
+    void XSetSelectionOwner (Display* d, Atom a, Window w, Time t)
+}
+
+declare 66 win {
+    void XSetWindowBackground (Display* d, Window w, unsigned long ul)
+}
+
+declare 67 win {
+    void XSetWindowBackgroundPixmap (Display* d, Window w, Pixmap p)
+}
+
+declare 68 win {
+    void XSetWindowBorder (Display* d, Window w, unsigned long ul)
+}
+
+declare 69 win {
+    void XSetWindowBorderPixmap (Display* d, Window w, Pixmap p)
+}
+
+declare 70 win {
+    void XSetWindowBorderWidth (Display* d, Window w, unsigned int ui)
+}
+
+declare 71 win {
+    void XSetWindowColormap (Display* d, Window w, Colormap c)
+}
+
+declare 72 win {
+    Bool XTranslateCoordinates (Display* d, Window w1, Window w2, int i1,\
+           int i2, int* i3, int* i4, Window* w3)
+}
+
+declare 73 win {
+    void XUngrabKeyboard (Display* d, Time t)
+}
+
+declare 74 win {
+    void XUngrabPointer (Display* d, Time t) 
+}
+
+declare 75 win {
+    void XUnmapWindow (Display* d, Window w)
+}
+
+declare 76 win {
+    void XWindowEvent (Display* d, Window w, long l, XEvent* x)
+}
+
+declare 77 win {
+    void XDestroyIC (XIC x)
+}
+
+declare 78 win {
+    Bool XFilterEvent (XEvent* x, Window w)
+}
+
+declare 79 win {
+    int XmbLookupString (XIC xi, XKeyPressedEvent* xk, \
+           char* c, int i, KeySym* k, Status* s)
+}
+
+declare 80 win {
+    void TkPutImage (unsigned long *colors, \
+           int ncolors, Display* display, Drawable d, \
+           GC gc, XImage* image, int src_x, int src_y, \
+           int dest_x, int dest_y, unsigned int width, \
+           unsigned int height)
+}
+# This slot is reserved for use by the clipping rectangle patch:
+#  declare 81 win {
+#      XSetClipRectangles(Display *display, GC gc, int clip_x_origin, \
+#          int clip_y_origin, XRectangle rectangles[], int n, int ordering)
+#  }
+
+declare 82 win {
+    Status XParseColor (Display *display, Colormap map, \
+          _Xconst char* spec, XColor *colorPtr)
+}
+
+declare 83 win {
+    GC XCreateGC(Display* display, Drawable d, \
+           unsigned long valuemask, XGCValues* values)
+}
+
+declare 84 win {
+    void XFreeGC(Display* display, GC gc)
+}
+
+declare 85 win {
+    Atom XInternAtom(Display* display,_Xconst char* atom_name, \
+           Bool only_if_exists)
+}
+
+declare 86 win {
+    void XSetBackground(Display* display, GC gc, \
+           unsigned long foreground)
+}
+
+declare 87 win {
+    void XSetForeground(Display* display, GC gc, \
+           unsigned long foreground)
+}
+
+declare 88 win {
+    void XSetClipMask(Display* display, GC gc, Pixmap pixmap)
+}
+
+declare 89 win {
+    void XSetClipOrigin(Display* display, GC gc, \
+           int clip_x_origin, int clip_y_origin)
+}
+
+declare 90 win {
+    void XSetTSOrigin(Display* display, GC gc, \
+           int ts_x_origin, int ts_y_origin)
+}
+
+declare 91 win {
+    void XChangeGC(Display * d, GC gc, unsigned long mask, XGCValues *values)
+}
+
+declare 92 win {
+    void XSetFont(Display *display, GC gc, Font font)
+}
+
+declare 93 win {
+    void XSetArcMode(Display *display, GC gc, int arc_mode)
+}
+
+declare 94 win {
+    void XSetStipple(Display *display, GC gc, Pixmap stipple)
+}
+
+declare 95 win {
+    void XSetFillRule(Display *display, GC gc, int fill_rule)
+}
+
+declare 96 win {
+    void XSetFillStyle(Display *display, GC gc, int fill_style)
+}
+
+declare 97 win {
+    void XSetFunction(Display *display, GC gc, int function)
+}
+
+declare 98 win {
+    void XSetLineAttributes(Display *display, GC gc, \
+           unsigned int line_width, int line_style, \
+           int cap_style, int join_style)
+}
+
+declare 99 win {
+    int _XInitImageFuncPtrs(XImage *image)
+}
+
+declare 100 win {
+    XIC XCreateIC(void)
+}
+
+declare 101 win {
+    XVisualInfo *XGetVisualInfo(Display* display, long vinfo_mask, \
+           XVisualInfo* vinfo_template, int* nitems_return)
+}
+
+declare 102 win {
+    void XSetWMClientMachine(Display* display, Window w, XTextProperty* text_prop)
+}
+
+declare 103 win {
+    Status XStringListToTextProperty(char** list, int count, \
+           XTextProperty* text_prop_return)
+}
+
+# X functions for Mac
+
+# This slot is reserved for use by the dash patch:
+#  declare 0 win {
+#      XSetDashes
+#  }
+
+declare 1 mac {
+    XModifierKeymap* XGetModifierMapping (Display* d)
+}
+
+declare 2 mac {
+    XImage * XCreateImage (Display* d, Visual* v, unsigned int ui1, int i1, \
+           int i2, char* cp, unsigned int ui2, unsigned int ui3, int i3, \
+           int i4)
+
+}
+
+declare 3 mac {
+    XImage *XGetImage (Display* d, Drawable dr, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, unsigned long ul, int i3)
+}
+
+declare 4 mac {
+    char *XGetAtomName (Display* d,Atom a)
+
+}
+
+declare 5 mac {
+    char *XKeysymToString (KeySym k)
+}
+
+declare 6 mac {
+    Colormap XCreateColormap (Display* d, Window w, Visual* v, int i)
+
+}
+
+declare 7 mac {
+    GContext XGContextFromGC (GC g)
+}
+
+declare 8 mac {
+    KeySym XKeycodeToKeysym (Display* d, KeyCode k, int i)
+}
+
+declare 9 mac {
+    KeySym XStringToKeysym (_Xconst char* c)
+}
+
+declare 10 mac {
+    Window XRootWindow (Display* d, int i)
+}
+
+declare 11 mac {
+    XErrorHandler XSetErrorHandler  (XErrorHandler x)
+}
+
+declare 12 mac {
+    Status XAllocColor (Display* d, Colormap c, XColor* xp)
+}
+
+declare 13 mac {
+    void XBell (Display* d, int i)
+}
+
+declare 14 mac {
+    void XChangeProperty (Display* d, Window w, Atom a, Atom a, int i1, \
+           int i2, _Xconst unsigned char* c, int i3)
+}
+
+declare 15 mac {
+    void XChangeWindowAttributes (Display* d, Window w, unsigned long ul, \
+           XSetWindowAttributes* x)
+}
+
+declare 16 mac {
+    void XConfigureWindow (Display* d, Window w, unsigned int i, \
+           XWindowChanges* x)
+}
+
+declare 17 mac {
+    void XCopyArea (Display* d, Drawable dr1, Drawable dr2, GC g, int i1, \
+           int i2, unsigned int ui1, \
+           unsigned int ui2, int i3, int i4)
+}
+
+declare 18 mac {
+    void XCopyPlane (Display* d, Drawable dr1, Drawable dr2, GC g, int i1, \
+           int i2, unsigned int ui1, \
+           unsigned int ui2, int i3, int i4, unsigned long ul)
+}
+
+declare 19 mac {
+    Pixmap XCreateBitmapFromData(Display* display, Drawable d, \
+           _Xconst char* data, unsigned int width,unsigned int height)
+}
+
+declare 20 mac {
+    void XDefineCursor (Display* d, Window w, Cursor c)
+}
+
+declare 21 mac {
+    void XDestroyWindow (Display* d, Window w)
+}
+
+declare 22 mac {
+    void XDrawArc (Display* d, Drawable dr, GC g, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, int i3, int i4)
+}
+
+declare 23 mac {
+    void XDrawLines (Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2)
+}
+
+declare 24 mac {
+    void XDrawRectangle (Display* d, Drawable dr, GC g, int i1, int i2,\
+           unsigned int ui1, unsigned int ui2)
+}
+
+declare 25 mac {
+    void XFillArc (Display* d, Drawable dr, GC g, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2, int i3, int i4)
+}
+
+declare 26 mac {
+    void XFillPolygon (Display* d, Drawable dr, GC g, XPoint* x, \
+           int i1, int i2, int i3)
+}
+
+declare 27 mac {
+    void XFillRectangles (Display* d, Drawable dr, GC g, XRectangle* x, int i)
+}
+
+declare 28 mac {
+    void XFreeColormap (Display* d, Colormap c)
+}
+
+declare 29 mac {
+    void XFreeColors (Display* d, Colormap c, \
+           unsigned long* ulp, int i, unsigned long ul)
+}
+
+declare 30 mac {
+    void XFreeModifiermap (XModifierKeymap* x)
+}
+
+declare 31 mac {
+    Status XGetGeometry (Display* d, Drawable dr, Window* w, int* i1, \
+           int* i2, unsigned int* ui1, unsigned int* ui2, unsigned int* ui3, \
+           unsigned int* ui4)
+}
+
+declare 32 mac {
+    int XGetWindowProperty (Display* d, Window w, Atom a1, long l1, long l2, \
+           Bool b, Atom a2, Atom* ap, int* ip, unsigned long* ulp1, \
+           unsigned long* ulp2, unsigned char** cpp)
+}
+
+declare 33 mac {
+    int XGrabKeyboard (Display* d, Window w, Bool b, int i1, int i2, Time t)
+}
+
+declare 34 mac {
+    int XGrabPointer (Display* d, Window w1, Bool b, unsigned int ui, \
+           int i1, int i2, Window w2, Cursor c, Time t)
+}
+
+declare 35 mac {
+    KeyCode XKeysymToKeycode (Display* d, KeySym k)
+}
+
+declare 36 mac {
+    void XMapWindow (Display* d, Window w)
+}
+
+declare 37 mac {
+    void XMoveResizeWindow (Display* d, Window w, int i1, int i2, \
+           unsigned int ui1, unsigned int ui2)
+}
+
+declare 38 mac {
+    void XMoveWindow (Display* d, Window w, int i1, int i2)
+}
+
+declare 39 mac {
+    Bool XQueryPointer (Display* d, Window w1, Window* w2, Window* w3, \
+           int* i1, int* i2, int* i3, int* i4, unsigned int* ui)
+}
+
+declare 40 mac {
+    void XRaiseWindow (Display* d, Window w)
+}
+
+declare 41 mac {
+    void XRefreshKeyboardMapping (XMappingEvent* x)
+}
+
+declare 42 mac {
+    void XResizeWindow (Display* d, Window w, unsigned int ui1, \
+           unsigned int ui2)
+}
+
+declare 43 mac {
+    void XSelectInput (Display* d, Window w, long l)
+}
+
+declare 44 mac {
+    Status XSendEvent (Display* d, Window w, Bool b, long l, XEvent* x)
+}
+
+declare 45 mac {
+    void XSetIconName (Display* d, Window w, _Xconst char* c)
+}
+
+declare 46 mac {
+    void XSetInputFocus (Display* d, Window w, int i, Time t)
+}
+
+declare 47 mac {
+    void XSetSelectionOwner (Display* d, Atom a, Window w, Time t)
+}
+
+declare 48 mac {
+    void XSetWindowBackground (Display* d, Window w, unsigned long ul)
+}
+
+declare 49 mac {
+    void XSetWindowBackgroundPixmap (Display* d, Window w, Pixmap p)
+}
+
+declare 50 mac {
+    void XSetWindowBorder (Display* d, Window w, unsigned long ul)
+}
+
+declare 51 mac {
+    void XSetWindowBorderPixmap (Display* d, Window w, Pixmap p)
+}
+
+declare 52 mac {
+    void XSetWindowBorderWidth (Display* d, Window w, unsigned int ui)
+}
+
+declare 53 mac {
+    void XSetWindowColormap (Display* d, Window w, Colormap c)
+}
+
+declare 54 mac {
+    void XUngrabKeyboard (Display* d, Time t)
+}
+
+declare 55 mac {
+    void XUngrabPointer (Display* d, Time t) 
+}
+
+declare 56 mac {
+    void XUnmapWindow (Display* d, Window w)
+}
+
+declare 57 mac {
+    void TkPutImage (unsigned long *colors, \
+           int ncolors, Display* display, Drawable d, \
+           GC gc, XImage* image, int src_x, int src_y, \
+           int dest_x, int dest_y, unsigned int width, \
+           unsigned int height)
+} 
+declare 58 mac {
+    Status XParseColor (Display *display, Colormap map, \
+          _Xconst char* spec, XColor *colorPtr)
+}
+
+declare 59 mac {
+    GC XCreateGC(Display* display, Drawable d, \
+           unsigned long valuemask, XGCValues* values)
+}
+
+declare 60 mac {
+    void XFreeGC(Display* display, GC gc)
+}
+
+declare 61 mac {
+    Atom XInternAtom(Display* display,_Xconst char* atom_name, \
+           Bool only_if_exists)
+}
+
+declare 62 mac {
+    void XSetBackground(Display* display, GC gc, \
+           unsigned long foreground)
+}
+
+declare 63 mac {
+    void XSetForeground(Display* display, GC gc, \
+           unsigned long foreground)
+}
+
+declare 64 mac {
+    void XSetClipMask(Display* display, GC gc, Pixmap pixmap)
+}
+
+declare 65 mac {
+    void XSetClipOrigin(Display* display, GC gc, \
+           int clip_x_origin, int clip_y_origin)
+}
+
+declare 66 mac {
+    void XSetTSOrigin(Display* display, GC gc, \
+           int ts_x_origin, int ts_y_origin)
+}
+
+declare 67 mac {
+    void XChangeGC(Display * d, GC gc, unsigned long mask, XGCValues *values)
+}
+
+declare 68 mac {
+    void XSetFont(Display *display, GC gc, Font font)
+}
+
+declare 69 mac {
+    void XSetArcMode(Display *display, GC gc, int arc_mode)
+}
+
+declare 70 mac {
+    void XSetStipple(Display *display, GC gc, Pixmap stipple)
+}
+
+declare 71 mac {
+    void XSetFillRule(Display *display, GC gc, int fill_rule)
+}
+
+declare 72 mac {
+    void XSetFillStyle(Display *display, GC gc, int fill_style)
+}
+
+declare 73 mac {
+    void XSetFunction(Display *display, GC gc, int function)
+}
+
+declare 74 mac {
+    void XSetLineAttributes(Display *display, GC gc, \
+           unsigned int line_width, int line_style, \
+           int cap_style, int join_style)
+}
+
+declare 75 mac {
+    int _XInitImageFuncPtrs(XImage *image)
+}
+
+declare 76 mac {
+    XIC XCreateIC(void)
+}
+
+declare 77 mac {
+    XVisualInfo *XGetVisualInfo(Display* display, long vinfo_mask, \
+           XVisualInfo* vinfo_template, int* nitems_return)
+}
+
+declare 78 mac {
+    void XSetWMClientMachine(Display* display, Window w, \
+           XTextProperty* text_prop)
+}
+
+declare 79 mac {
+    Status XStringListToTextProperty(char** list, int count, \
+           XTextProperty* text_prop_return)
+}
+declare 80 mac {
+    void XDrawSegments(Display *display, Drawable  d, GC gc, \
+           XSegment *segments, int  nsegments)
+}
+declare 81 mac {
+    void  XForceScreenSaver(Display* display, int mode)
+}
+
diff --git a/tk/generic/tkIntDecls.h b/tk/generic/tkIntDecls.h
new file mode 100644 (file)
index 0000000..0e37d59
--- /dev/null
@@ -0,0 +1,1485 @@
+/*
+ * tkIntDecls.h --
+ *
+ *     This file contains the declarations for all unsupported
+ *     functions that are exported by the Tk library.  These
+ *     interfaces are not guaranteed to remain the same between
+ *     versions.  Use at your own risk.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#ifndef _TKINTDECLS
+#define _TKINTDECLS
+
+#ifdef BUILD_tk
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tkInt.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+/*
+ * Exported function declarations:
+ */
+
+/* 0 */
+EXTERN TkWindow *      TkAllocWindow _ANSI_ARGS_((TkDisplay * dispPtr, 
+                               int screenNum, TkWindow * parentPtr));
+/* 1 */
+EXTERN void            TkBezierPoints _ANSI_ARGS_((double control[], 
+                               int numSteps, double * coordPtr));
+/* 2 */
+EXTERN void            TkBezierScreenPoints _ANSI_ARGS_((Tk_Canvas canvas, 
+                               double control[], int numSteps, 
+                               XPoint * xPointPtr));
+/* 3 */
+EXTERN void            TkBindDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 4 */
+EXTERN void            TkBindEventProc _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * eventPtr));
+/* 5 */
+EXTERN void            TkBindFree _ANSI_ARGS_((TkMainInfo * mainPtr));
+/* 6 */
+EXTERN void            TkBindInit _ANSI_ARGS_((TkMainInfo * mainPtr));
+/* 7 */
+EXTERN void            TkChangeEventWindow _ANSI_ARGS_((XEvent * eventPtr, 
+                               TkWindow * winPtr));
+/* 8 */
+EXTERN int             TkClipInit _ANSI_ARGS_((Tcl_Interp * interp, 
+                               TkDisplay * dispPtr));
+/* 9 */
+EXTERN void            TkComputeAnchor _ANSI_ARGS_((Tk_Anchor anchor, 
+                               Tk_Window tkwin, int padX, int padY, 
+                               int innerWidth, int innerHeight, int * xPtr, 
+                               int * yPtr));
+/* 10 */
+EXTERN int             TkCopyAndGlobalEval _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * script));
+/* 11 */
+EXTERN unsigned long   TkCreateBindingProcedure _ANSI_ARGS_((
+                               Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable, 
+                               ClientData object, char * eventString, 
+                               TkBindEvalProc * evalProc, 
+                               TkBindFreeProc * freeProc, 
+                               ClientData clientData));
+/* 12 */
+EXTERN TkCursor *      TkCreateCursorFromData _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * source, char * mask, int width, 
+                               int height, int xHot, int yHot, XColor fg, 
+                               XColor bg));
+/* 13 */
+EXTERN int             TkCreateFrame _ANSI_ARGS_((ClientData clientData, 
+                               Tcl_Interp * interp, int argc, char ** argv, 
+                               int toplevel, char * appName));
+/* 14 */
+EXTERN Tk_Window       TkCreateMainWindow _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * screenName, char * baseName));
+/* 15 */
+EXTERN Time            TkCurrentTime _ANSI_ARGS_((TkDisplay * dispPtr));
+/* 16 */
+EXTERN void            TkDeleteAllImages _ANSI_ARGS_((TkMainInfo * mainPtr));
+/* 17 */
+EXTERN void            TkDoConfigureNotify _ANSI_ARGS_((TkWindow * winPtr));
+/* 18 */
+EXTERN void            TkDrawInsetFocusHighlight _ANSI_ARGS_((
+                               Tk_Window tkwin, GC gc, int width, 
+                               Drawable drawable, int padding));
+/* 19 */
+EXTERN void            TkEventDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 20 */
+EXTERN void            TkFillPolygon _ANSI_ARGS_((Tk_Canvas canvas, 
+                               double * coordPtr, int numPoints, 
+                               Display * display, Drawable drawable, GC gc, 
+                               GC outlineGC));
+/* 21 */
+EXTERN int             TkFindStateNum _ANSI_ARGS_((Tcl_Interp * interp, 
+                               CONST char * option, 
+                               CONST TkStateMap * mapPtr, 
+                               CONST char * strKey));
+/* 22 */
+EXTERN char *          TkFindStateString _ANSI_ARGS_((
+                               CONST TkStateMap * mapPtr, int numKey));
+/* 23 */
+EXTERN void            TkFocusDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 24 */
+EXTERN int             TkFocusFilterEvent _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * eventPtr));
+/* 25 */
+EXTERN TkWindow *      TkFocusKeyEvent _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * eventPtr));
+/* 26 */
+EXTERN void            TkFontPkgInit _ANSI_ARGS_((TkMainInfo * mainPtr));
+/* 27 */
+EXTERN void            TkFontPkgFree _ANSI_ARGS_((TkMainInfo * mainPtr));
+/* 28 */
+EXTERN void            TkFreeBindingTags _ANSI_ARGS_((TkWindow * winPtr));
+/* 29 */
+EXTERN void            TkpFreeCursor _ANSI_ARGS_((TkCursor * cursorPtr));
+/* 30 */
+EXTERN char *          TkGetBitmapData _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * string, char * fileName, 
+                               int * widthPtr, int * heightPtr, 
+                               int * hotXPtr, int * hotYPtr));
+/* 31 */
+EXTERN void            TkGetButtPoints _ANSI_ARGS_((double p1[], 
+                               double p2[], double width, int project, 
+                               double m1[], double m2[]));
+/* 32 */
+EXTERN TkCursor *      TkGetCursorByName _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tk_Uid string));
+/* 33 */
+EXTERN char *          TkGetDefaultScreenName _ANSI_ARGS_((
+                               Tcl_Interp * interp, char * screenName));
+/* 34 */
+EXTERN TkDisplay *     TkGetDisplay _ANSI_ARGS_((Display * display));
+/* 35 */
+EXTERN int             TkGetDisplayOf _ANSI_ARGS_((Tcl_Interp * interp, 
+                               int objc, Tcl_Obj *CONST objv[], 
+                               Tk_Window * tkwinPtr));
+/* 36 */
+EXTERN TkWindow *      TkGetFocusWin _ANSI_ARGS_((TkWindow * winPtr));
+/* 37 */
+EXTERN int             TkGetInterpNames _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin));
+/* 38 */
+EXTERN int             TkGetMiterPoints _ANSI_ARGS_((double p1[], 
+                               double p2[], double p3[], double width, 
+                               double m1[], double m2[]));
+/* 39 */
+EXTERN void            TkGetPointerCoords _ANSI_ARGS_((Tk_Window tkwin, 
+                               int * xPtr, int * yPtr));
+/* 40 */
+EXTERN void            TkGetServerInfo _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin));
+/* 41 */
+EXTERN void            TkGrabDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 42 */
+EXTERN int             TkGrabState _ANSI_ARGS_((TkWindow * winPtr));
+/* 43 */
+EXTERN void            TkIncludePoint _ANSI_ARGS_((Tk_Item * itemPtr, 
+                               double * pointPtr));
+/* 44 */
+EXTERN void            TkInOutEvents _ANSI_ARGS_((XEvent * eventPtr, 
+                               TkWindow * sourcePtr, TkWindow * destPtr, 
+                               int leaveType, int enterType, 
+                               Tcl_QueuePosition position));
+/* 45 */
+EXTERN void            TkInstallFrameMenu _ANSI_ARGS_((Tk_Window tkwin));
+/* 46 */
+EXTERN char *          TkKeysymToString _ANSI_ARGS_((KeySym keysym));
+/* 47 */
+EXTERN int             TkLineToArea _ANSI_ARGS_((double end1Ptr[], 
+                               double end2Ptr[], double rectPtr[]));
+/* 48 */
+EXTERN double          TkLineToPoint _ANSI_ARGS_((double end1Ptr[], 
+                               double end2Ptr[], double pointPtr[]));
+/* 49 */
+EXTERN int             TkMakeBezierCurve _ANSI_ARGS_((Tk_Canvas canvas, 
+                               double * pointPtr, int numPoints, 
+                               int numSteps, XPoint xPoints[], 
+                               double dblPoints[]));
+/* 50 */
+EXTERN void            TkMakeBezierPostscript _ANSI_ARGS_((
+                               Tcl_Interp * interp, Tk_Canvas canvas, 
+                               double * pointPtr, int numPoints));
+/* 51 */
+EXTERN void            TkOptionClassChanged _ANSI_ARGS_((TkWindow * winPtr));
+/* 52 */
+EXTERN void            TkOptionDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 53 */
+EXTERN int             TkOvalToArea _ANSI_ARGS_((double * ovalPtr, 
+                               double * rectPtr));
+/* 54 */
+EXTERN double          TkOvalToPoint _ANSI_ARGS_((double ovalPtr[], 
+                               double width, int filled, double pointPtr[]));
+/* 55 */
+EXTERN int             TkpChangeFocus _ANSI_ARGS_((TkWindow * winPtr, 
+                               int force));
+/* 56 */
+EXTERN void            TkpCloseDisplay _ANSI_ARGS_((TkDisplay * dispPtr));
+/* 57 */
+EXTERN void            TkpClaimFocus _ANSI_ARGS_((TkWindow * topLevelPtr, 
+                               int force));
+/* 58 */
+EXTERN void            TkpDisplayWarning _ANSI_ARGS_((char * msg, 
+                               char * title));
+/* 59 */
+EXTERN void            TkpGetAppName _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tcl_DString * name));
+/* 60 */
+EXTERN TkWindow *      TkpGetOtherWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 61 */
+EXTERN TkWindow *      TkpGetWrapperWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 62 */
+EXTERN int             TkpInit _ANSI_ARGS_((Tcl_Interp * interp));
+/* 63 */
+EXTERN void            TkpInitializeMenuBindings _ANSI_ARGS_((
+                               Tcl_Interp * interp, 
+                               Tk_BindingTable bindingTable));
+/* 64 */
+EXTERN void            TkpMakeContainer _ANSI_ARGS_((Tk_Window tkwin));
+/* 65 */
+EXTERN void            TkpMakeMenuWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int transient));
+/* 66 */
+EXTERN Window          TkpMakeWindow _ANSI_ARGS_((TkWindow * winPtr, 
+                               Window parent));
+/* 67 */
+EXTERN void            TkpMenuNotifyToplevelCreate _ANSI_ARGS_((
+                               Tcl_Interp * interp1, char * menuName));
+/* 68 */
+EXTERN TkDisplay *     TkpOpenDisplay _ANSI_ARGS_((char * display_name));
+/* 69 */
+EXTERN int             TkPointerEvent _ANSI_ARGS_((XEvent * eventPtr, 
+                               TkWindow * winPtr));
+/* 70 */
+EXTERN int             TkPolygonToArea _ANSI_ARGS_((double * polyPtr, 
+                               int numPoints, double * rectPtr));
+/* 71 */
+EXTERN double          TkPolygonToPoint _ANSI_ARGS_((double * polyPtr, 
+                               int numPoints, double * pointPtr));
+/* 72 */
+EXTERN int             TkPositionInTree _ANSI_ARGS_((TkWindow * winPtr, 
+                               TkWindow * treePtr));
+/* 73 */
+EXTERN void            TkpRedirectKeyEvent _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * eventPtr));
+/* 74 */
+EXTERN void            TkpSetMainMenubar _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * menuName));
+/* 75 */
+EXTERN int             TkpUseWindow _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * string));
+/* 76 */
+EXTERN int             TkpWindowWasRecentlyDeleted _ANSI_ARGS_((Window win, 
+                               TkDisplay * dispPtr));
+/* 77 */
+EXTERN void            TkQueueEventForAllChildren _ANSI_ARGS_((
+                               TkWindow * winPtr, XEvent * eventPtr));
+/* 78 */
+EXTERN int             TkReadBitmapFile _ANSI_ARGS_((Display* display, 
+                               Drawable d, CONST char* filename, 
+                               unsigned int* width_return, 
+                               unsigned int* height_return, 
+                               Pixmap* bitmap_return, int* x_hot_return, 
+                               int* y_hot_return));
+/* 79 */
+EXTERN int             TkScrollWindow _ANSI_ARGS_((Tk_Window tkwin, GC gc, 
+                               int x, int y, int width, int height, int dx, 
+                               int dy, TkRegion damageRgn));
+/* 80 */
+EXTERN void            TkSelDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 81 */
+EXTERN void            TkSelEventProc _ANSI_ARGS_((Tk_Window tkwin, 
+                               XEvent * eventPtr));
+/* 82 */
+EXTERN void            TkSelInit _ANSI_ARGS_((Tk_Window tkwin));
+/* 83 */
+EXTERN void            TkSelPropProc _ANSI_ARGS_((XEvent * eventPtr));
+/* 84 */
+EXTERN void            TkSetClassProcs _ANSI_ARGS_((Tk_Window tkwin, 
+                               TkClassProcs * procs, 
+                               ClientData instanceData));
+/* 85 */
+EXTERN void            TkSetWindowMenuBar _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, char * oldMenuName, 
+                               char * menuName));
+/* 86 */
+EXTERN KeySym          TkStringToKeysym _ANSI_ARGS_((char * name));
+/* 87 */
+EXTERN int             TkThickPolyLineToArea _ANSI_ARGS_((double * coordPtr, 
+                               int numPoints, double width, int capStyle, 
+                               int joinStyle, double * rectPtr));
+/* 88 */
+EXTERN void            TkWmAddToColormapWindows _ANSI_ARGS_((
+                               TkWindow * winPtr));
+/* 89 */
+EXTERN void            TkWmDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 90 */
+EXTERN TkWindow *      TkWmFocusToplevel _ANSI_ARGS_((TkWindow * winPtr));
+/* 91 */
+EXTERN void            TkWmMapWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 92 */
+EXTERN void            TkWmNewWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 93 */
+EXTERN void            TkWmProtocolEventProc _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * evenvPtr));
+/* 94 */
+EXTERN void            TkWmRemoveFromColormapWindows _ANSI_ARGS_((
+                               TkWindow * winPtr));
+/* 95 */
+EXTERN void            TkWmRestackToplevel _ANSI_ARGS_((TkWindow * winPtr, 
+                               int aboveBelow, TkWindow * otherPtr));
+/* 96 */
+EXTERN void            TkWmSetClass _ANSI_ARGS_((TkWindow * winPtr));
+/* 97 */
+EXTERN void            TkWmUnmapWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 98 */
+EXTERN Tcl_Obj *       TkDebugBitmap _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 99 */
+EXTERN Tcl_Obj *       TkDebugBorder _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 100 */
+EXTERN Tcl_Obj *       TkDebugCursor _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 101 */
+EXTERN Tcl_Obj *       TkDebugColor _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 102 */
+EXTERN Tcl_Obj *       TkDebugConfig _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_OptionTable table));
+/* 103 */
+EXTERN Tcl_Obj *       TkDebugFont _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * name));
+/* 104 */
+EXTERN int             TkFindStateNumObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tcl_Obj * optionPtr, 
+                               CONST TkStateMap * mapPtr, Tcl_Obj * keyPtr));
+/* 105 */
+EXTERN Tcl_HashTable * TkGetBitmapPredefTable _ANSI_ARGS_((void));
+/* 106 */
+EXTERN TkDisplay *     TkGetDisplayList _ANSI_ARGS_((void));
+/* 107 */
+EXTERN TkMainInfo *    TkGetMainInfoList _ANSI_ARGS_((void));
+/* 108 */
+EXTERN int             TkGetWindowFromObj _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Window tkwin, Tcl_Obj * objPtr, 
+                               Tk_Window * windowPtr));
+/* 109 */
+EXTERN char *          TkpGetString _ANSI_ARGS_((TkWindow * winPtr, 
+                               XEvent * eventPtr, Tcl_DString * dsPtr));
+/* 110 */
+EXTERN void            TkpGetSubFonts _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Tk_Font tkfont));
+/* 111 */
+EXTERN Tcl_Obj *       TkpGetSystemDefault _ANSI_ARGS_((Tk_Window tkwin, 
+                               char * dbName, char * className));
+/* 112 */
+EXTERN void            TkpMenuThreadInit _ANSI_ARGS_((void));
+#ifdef __WIN32__
+/* 113 */
+EXTERN void            TkClipBox _ANSI_ARGS_((TkRegion rgn, 
+                               XRectangle* rect_return));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 113 */
+EXTERN void            TkClipBox _ANSI_ARGS_((TkRegion rgn, 
+                               XRectangle* rect_return));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 114 */
+EXTERN TkRegion                TkCreateRegion _ANSI_ARGS_((void));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 114 */
+EXTERN TkRegion                TkCreateRegion _ANSI_ARGS_((void));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 115 */
+EXTERN void            TkDestroyRegion _ANSI_ARGS_((TkRegion rgn));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 115 */
+EXTERN void            TkDestroyRegion _ANSI_ARGS_((TkRegion rgn));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 116 */
+EXTERN void            TkIntersectRegion _ANSI_ARGS_((TkRegion sra, 
+                               TkRegion srcb, TkRegion dr_return));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 116 */
+EXTERN void            TkIntersectRegion _ANSI_ARGS_((TkRegion sra, 
+                               TkRegion srcb, TkRegion dr_return));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 117 */
+EXTERN int             TkRectInRegion _ANSI_ARGS_((TkRegion rgn, int x, 
+                               int y, unsigned int width, 
+                               unsigned int height));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 117 */
+EXTERN int             TkRectInRegion _ANSI_ARGS_((TkRegion rgn, int x, 
+                               int y, unsigned int width, 
+                               unsigned int height));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 118 */
+EXTERN void            TkSetRegion _ANSI_ARGS_((Display* display, GC gc, 
+                               TkRegion rgn));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 118 */
+EXTERN void            TkSetRegion _ANSI_ARGS_((Display* display, GC gc, 
+                               TkRegion rgn));
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+/* 119 */
+EXTERN void            TkUnionRectWithRegion _ANSI_ARGS_((XRectangle* rect, 
+                               TkRegion src, TkRegion dr_return));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 119 */
+EXTERN void            TkUnionRectWithRegion _ANSI_ARGS_((XRectangle* rect, 
+                               TkRegion src, TkRegion dr_return));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 120 */
+EXTERN void            TkGenerateActivateEvents _ANSI_ARGS_((
+                               TkWindow * winPtr, int active));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 121 */
+EXTERN Pixmap          TkpCreateNativeBitmap _ANSI_ARGS_((Display * display, 
+                               char * source));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 122 */
+EXTERN void            TkpDefineNativeBitmaps _ANSI_ARGS_((void));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 123 */
+EXTERN unsigned long   TkpGetMS _ANSI_ARGS_((void));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 124 */
+EXTERN Pixmap          TkpGetNativeAppBitmap _ANSI_ARGS_((Display * display, 
+                               CONST char * name, int * width, int * height));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 125 */
+EXTERN void            TkPointerDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 126 */
+EXTERN void            TkpSetCapture _ANSI_ARGS_((TkWindow * winPtr));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 127 */
+EXTERN void            TkpSetCursor _ANSI_ARGS_((TkpCursor cursor));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 128 */
+EXTERN void            TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, 
+                               int state));
+#endif /* MAC_TCL */
+/* Slot 129 is reserved */
+#ifdef MAC_TCL
+/* 130 */
+EXTERN Window          TkGetTransientMaster _ANSI_ARGS_((TkWindow * winPtr));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 131 */
+EXTERN int             TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, 
+                               Window window, unsigned int state));
+#endif /* MAC_TCL */
+/* Slot 132 is reserved */
+#ifdef MAC_TCL
+/* 133 */
+EXTERN void            TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin));
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+/* 134 */
+EXTERN void            TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, 
+                               int x, int y, int width, int height, 
+                               int flags));
+#endif /* MAC_TCL */
+/* 135 */
+EXTERN void            TkpDrawHighlightBorder _ANSI_ARGS_((Tk_Window tkwin, 
+                               GC fgGC, GC bgGC, int highlightWidth, 
+                               Drawable drawable));
+/* 136 */
+EXTERN void            TkSetFocusWin _ANSI_ARGS_((TkWindow * winPtr, 
+                               int force));
+/* 137 */
+EXTERN void            TkpSetKeycodeAndState _ANSI_ARGS_((Tk_Window tkwin, 
+                               KeySym keySym, XEvent * eventPtr));
+/* 138 */
+EXTERN KeySym          TkpGetKeySym _ANSI_ARGS_((TkDisplay * dispPtr, 
+                               XEvent * eventPtr));
+/* 139 */
+EXTERN void            TkpInitKeymapInfo _ANSI_ARGS_((TkDisplay * dispPtr));
+
+typedef struct TkIntStubs {
+    int magic;
+    struct TkIntStubHooks *hooks;
+
+    TkWindow * (*tkAllocWindow) _ANSI_ARGS_((TkDisplay * dispPtr, int screenNum, TkWindow * parentPtr)); /* 0 */
+    void (*tkBezierPoints) _ANSI_ARGS_((double control[], int numSteps, double * coordPtr)); /* 1 */
+    void (*tkBezierScreenPoints) _ANSI_ARGS_((Tk_Canvas canvas, double control[], int numSteps, XPoint * xPointPtr)); /* 2 */
+    void (*tkBindDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 3 */
+    void (*tkBindEventProc) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr)); /* 4 */
+    void (*tkBindFree) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 5 */
+    void (*tkBindInit) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 6 */
+    void (*tkChangeEventWindow) _ANSI_ARGS_((XEvent * eventPtr, TkWindow * winPtr)); /* 7 */
+    int (*tkClipInit) _ANSI_ARGS_((Tcl_Interp * interp, TkDisplay * dispPtr)); /* 8 */
+    void (*tkComputeAnchor) _ANSI_ARGS_((Tk_Anchor anchor, Tk_Window tkwin, int padX, int padY, int innerWidth, int innerHeight, int * xPtr, int * yPtr)); /* 9 */
+    int (*tkCopyAndGlobalEval) _ANSI_ARGS_((Tcl_Interp * interp, char * script)); /* 10 */
+    unsigned long (*tkCreateBindingProcedure) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable, ClientData object, char * eventString, TkBindEvalProc * evalProc, TkBindFreeProc * freeProc, ClientData clientData)); /* 11 */
+    TkCursor * (*tkCreateCursorFromData) _ANSI_ARGS_((Tk_Window tkwin, char * source, char * mask, int width, int height, int xHot, int yHot, XColor fg, XColor bg)); /* 12 */
+    int (*tkCreateFrame) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int argc, char ** argv, int toplevel, char * appName)); /* 13 */
+    Tk_Window (*tkCreateMainWindow) _ANSI_ARGS_((Tcl_Interp * interp, char * screenName, char * baseName)); /* 14 */
+    Time (*tkCurrentTime) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 15 */
+    void (*tkDeleteAllImages) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 16 */
+    void (*tkDoConfigureNotify) _ANSI_ARGS_((TkWindow * winPtr)); /* 17 */
+    void (*tkDrawInsetFocusHighlight) _ANSI_ARGS_((Tk_Window tkwin, GC gc, int width, Drawable drawable, int padding)); /* 18 */
+    void (*tkEventDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 19 */
+    void (*tkFillPolygon) _ANSI_ARGS_((Tk_Canvas canvas, double * coordPtr, int numPoints, Display * display, Drawable drawable, GC gc, GC outlineGC)); /* 20 */
+    int (*tkFindStateNum) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * option, CONST TkStateMap * mapPtr, CONST char * strKey)); /* 21 */
+    char * (*tkFindStateString) _ANSI_ARGS_((CONST TkStateMap * mapPtr, int numKey)); /* 22 */
+    void (*tkFocusDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 23 */
+    int (*tkFocusFilterEvent) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr)); /* 24 */
+    TkWindow * (*tkFocusKeyEvent) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr)); /* 25 */
+    void (*tkFontPkgInit) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 26 */
+    void (*tkFontPkgFree) _ANSI_ARGS_((TkMainInfo * mainPtr)); /* 27 */
+    void (*tkFreeBindingTags) _ANSI_ARGS_((TkWindow * winPtr)); /* 28 */
+    void (*tkpFreeCursor) _ANSI_ARGS_((TkCursor * cursorPtr)); /* 29 */
+    char * (*tkGetBitmapData) _ANSI_ARGS_((Tcl_Interp * interp, char * string, char * fileName, int * widthPtr, int * heightPtr, int * hotXPtr, int * hotYPtr)); /* 30 */
+    void (*tkGetButtPoints) _ANSI_ARGS_((double p1[], double p2[], double width, int project, double m1[], double m2[])); /* 31 */
+    TkCursor * (*tkGetCursorByName) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid string)); /* 32 */
+    char * (*tkGetDefaultScreenName) _ANSI_ARGS_((Tcl_Interp * interp, char * screenName)); /* 33 */
+    TkDisplay * (*tkGetDisplay) _ANSI_ARGS_((Display * display)); /* 34 */
+    int (*tkGetDisplayOf) _ANSI_ARGS_((Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[], Tk_Window * tkwinPtr)); /* 35 */
+    TkWindow * (*tkGetFocusWin) _ANSI_ARGS_((TkWindow * winPtr)); /* 36 */
+    int (*tkGetInterpNames) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin)); /* 37 */
+    int (*tkGetMiterPoints) _ANSI_ARGS_((double p1[], double p2[], double p3[], double width, double m1[], double m2[])); /* 38 */
+    void (*tkGetPointerCoords) _ANSI_ARGS_((Tk_Window tkwin, int * xPtr, int * yPtr)); /* 39 */
+    void (*tkGetServerInfo) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin)); /* 40 */
+    void (*tkGrabDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 41 */
+    int (*tkGrabState) _ANSI_ARGS_((TkWindow * winPtr)); /* 42 */
+    void (*tkIncludePoint) _ANSI_ARGS_((Tk_Item * itemPtr, double * pointPtr)); /* 43 */
+    void (*tkInOutEvents) _ANSI_ARGS_((XEvent * eventPtr, TkWindow * sourcePtr, TkWindow * destPtr, int leaveType, int enterType, Tcl_QueuePosition position)); /* 44 */
+    void (*tkInstallFrameMenu) _ANSI_ARGS_((Tk_Window tkwin)); /* 45 */
+    char * (*tkKeysymToString) _ANSI_ARGS_((KeySym keysym)); /* 46 */
+    int (*tkLineToArea) _ANSI_ARGS_((double end1Ptr[], double end2Ptr[], double rectPtr[])); /* 47 */
+    double (*tkLineToPoint) _ANSI_ARGS_((double end1Ptr[], double end2Ptr[], double pointPtr[])); /* 48 */
+    int (*tkMakeBezierCurve) _ANSI_ARGS_((Tk_Canvas canvas, double * pointPtr, int numPoints, int numSteps, XPoint xPoints[], double dblPoints[])); /* 49 */
+    void (*tkMakeBezierPostscript) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, double * pointPtr, int numPoints)); /* 50 */
+    void (*tkOptionClassChanged) _ANSI_ARGS_((TkWindow * winPtr)); /* 51 */
+    void (*tkOptionDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 52 */
+    int (*tkOvalToArea) _ANSI_ARGS_((double * ovalPtr, double * rectPtr)); /* 53 */
+    double (*tkOvalToPoint) _ANSI_ARGS_((double ovalPtr[], double width, int filled, double pointPtr[])); /* 54 */
+    int (*tkpChangeFocus) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 55 */
+    void (*tkpCloseDisplay) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 56 */
+    void (*tkpClaimFocus) _ANSI_ARGS_((TkWindow * topLevelPtr, int force)); /* 57 */
+    void (*tkpDisplayWarning) _ANSI_ARGS_((char * msg, char * title)); /* 58 */
+    void (*tkpGetAppName) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_DString * name)); /* 59 */
+    TkWindow * (*tkpGetOtherWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 60 */
+    TkWindow * (*tkpGetWrapperWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 61 */
+    int (*tkpInit) _ANSI_ARGS_((Tcl_Interp * interp)); /* 62 */
+    void (*tkpInitializeMenuBindings) _ANSI_ARGS_((Tcl_Interp * interp, Tk_BindingTable bindingTable)); /* 63 */
+    void (*tkpMakeContainer) _ANSI_ARGS_((Tk_Window tkwin)); /* 64 */
+    void (*tkpMakeMenuWindow) _ANSI_ARGS_((Tk_Window tkwin, int transient)); /* 65 */
+    Window (*tkpMakeWindow) _ANSI_ARGS_((TkWindow * winPtr, Window parent)); /* 66 */
+    void (*tkpMenuNotifyToplevelCreate) _ANSI_ARGS_((Tcl_Interp * interp1, char * menuName)); /* 67 */
+    TkDisplay * (*tkpOpenDisplay) _ANSI_ARGS_((char * display_name)); /* 68 */
+    int (*tkPointerEvent) _ANSI_ARGS_((XEvent * eventPtr, TkWindow * winPtr)); /* 69 */
+    int (*tkPolygonToArea) _ANSI_ARGS_((double * polyPtr, int numPoints, double * rectPtr)); /* 70 */
+    double (*tkPolygonToPoint) _ANSI_ARGS_((double * polyPtr, int numPoints, double * pointPtr)); /* 71 */
+    int (*tkPositionInTree) _ANSI_ARGS_((TkWindow * winPtr, TkWindow * treePtr)); /* 72 */
+    void (*tkpRedirectKeyEvent) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr)); /* 73 */
+    void (*tkpSetMainMenubar) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * menuName)); /* 74 */
+    int (*tkpUseWindow) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * string)); /* 75 */
+    int (*tkpWindowWasRecentlyDeleted) _ANSI_ARGS_((Window win, TkDisplay * dispPtr)); /* 76 */
+    void (*tkQueueEventForAllChildren) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr)); /* 77 */
+    int (*tkReadBitmapFile) _ANSI_ARGS_((Display* display, Drawable d, CONST char* filename, unsigned int* width_return, unsigned int* height_return, Pixmap* bitmap_return, int* x_hot_return, int* y_hot_return)); /* 78 */
+    int (*tkScrollWindow) _ANSI_ARGS_((Tk_Window tkwin, GC gc, int x, int y, int width, int height, int dx, int dy, TkRegion damageRgn)); /* 79 */
+    void (*tkSelDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 80 */
+    void (*tkSelEventProc) _ANSI_ARGS_((Tk_Window tkwin, XEvent * eventPtr)); /* 81 */
+    void (*tkSelInit) _ANSI_ARGS_((Tk_Window tkwin)); /* 82 */
+    void (*tkSelPropProc) _ANSI_ARGS_((XEvent * eventPtr)); /* 83 */
+    void (*tkSetClassProcs) _ANSI_ARGS_((Tk_Window tkwin, TkClassProcs * procs, ClientData instanceData)); /* 84 */
+    void (*tkSetWindowMenuBar) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * oldMenuName, char * menuName)); /* 85 */
+    KeySym (*tkStringToKeysym) _ANSI_ARGS_((char * name)); /* 86 */
+    int (*tkThickPolyLineToArea) _ANSI_ARGS_((double * coordPtr, int numPoints, double width, int capStyle, int joinStyle, double * rectPtr)); /* 87 */
+    void (*tkWmAddToColormapWindows) _ANSI_ARGS_((TkWindow * winPtr)); /* 88 */
+    void (*tkWmDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 89 */
+    TkWindow * (*tkWmFocusToplevel) _ANSI_ARGS_((TkWindow * winPtr)); /* 90 */
+    void (*tkWmMapWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 91 */
+    void (*tkWmNewWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 92 */
+    void (*tkWmProtocolEventProc) _ANSI_ARGS_((TkWindow * winPtr, XEvent * evenvPtr)); /* 93 */
+    void (*tkWmRemoveFromColormapWindows) _ANSI_ARGS_((TkWindow * winPtr)); /* 94 */
+    void (*tkWmRestackToplevel) _ANSI_ARGS_((TkWindow * winPtr, int aboveBelow, TkWindow * otherPtr)); /* 95 */
+    void (*tkWmSetClass) _ANSI_ARGS_((TkWindow * winPtr)); /* 96 */
+    void (*tkWmUnmapWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 97 */
+    Tcl_Obj * (*tkDebugBitmap) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 98 */
+    Tcl_Obj * (*tkDebugBorder) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 99 */
+    Tcl_Obj * (*tkDebugCursor) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 100 */
+    Tcl_Obj * (*tkDebugColor) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 101 */
+    Tcl_Obj * (*tkDebugConfig) _ANSI_ARGS_((Tcl_Interp * interp, Tk_OptionTable table)); /* 102 */
+    Tcl_Obj * (*tkDebugFont) _ANSI_ARGS_((Tk_Window tkwin, char * name)); /* 103 */
+    int (*tkFindStateNumObj) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Obj * optionPtr, CONST TkStateMap * mapPtr, Tcl_Obj * keyPtr)); /* 104 */
+    Tcl_HashTable * (*tkGetBitmapPredefTable) _ANSI_ARGS_((void)); /* 105 */
+    TkDisplay * (*tkGetDisplayList) _ANSI_ARGS_((void)); /* 106 */
+    TkMainInfo * (*tkGetMainInfoList) _ANSI_ARGS_((void)); /* 107 */
+    int (*tkGetWindowFromObj) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tcl_Obj * objPtr, Tk_Window * windowPtr)); /* 108 */
+    char * (*tkpGetString) _ANSI_ARGS_((TkWindow * winPtr, XEvent * eventPtr, Tcl_DString * dsPtr)); /* 109 */
+    void (*tkpGetSubFonts) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Font tkfont)); /* 110 */
+    Tcl_Obj * (*tkpGetSystemDefault) _ANSI_ARGS_((Tk_Window tkwin, char * dbName, char * className)); /* 111 */
+    void (*tkpMenuThreadInit) _ANSI_ARGS_((void)); /* 112 */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved113;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void (*tkClipBox) _ANSI_ARGS_((TkRegion rgn, XRectangle* rect_return)); /* 113 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkClipBox) _ANSI_ARGS_((TkRegion rgn, XRectangle* rect_return)); /* 113 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved114;
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkRegion (*tkCreateRegion) _ANSI_ARGS_((void)); /* 114 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkRegion (*tkCreateRegion) _ANSI_ARGS_((void)); /* 114 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved115;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void (*tkDestroyRegion) _ANSI_ARGS_((TkRegion rgn)); /* 115 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkDestroyRegion) _ANSI_ARGS_((TkRegion rgn)); /* 115 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved116;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void (*tkIntersectRegion) _ANSI_ARGS_((TkRegion sra, TkRegion srcb, TkRegion dr_return)); /* 116 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkIntersectRegion) _ANSI_ARGS_((TkRegion sra, TkRegion srcb, TkRegion dr_return)); /* 116 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved117;
+#endif /* UNIX */
+#ifdef __WIN32__
+    int (*tkRectInRegion) _ANSI_ARGS_((TkRegion rgn, int x, int y, unsigned int width, unsigned int height)); /* 117 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    int (*tkRectInRegion) _ANSI_ARGS_((TkRegion rgn, int x, int y, unsigned int width, unsigned int height)); /* 117 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved118;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void (*tkSetRegion) _ANSI_ARGS_((Display* display, GC gc, TkRegion rgn)); /* 118 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkSetRegion) _ANSI_ARGS_((Display* display, GC gc, TkRegion rgn)); /* 118 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved119;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void (*tkUnionRectWithRegion) _ANSI_ARGS_((XRectangle* rect, TkRegion src, TkRegion dr_return)); /* 119 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkUnionRectWithRegion) _ANSI_ARGS_((XRectangle* rect, TkRegion src, TkRegion dr_return)); /* 119 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved120;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved120;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 120 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved121;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved121;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    Pixmap (*tkpCreateNativeBitmap) _ANSI_ARGS_((Display * display, char * source)); /* 121 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved122;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved122;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkpDefineNativeBitmaps) _ANSI_ARGS_((void)); /* 122 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved123;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved123;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 123 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved124;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved124;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    Pixmap (*tkpGetNativeAppBitmap) _ANSI_ARGS_((Display * display, CONST char * name, int * width, int * height)); /* 124 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved125;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved125;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 125 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved126;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved126;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkpSetCapture) _ANSI_ARGS_((TkWindow * winPtr)); /* 126 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved127;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved127;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkpSetCursor) _ANSI_ARGS_((TkpCursor cursor)); /* 127 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved128;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved128;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 128 */
+#endif /* MAC_TCL */
+    void *reserved129;
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved130;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved130;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    Window (*tkGetTransientMaster) _ANSI_ARGS_((TkWindow * winPtr)); /* 130 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved131;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved131;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 131 */
+#endif /* MAC_TCL */
+    void *reserved132;
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved133;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved133;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 133 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void *reserved134;
+#endif /* UNIX */
+#ifdef __WIN32__
+    void *reserved134;
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 134 */
+#endif /* MAC_TCL */
+    void (*tkpDrawHighlightBorder) _ANSI_ARGS_((Tk_Window tkwin, GC fgGC, GC bgGC, int highlightWidth, Drawable drawable)); /* 135 */
+    void (*tkSetFocusWin) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 136 */
+    void (*tkpSetKeycodeAndState) _ANSI_ARGS_((Tk_Window tkwin, KeySym keySym, XEvent * eventPtr)); /* 137 */
+    KeySym (*tkpGetKeySym) _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); /* 138 */
+    void (*tkpInitKeymapInfo) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 139 */
+} TkIntStubs;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern TkIntStubs *tkIntStubsPtr;
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS)
+
+/*
+ * Inline function declarations:
+ */
+
+#ifndef TkAllocWindow
+#define TkAllocWindow \
+       (tkIntStubsPtr->tkAllocWindow) /* 0 */
+#endif
+#ifndef TkBezierPoints
+#define TkBezierPoints \
+       (tkIntStubsPtr->tkBezierPoints) /* 1 */
+#endif
+#ifndef TkBezierScreenPoints
+#define TkBezierScreenPoints \
+       (tkIntStubsPtr->tkBezierScreenPoints) /* 2 */
+#endif
+#ifndef TkBindDeadWindow
+#define TkBindDeadWindow \
+       (tkIntStubsPtr->tkBindDeadWindow) /* 3 */
+#endif
+#ifndef TkBindEventProc
+#define TkBindEventProc \
+       (tkIntStubsPtr->tkBindEventProc) /* 4 */
+#endif
+#ifndef TkBindFree
+#define TkBindFree \
+       (tkIntStubsPtr->tkBindFree) /* 5 */
+#endif
+#ifndef TkBindInit
+#define TkBindInit \
+       (tkIntStubsPtr->tkBindInit) /* 6 */
+#endif
+#ifndef TkChangeEventWindow
+#define TkChangeEventWindow \
+       (tkIntStubsPtr->tkChangeEventWindow) /* 7 */
+#endif
+#ifndef TkClipInit
+#define TkClipInit \
+       (tkIntStubsPtr->tkClipInit) /* 8 */
+#endif
+#ifndef TkComputeAnchor
+#define TkComputeAnchor \
+       (tkIntStubsPtr->tkComputeAnchor) /* 9 */
+#endif
+#ifndef TkCopyAndGlobalEval
+#define TkCopyAndGlobalEval \
+       (tkIntStubsPtr->tkCopyAndGlobalEval) /* 10 */
+#endif
+#ifndef TkCreateBindingProcedure
+#define TkCreateBindingProcedure \
+       (tkIntStubsPtr->tkCreateBindingProcedure) /* 11 */
+#endif
+#ifndef TkCreateCursorFromData
+#define TkCreateCursorFromData \
+       (tkIntStubsPtr->tkCreateCursorFromData) /* 12 */
+#endif
+#ifndef TkCreateFrame
+#define TkCreateFrame \
+       (tkIntStubsPtr->tkCreateFrame) /* 13 */
+#endif
+#ifndef TkCreateMainWindow
+#define TkCreateMainWindow \
+       (tkIntStubsPtr->tkCreateMainWindow) /* 14 */
+#endif
+#ifndef TkCurrentTime
+#define TkCurrentTime \
+       (tkIntStubsPtr->tkCurrentTime) /* 15 */
+#endif
+#ifndef TkDeleteAllImages
+#define TkDeleteAllImages \
+       (tkIntStubsPtr->tkDeleteAllImages) /* 16 */
+#endif
+#ifndef TkDoConfigureNotify
+#define TkDoConfigureNotify \
+       (tkIntStubsPtr->tkDoConfigureNotify) /* 17 */
+#endif
+#ifndef TkDrawInsetFocusHighlight
+#define TkDrawInsetFocusHighlight \
+       (tkIntStubsPtr->tkDrawInsetFocusHighlight) /* 18 */
+#endif
+#ifndef TkEventDeadWindow
+#define TkEventDeadWindow \
+       (tkIntStubsPtr->tkEventDeadWindow) /* 19 */
+#endif
+#ifndef TkFillPolygon
+#define TkFillPolygon \
+       (tkIntStubsPtr->tkFillPolygon) /* 20 */
+#endif
+#ifndef TkFindStateNum
+#define TkFindStateNum \
+       (tkIntStubsPtr->tkFindStateNum) /* 21 */
+#endif
+#ifndef TkFindStateString
+#define TkFindStateString \
+       (tkIntStubsPtr->tkFindStateString) /* 22 */
+#endif
+#ifndef TkFocusDeadWindow
+#define TkFocusDeadWindow \
+       (tkIntStubsPtr->tkFocusDeadWindow) /* 23 */
+#endif
+#ifndef TkFocusFilterEvent
+#define TkFocusFilterEvent \
+       (tkIntStubsPtr->tkFocusFilterEvent) /* 24 */
+#endif
+#ifndef TkFocusKeyEvent
+#define TkFocusKeyEvent \
+       (tkIntStubsPtr->tkFocusKeyEvent) /* 25 */
+#endif
+#ifndef TkFontPkgInit
+#define TkFontPkgInit \
+       (tkIntStubsPtr->tkFontPkgInit) /* 26 */
+#endif
+#ifndef TkFontPkgFree
+#define TkFontPkgFree \
+       (tkIntStubsPtr->tkFontPkgFree) /* 27 */
+#endif
+#ifndef TkFreeBindingTags
+#define TkFreeBindingTags \
+       (tkIntStubsPtr->tkFreeBindingTags) /* 28 */
+#endif
+#ifndef TkpFreeCursor
+#define TkpFreeCursor \
+       (tkIntStubsPtr->tkpFreeCursor) /* 29 */
+#endif
+#ifndef TkGetBitmapData
+#define TkGetBitmapData \
+       (tkIntStubsPtr->tkGetBitmapData) /* 30 */
+#endif
+#ifndef TkGetButtPoints
+#define TkGetButtPoints \
+       (tkIntStubsPtr->tkGetButtPoints) /* 31 */
+#endif
+#ifndef TkGetCursorByName
+#define TkGetCursorByName \
+       (tkIntStubsPtr->tkGetCursorByName) /* 32 */
+#endif
+#ifndef TkGetDefaultScreenName
+#define TkGetDefaultScreenName \
+       (tkIntStubsPtr->tkGetDefaultScreenName) /* 33 */
+#endif
+#ifndef TkGetDisplay
+#define TkGetDisplay \
+       (tkIntStubsPtr->tkGetDisplay) /* 34 */
+#endif
+#ifndef TkGetDisplayOf
+#define TkGetDisplayOf \
+       (tkIntStubsPtr->tkGetDisplayOf) /* 35 */
+#endif
+#ifndef TkGetFocusWin
+#define TkGetFocusWin \
+       (tkIntStubsPtr->tkGetFocusWin) /* 36 */
+#endif
+#ifndef TkGetInterpNames
+#define TkGetInterpNames \
+       (tkIntStubsPtr->tkGetInterpNames) /* 37 */
+#endif
+#ifndef TkGetMiterPoints
+#define TkGetMiterPoints \
+       (tkIntStubsPtr->tkGetMiterPoints) /* 38 */
+#endif
+#ifndef TkGetPointerCoords
+#define TkGetPointerCoords \
+       (tkIntStubsPtr->tkGetPointerCoords) /* 39 */
+#endif
+#ifndef TkGetServerInfo
+#define TkGetServerInfo \
+       (tkIntStubsPtr->tkGetServerInfo) /* 40 */
+#endif
+#ifndef TkGrabDeadWindow
+#define TkGrabDeadWindow \
+       (tkIntStubsPtr->tkGrabDeadWindow) /* 41 */
+#endif
+#ifndef TkGrabState
+#define TkGrabState \
+       (tkIntStubsPtr->tkGrabState) /* 42 */
+#endif
+#ifndef TkIncludePoint
+#define TkIncludePoint \
+       (tkIntStubsPtr->tkIncludePoint) /* 43 */
+#endif
+#ifndef TkInOutEvents
+#define TkInOutEvents \
+       (tkIntStubsPtr->tkInOutEvents) /* 44 */
+#endif
+#ifndef TkInstallFrameMenu
+#define TkInstallFrameMenu \
+       (tkIntStubsPtr->tkInstallFrameMenu) /* 45 */
+#endif
+#ifndef TkKeysymToString
+#define TkKeysymToString \
+       (tkIntStubsPtr->tkKeysymToString) /* 46 */
+#endif
+#ifndef TkLineToArea
+#define TkLineToArea \
+       (tkIntStubsPtr->tkLineToArea) /* 47 */
+#endif
+#ifndef TkLineToPoint
+#define TkLineToPoint \
+       (tkIntStubsPtr->tkLineToPoint) /* 48 */
+#endif
+#ifndef TkMakeBezierCurve
+#define TkMakeBezierCurve \
+       (tkIntStubsPtr->tkMakeBezierCurve) /* 49 */
+#endif
+#ifndef TkMakeBezierPostscript
+#define TkMakeBezierPostscript \
+       (tkIntStubsPtr->tkMakeBezierPostscript) /* 50 */
+#endif
+#ifndef TkOptionClassChanged
+#define TkOptionClassChanged \
+       (tkIntStubsPtr->tkOptionClassChanged) /* 51 */
+#endif
+#ifndef TkOptionDeadWindow
+#define TkOptionDeadWindow \
+       (tkIntStubsPtr->tkOptionDeadWindow) /* 52 */
+#endif
+#ifndef TkOvalToArea
+#define TkOvalToArea \
+       (tkIntStubsPtr->tkOvalToArea) /* 53 */
+#endif
+#ifndef TkOvalToPoint
+#define TkOvalToPoint \
+       (tkIntStubsPtr->tkOvalToPoint) /* 54 */
+#endif
+#ifndef TkpChangeFocus
+#define TkpChangeFocus \
+       (tkIntStubsPtr->tkpChangeFocus) /* 55 */
+#endif
+#ifndef TkpCloseDisplay
+#define TkpCloseDisplay \
+       (tkIntStubsPtr->tkpCloseDisplay) /* 56 */
+#endif
+#ifndef TkpClaimFocus
+#define TkpClaimFocus \
+       (tkIntStubsPtr->tkpClaimFocus) /* 57 */
+#endif
+#ifndef TkpDisplayWarning
+#define TkpDisplayWarning \
+       (tkIntStubsPtr->tkpDisplayWarning) /* 58 */
+#endif
+#ifndef TkpGetAppName
+#define TkpGetAppName \
+       (tkIntStubsPtr->tkpGetAppName) /* 59 */
+#endif
+#ifndef TkpGetOtherWindow
+#define TkpGetOtherWindow \
+       (tkIntStubsPtr->tkpGetOtherWindow) /* 60 */
+#endif
+#ifndef TkpGetWrapperWindow
+#define TkpGetWrapperWindow \
+       (tkIntStubsPtr->tkpGetWrapperWindow) /* 61 */
+#endif
+#ifndef TkpInit
+#define TkpInit \
+       (tkIntStubsPtr->tkpInit) /* 62 */
+#endif
+#ifndef TkpInitializeMenuBindings
+#define TkpInitializeMenuBindings \
+       (tkIntStubsPtr->tkpInitializeMenuBindings) /* 63 */
+#endif
+#ifndef TkpMakeContainer
+#define TkpMakeContainer \
+       (tkIntStubsPtr->tkpMakeContainer) /* 64 */
+#endif
+#ifndef TkpMakeMenuWindow
+#define TkpMakeMenuWindow \
+       (tkIntStubsPtr->tkpMakeMenuWindow) /* 65 */
+#endif
+#ifndef TkpMakeWindow
+#define TkpMakeWindow \
+       (tkIntStubsPtr->tkpMakeWindow) /* 66 */
+#endif
+#ifndef TkpMenuNotifyToplevelCreate
+#define TkpMenuNotifyToplevelCreate \
+       (tkIntStubsPtr->tkpMenuNotifyToplevelCreate) /* 67 */
+#endif
+#ifndef TkpOpenDisplay
+#define TkpOpenDisplay \
+       (tkIntStubsPtr->tkpOpenDisplay) /* 68 */
+#endif
+#ifndef TkPointerEvent
+#define TkPointerEvent \
+       (tkIntStubsPtr->tkPointerEvent) /* 69 */
+#endif
+#ifndef TkPolygonToArea
+#define TkPolygonToArea \
+       (tkIntStubsPtr->tkPolygonToArea) /* 70 */
+#endif
+#ifndef TkPolygonToPoint
+#define TkPolygonToPoint \
+       (tkIntStubsPtr->tkPolygonToPoint) /* 71 */
+#endif
+#ifndef TkPositionInTree
+#define TkPositionInTree \
+       (tkIntStubsPtr->tkPositionInTree) /* 72 */
+#endif
+#ifndef TkpRedirectKeyEvent
+#define TkpRedirectKeyEvent \
+       (tkIntStubsPtr->tkpRedirectKeyEvent) /* 73 */
+#endif
+#ifndef TkpSetMainMenubar
+#define TkpSetMainMenubar \
+       (tkIntStubsPtr->tkpSetMainMenubar) /* 74 */
+#endif
+#ifndef TkpUseWindow
+#define TkpUseWindow \
+       (tkIntStubsPtr->tkpUseWindow) /* 75 */
+#endif
+#ifndef TkpWindowWasRecentlyDeleted
+#define TkpWindowWasRecentlyDeleted \
+       (tkIntStubsPtr->tkpWindowWasRecentlyDeleted) /* 76 */
+#endif
+#ifndef TkQueueEventForAllChildren
+#define TkQueueEventForAllChildren \
+       (tkIntStubsPtr->tkQueueEventForAllChildren) /* 77 */
+#endif
+#ifndef TkReadBitmapFile
+#define TkReadBitmapFile \
+       (tkIntStubsPtr->tkReadBitmapFile) /* 78 */
+#endif
+#ifndef TkScrollWindow
+#define TkScrollWindow \
+       (tkIntStubsPtr->tkScrollWindow) /* 79 */
+#endif
+#ifndef TkSelDeadWindow
+#define TkSelDeadWindow \
+       (tkIntStubsPtr->tkSelDeadWindow) /* 80 */
+#endif
+#ifndef TkSelEventProc
+#define TkSelEventProc \
+       (tkIntStubsPtr->tkSelEventProc) /* 81 */
+#endif
+#ifndef TkSelInit
+#define TkSelInit \
+       (tkIntStubsPtr->tkSelInit) /* 82 */
+#endif
+#ifndef TkSelPropProc
+#define TkSelPropProc \
+       (tkIntStubsPtr->tkSelPropProc) /* 83 */
+#endif
+#ifndef TkSetClassProcs
+#define TkSetClassProcs \
+       (tkIntStubsPtr->tkSetClassProcs) /* 84 */
+#endif
+#ifndef TkSetWindowMenuBar
+#define TkSetWindowMenuBar \
+       (tkIntStubsPtr->tkSetWindowMenuBar) /* 85 */
+#endif
+#ifndef TkStringToKeysym
+#define TkStringToKeysym \
+       (tkIntStubsPtr->tkStringToKeysym) /* 86 */
+#endif
+#ifndef TkThickPolyLineToArea
+#define TkThickPolyLineToArea \
+       (tkIntStubsPtr->tkThickPolyLineToArea) /* 87 */
+#endif
+#ifndef TkWmAddToColormapWindows
+#define TkWmAddToColormapWindows \
+       (tkIntStubsPtr->tkWmAddToColormapWindows) /* 88 */
+#endif
+#ifndef TkWmDeadWindow
+#define TkWmDeadWindow \
+       (tkIntStubsPtr->tkWmDeadWindow) /* 89 */
+#endif
+#ifndef TkWmFocusToplevel
+#define TkWmFocusToplevel \
+       (tkIntStubsPtr->tkWmFocusToplevel) /* 90 */
+#endif
+#ifndef TkWmMapWindow
+#define TkWmMapWindow \
+       (tkIntStubsPtr->tkWmMapWindow) /* 91 */
+#endif
+#ifndef TkWmNewWindow
+#define TkWmNewWindow \
+       (tkIntStubsPtr->tkWmNewWindow) /* 92 */
+#endif
+#ifndef TkWmProtocolEventProc
+#define TkWmProtocolEventProc \
+       (tkIntStubsPtr->tkWmProtocolEventProc) /* 93 */
+#endif
+#ifndef TkWmRemoveFromColormapWindows
+#define TkWmRemoveFromColormapWindows \
+       (tkIntStubsPtr->tkWmRemoveFromColormapWindows) /* 94 */
+#endif
+#ifndef TkWmRestackToplevel
+#define TkWmRestackToplevel \
+       (tkIntStubsPtr->tkWmRestackToplevel) /* 95 */
+#endif
+#ifndef TkWmSetClass
+#define TkWmSetClass \
+       (tkIntStubsPtr->tkWmSetClass) /* 96 */
+#endif
+#ifndef TkWmUnmapWindow
+#define TkWmUnmapWindow \
+       (tkIntStubsPtr->tkWmUnmapWindow) /* 97 */
+#endif
+#ifndef TkDebugBitmap
+#define TkDebugBitmap \
+       (tkIntStubsPtr->tkDebugBitmap) /* 98 */
+#endif
+#ifndef TkDebugBorder
+#define TkDebugBorder \
+       (tkIntStubsPtr->tkDebugBorder) /* 99 */
+#endif
+#ifndef TkDebugCursor
+#define TkDebugCursor \
+       (tkIntStubsPtr->tkDebugCursor) /* 100 */
+#endif
+#ifndef TkDebugColor
+#define TkDebugColor \
+       (tkIntStubsPtr->tkDebugColor) /* 101 */
+#endif
+#ifndef TkDebugConfig
+#define TkDebugConfig \
+       (tkIntStubsPtr->tkDebugConfig) /* 102 */
+#endif
+#ifndef TkDebugFont
+#define TkDebugFont \
+       (tkIntStubsPtr->tkDebugFont) /* 103 */
+#endif
+#ifndef TkFindStateNumObj
+#define TkFindStateNumObj \
+       (tkIntStubsPtr->tkFindStateNumObj) /* 104 */
+#endif
+#ifndef TkGetBitmapPredefTable
+#define TkGetBitmapPredefTable \
+       (tkIntStubsPtr->tkGetBitmapPredefTable) /* 105 */
+#endif
+#ifndef TkGetDisplayList
+#define TkGetDisplayList \
+       (tkIntStubsPtr->tkGetDisplayList) /* 106 */
+#endif
+#ifndef TkGetMainInfoList
+#define TkGetMainInfoList \
+       (tkIntStubsPtr->tkGetMainInfoList) /* 107 */
+#endif
+#ifndef TkGetWindowFromObj
+#define TkGetWindowFromObj \
+       (tkIntStubsPtr->tkGetWindowFromObj) /* 108 */
+#endif
+#ifndef TkpGetString
+#define TkpGetString \
+       (tkIntStubsPtr->tkpGetString) /* 109 */
+#endif
+#ifndef TkpGetSubFonts
+#define TkpGetSubFonts \
+       (tkIntStubsPtr->tkpGetSubFonts) /* 110 */
+#endif
+#ifndef TkpGetSystemDefault
+#define TkpGetSystemDefault \
+       (tkIntStubsPtr->tkpGetSystemDefault) /* 111 */
+#endif
+#ifndef TkpMenuThreadInit
+#define TkpMenuThreadInit \
+       (tkIntStubsPtr->tkpMenuThreadInit) /* 112 */
+#endif
+#ifdef __WIN32__
+#ifndef TkClipBox
+#define TkClipBox \
+       (tkIntStubsPtr->tkClipBox) /* 113 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkClipBox
+#define TkClipBox \
+       (tkIntStubsPtr->tkClipBox) /* 113 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkCreateRegion
+#define TkCreateRegion \
+       (tkIntStubsPtr->tkCreateRegion) /* 114 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkCreateRegion
+#define TkCreateRegion \
+       (tkIntStubsPtr->tkCreateRegion) /* 114 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkDestroyRegion
+#define TkDestroyRegion \
+       (tkIntStubsPtr->tkDestroyRegion) /* 115 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkDestroyRegion
+#define TkDestroyRegion \
+       (tkIntStubsPtr->tkDestroyRegion) /* 115 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkIntersectRegion
+#define TkIntersectRegion \
+       (tkIntStubsPtr->tkIntersectRegion) /* 116 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkIntersectRegion
+#define TkIntersectRegion \
+       (tkIntStubsPtr->tkIntersectRegion) /* 116 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkRectInRegion
+#define TkRectInRegion \
+       (tkIntStubsPtr->tkRectInRegion) /* 117 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkRectInRegion
+#define TkRectInRegion \
+       (tkIntStubsPtr->tkRectInRegion) /* 117 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkSetRegion
+#define TkSetRegion \
+       (tkIntStubsPtr->tkSetRegion) /* 118 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkSetRegion
+#define TkSetRegion \
+       (tkIntStubsPtr->tkSetRegion) /* 118 */
+#endif
+#endif /* MAC_TCL */
+#ifdef __WIN32__
+#ifndef TkUnionRectWithRegion
+#define TkUnionRectWithRegion \
+       (tkIntStubsPtr->tkUnionRectWithRegion) /* 119 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkUnionRectWithRegion
+#define TkUnionRectWithRegion \
+       (tkIntStubsPtr->tkUnionRectWithRegion) /* 119 */
+#endif
+#endif /* MAC_TCL */
+
+#ifdef MAC_TCL
+#ifndef TkGenerateActivateEvents
+#define TkGenerateActivateEvents \
+       (tkIntStubsPtr->tkGenerateActivateEvents) /* 120 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpCreateNativeBitmap
+#define TkpCreateNativeBitmap \
+       (tkIntStubsPtr->tkpCreateNativeBitmap) /* 121 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpDefineNativeBitmaps
+#define TkpDefineNativeBitmaps \
+       (tkIntStubsPtr->tkpDefineNativeBitmaps) /* 122 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpGetMS
+#define TkpGetMS \
+       (tkIntStubsPtr->tkpGetMS) /* 123 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpGetNativeAppBitmap
+#define TkpGetNativeAppBitmap \
+       (tkIntStubsPtr->tkpGetNativeAppBitmap) /* 124 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkPointerDeadWindow
+#define TkPointerDeadWindow \
+       (tkIntStubsPtr->tkPointerDeadWindow) /* 125 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpSetCapture
+#define TkpSetCapture \
+       (tkIntStubsPtr->tkpSetCapture) /* 126 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpSetCursor
+#define TkpSetCursor \
+       (tkIntStubsPtr->tkpSetCursor) /* 127 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkpWmSetState
+#define TkpWmSetState \
+       (tkIntStubsPtr->tkpWmSetState) /* 128 */
+#endif
+#endif /* MAC_TCL */
+/* Slot 129 is reserved */
+#ifdef MAC_TCL
+#ifndef TkGetTransientMaster
+#define TkGetTransientMaster \
+       (tkIntStubsPtr->tkGetTransientMaster) /* 130 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkGenerateButtonEvent
+#define TkGenerateButtonEvent \
+       (tkIntStubsPtr->tkGenerateButtonEvent) /* 131 */
+#endif
+#endif /* MAC_TCL */
+/* Slot 132 is reserved */
+#ifdef MAC_TCL
+#ifndef TkGenWMDestroyEvent
+#define TkGenWMDestroyEvent \
+       (tkIntStubsPtr->tkGenWMDestroyEvent) /* 133 */
+#endif
+#endif /* MAC_TCL */
+#ifdef MAC_TCL
+#ifndef TkGenWMConfigureEvent
+#define TkGenWMConfigureEvent \
+       (tkIntStubsPtr->tkGenWMConfigureEvent) /* 134 */
+#endif
+#endif /* MAC_TCL */
+#ifndef TkpDrawHighlightBorder
+#define TkpDrawHighlightBorder \
+       (tkIntStubsPtr->tkpDrawHighlightBorder) /* 135 */
+#endif
+#ifndef TkSetFocusWin
+#define TkSetFocusWin \
+       (tkIntStubsPtr->tkSetFocusWin) /* 136 */
+#endif
+#ifndef TkpSetKeycodeAndState
+#define TkpSetKeycodeAndState \
+       (tkIntStubsPtr->tkpSetKeycodeAndState) /* 137 */
+#endif
+#ifndef TkpGetKeySym
+#define TkpGetKeySym \
+       (tkIntStubsPtr->tkpGetKeySym) /* 138 */
+#endif
+#ifndef TkpInitKeymapInfo
+#define TkpInitKeymapInfo \
+       (tkIntStubsPtr->tkpInitKeymapInfo) /* 139 */
+#endif
+
+#endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#endif /* _TKINTDECLS */
+
+
diff --git a/tk/generic/tkIntPlatDecls.h b/tk/generic/tkIntPlatDecls.h
new file mode 100644 (file)
index 0000000..d324023
--- /dev/null
@@ -0,0 +1,885 @@
+/*
+ * tkIntPlatDecls.h --
+ *
+ *     This file contains the declarations for all platform dependent
+ *     unsupported functions that are exported by the Tk library.  These
+ *     interfaces are not guaranteed to remain the same between
+ *     versions.  Use at your own risk.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * All rights reserved.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#ifndef _TKINTPLATDECLS
+#define _TKINTPLATDECLS
+
+#ifdef BUILD_tk
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tkInt.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+/*
+ * Exported function declarations:
+ */
+
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+/* 0 */
+EXTERN void            TkCreateXEventSource _ANSI_ARGS_((void));
+/* 1 */
+EXTERN void            TkFreeWindowId _ANSI_ARGS_((TkDisplay * dispPtr, 
+                               Window w));
+/* 2 */
+EXTERN void            TkInitXId _ANSI_ARGS_((TkDisplay * dispPtr));
+/* 3 */
+EXTERN int             TkpCmapStressed _ANSI_ARGS_((Tk_Window tkwin, 
+                               Colormap colormap));
+/* 4 */
+EXTERN void            TkpSync _ANSI_ARGS_((Display * display));
+/* 5 */
+EXTERN Window          TkUnixContainerId _ANSI_ARGS_((TkWindow * winPtr));
+/* 6 */
+EXTERN int             TkUnixDoOneXEvent _ANSI_ARGS_((Tcl_Time * timePtr));
+/* 7 */
+EXTERN void            TkUnixSetMenubar _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tk_Window menubar));
+#endif /* UNIX */
+#ifdef __WIN32__
+/* 0 */
+EXTERN char *          TkAlignImageData _ANSI_ARGS_((XImage * image, 
+                               int alignment, int bitOrder));
+/* Slot 1 is reserved */
+/* 2 */
+EXTERN void            TkGenerateActivateEvents _ANSI_ARGS_((
+                               TkWindow * winPtr, int active));
+/* 3 */
+EXTERN unsigned long   TkpGetMS _ANSI_ARGS_((void));
+/* 4 */
+EXTERN void            TkPointerDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 5 */
+EXTERN void            TkpPrintWindowId _ANSI_ARGS_((char * buf, 
+                               Window window));
+/* 6 */
+EXTERN int             TkpScanWindowId _ANSI_ARGS_((Tcl_Interp * interp, 
+                               char * string, int * idPtr));
+/* 7 */
+EXTERN void            TkpSetCapture _ANSI_ARGS_((TkWindow * winPtr));
+/* 8 */
+EXTERN void            TkpSetCursor _ANSI_ARGS_((TkpCursor cursor));
+/* 9 */
+EXTERN void            TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, 
+                               int state));
+/* 10 */
+EXTERN void            TkSetPixmapColormap _ANSI_ARGS_((Pixmap pixmap, 
+                               Colormap colormap));
+/* 11 */
+EXTERN void            TkWinCancelMouseTimer _ANSI_ARGS_((void));
+/* 12 */
+EXTERN void            TkWinClipboardRender _ANSI_ARGS_((
+                               TkDisplay * dispPtr, UINT format));
+/* 13 */
+EXTERN LRESULT         TkWinEmbeddedEventProc _ANSI_ARGS_((HWND hwnd, 
+                               UINT message, WPARAM wParam, LPARAM lParam));
+/* 14 */
+EXTERN void            TkWinFillRect _ANSI_ARGS_((HDC dc, int x, int y, 
+                               int width, int height, int pixel));
+/* 15 */
+EXTERN COLORREF                TkWinGetBorderPixels _ANSI_ARGS_((Tk_Window tkwin, 
+                               Tk_3DBorder border, int which));
+/* 16 */
+EXTERN HDC             TkWinGetDrawableDC _ANSI_ARGS_((Display * display, 
+                               Drawable d, TkWinDCState* state));
+/* 17 */
+EXTERN int             TkWinGetModifierState _ANSI_ARGS_((void));
+/* 18 */
+EXTERN HPALETTE                TkWinGetSystemPalette _ANSI_ARGS_((void));
+/* 19 */
+EXTERN HWND            TkWinGetWrapperWindow _ANSI_ARGS_((Tk_Window tkwin));
+/* 20 */
+EXTERN int             TkWinHandleMenuEvent _ANSI_ARGS_((HWND * phwnd, 
+                               UINT * pMessage, WPARAM * pwParam, 
+                               LPARAM * plParam, LRESULT * plResult));
+/* 21 */
+EXTERN int             TkWinIndexOfColor _ANSI_ARGS_((XColor * colorPtr));
+/* 22 */
+EXTERN void            TkWinReleaseDrawableDC _ANSI_ARGS_((Drawable d, 
+                               HDC hdc, TkWinDCState* state));
+/* 23 */
+EXTERN LRESULT         TkWinResendEvent _ANSI_ARGS_((WNDPROC wndproc, 
+                               HWND hwnd, XEvent * eventPtr));
+/* 24 */
+EXTERN HPALETTE                TkWinSelectPalette _ANSI_ARGS_((HDC dc, 
+                               Colormap colormap));
+/* 25 */
+EXTERN void            TkWinSetMenu _ANSI_ARGS_((Tk_Window tkwin, 
+                               HMENU hMenu));
+/* 26 */
+EXTERN void            TkWinSetWindowPos _ANSI_ARGS_((HWND hwnd, 
+                               HWND siblingHwnd, int pos));
+/* 27 */
+EXTERN void            TkWinWmCleanup _ANSI_ARGS_((HINSTANCE hInstance));
+/* 28 */
+EXTERN void            TkWinXCleanup _ANSI_ARGS_((HINSTANCE hInstance));
+/* 29 */
+EXTERN void            TkWinXInit _ANSI_ARGS_((HINSTANCE hInstance));
+/* 30 */
+EXTERN void            TkWinSetForegroundWindow _ANSI_ARGS_((
+                               TkWindow * winPtr));
+/* 31 */
+EXTERN void            TkWinDialogDebug _ANSI_ARGS_((int debug));
+/* 32 */
+EXTERN Tcl_Obj *       TkWinGetMenuSystemDefault _ANSI_ARGS_((
+                               Tk_Window tkwin, char * dbName, 
+                               char * className));
+/* 33 */
+EXTERN int             TkWinGetPlatformId _ANSI_ARGS_((void));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 0 */
+EXTERN void            TkGenerateActivateEvents _ANSI_ARGS_((
+                               TkWindow * winPtr, int active));
+/* 1 */
+EXTERN Pixmap          TkpCreateNativeBitmap _ANSI_ARGS_((Display * display, 
+                               char * source));
+/* 2 */
+EXTERN void            TkpDefineNativeBitmaps _ANSI_ARGS_((void));
+/* 3 */
+EXTERN unsigned long   TkpGetMS _ANSI_ARGS_((void));
+/* 4 */
+EXTERN Pixmap          TkpGetNativeAppBitmap _ANSI_ARGS_((Display * display, 
+                               char * name, int * width, int * height));
+/* 5 */
+EXTERN void            TkPointerDeadWindow _ANSI_ARGS_((TkWindow * winPtr));
+/* 6 */
+EXTERN void            TkpSetCapture _ANSI_ARGS_((TkWindow * winPtr));
+/* 7 */
+EXTERN void            TkpSetCursor _ANSI_ARGS_((TkpCursor cursor));
+/* 8 */
+EXTERN void            TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, 
+                               int state));
+/* 9 */
+EXTERN int             HandleWMEvent _ANSI_ARGS_((EventRecord * theEvent));
+/* 10 */
+EXTERN void            TkAboutDlg _ANSI_ARGS_((void));
+/* 11 */
+EXTERN void            TkCreateMacEventSource _ANSI_ARGS_((void));
+/* 12 */
+EXTERN void            TkFontList _ANSI_ARGS_((Tcl_Interp * interp, 
+                               Display * display));
+/* 13 */
+EXTERN Window          TkGetTransientMaster _ANSI_ARGS_((TkWindow * winPtr));
+/* 14 */
+EXTERN int             TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, 
+                               Window window, unsigned int state));
+/* 15 */
+EXTERN int             TkGetCharPositions _ANSI_ARGS_((
+                               XFontStruct * font_struct, char * string, 
+                               int count, short * buffer));
+/* 16 */
+EXTERN void            TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin));
+/* 17 */
+EXTERN void            TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, 
+                               int x, int y, int width, int height, 
+                               int flags));
+/* 18 */
+EXTERN unsigned int    TkMacButtonKeyState _ANSI_ARGS_((void));
+/* 19 */
+EXTERN void            TkMacClearMenubarActive _ANSI_ARGS_((void));
+/* 20 */
+EXTERN int             TkMacConvertEvent _ANSI_ARGS_((
+                               EventRecord * eventPtr));
+/* 21 */
+EXTERN int             TkMacDispatchMenuEvent _ANSI_ARGS_((int menuID, 
+                               int index));
+/* 22 */
+EXTERN void            TkMacInstallCursor _ANSI_ARGS_((int resizeOverride));
+/* 23 */
+EXTERN int             TkMacConvertTkEvent _ANSI_ARGS_((
+                               EventRecord * eventPtr, Window window));
+/* 24 */
+EXTERN void            TkMacHandleTearoffMenu _ANSI_ARGS_((void));
+/* 25 */
+EXTERN void            tkMacInstallMWConsole _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 26 */
+EXTERN void            TkMacInvalClipRgns _ANSI_ARGS_((TkWindow * winPtr));
+/* 27 */
+EXTERN void            TkMacDoHLEvent _ANSI_ARGS_((EventRecord * theEvent));
+/* 28 */
+EXTERN void            TkMacFontInfo _ANSI_ARGS_((Font fontId, 
+                               short * family, short * style, short * size));
+/* 29 */
+EXTERN Time            TkMacGenerateTime _ANSI_ARGS_((void));
+/* 30 */
+EXTERN GWorldPtr       TkMacGetDrawablePort _ANSI_ARGS_((Drawable drawable));
+/* 31 */
+EXTERN TkWindow *      TkMacGetScrollbarGrowWindow _ANSI_ARGS_((
+                               TkWindow * winPtr));
+/* 32 */
+EXTERN Window          TkMacGetXWindow _ANSI_ARGS_((WindowRef macWinPtr));
+/* 33 */
+EXTERN int             TkMacGrowToplevel _ANSI_ARGS_((WindowRef whichWindow, 
+                               Point start));
+/* 34 */
+EXTERN void            TkMacHandleMenuSelect _ANSI_ARGS_((long mResult, 
+                               int optionKeyPressed));
+/* 35 */
+EXTERN int             TkMacHaveAppearance _ANSI_ARGS_((void));
+/* 36 */
+EXTERN void            TkMacInitAppleEvents _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 37 */
+EXTERN void            TkMacInitMenus _ANSI_ARGS_((Tcl_Interp * interp));
+/* 38 */
+EXTERN void            TkMacInvalidateWindow _ANSI_ARGS_((
+                               MacDrawable * macWin, int flag));
+/* 39 */
+EXTERN int             TkMacIsCharacterMissing _ANSI_ARGS_((Tk_Font tkfont, 
+                               unsigned int searchChar));
+/* 40 */
+EXTERN void            TkMacMakeRealWindowExist _ANSI_ARGS_((
+                               TkWindow * winPtr));
+/* 41 */
+EXTERN BitMapPtr       TkMacMakeStippleMap _ANSI_ARGS_((Drawable d1, 
+                               Drawable d2));
+/* 42 */
+EXTERN void            TkMacMenuClick _ANSI_ARGS_((void));
+/* 43 */
+EXTERN void            TkMacRegisterOffScreenWindow _ANSI_ARGS_((
+                               Window window, GWorldPtr portPtr));
+/* 44 */
+EXTERN int             TkMacResizable _ANSI_ARGS_((TkWindow * winPtr));
+/* 45 */
+EXTERN void            TkMacSetEmbedRgn _ANSI_ARGS_((TkWindow * winPtr, 
+                               RgnHandle rgn));
+/* 46 */
+EXTERN void            TkMacSetHelpMenuItemCount _ANSI_ARGS_((void));
+/* 47 */
+EXTERN void            TkMacSetScrollbarGrow _ANSI_ARGS_((TkWindow * winPtr, 
+                               int flag));
+/* 48 */
+EXTERN void            TkMacSetUpClippingRgn _ANSI_ARGS_((Drawable drawable));
+/* 49 */
+EXTERN void            TkMacSetUpGraphicsPort _ANSI_ARGS_((GC gc));
+/* 50 */
+EXTERN void            TkMacUpdateClipRgn _ANSI_ARGS_((TkWindow * winPtr));
+/* 51 */
+EXTERN void            TkMacUnregisterMacWindow _ANSI_ARGS_((
+                               GWorldPtr portPtr));
+/* 52 */
+EXTERN int             TkMacUseMenuID _ANSI_ARGS_((short macID));
+/* 53 */
+EXTERN RgnHandle       TkMacVisableClipRgn _ANSI_ARGS_((TkWindow * winPtr));
+/* 54 */
+EXTERN void            TkMacWinBounds _ANSI_ARGS_((TkWindow * winPtr, 
+                               Rect * geometry));
+/* 55 */
+EXTERN void            TkMacWindowOffset _ANSI_ARGS_((WindowRef wRef, 
+                               int * xOffset, int * yOffset));
+/* 56 */
+EXTERN void            TkResumeClipboard _ANSI_ARGS_((void));
+/* 57 */
+EXTERN int             TkSetMacColor _ANSI_ARGS_((unsigned long pixel, 
+                               RGBColor * macColor));
+/* 58 */
+EXTERN void            TkSetWMName _ANSI_ARGS_((TkWindow * winPtr, 
+                               Tk_Uid titleUid));
+/* 59 */
+EXTERN void            TkSuspendClipboard _ANSI_ARGS_((void));
+/* 60 */
+EXTERN int             TkWMGrowToplevel _ANSI_ARGS_((WindowRef whichWindow, 
+                               Point start));
+/* 61 */
+EXTERN int             TkMacZoomToplevel _ANSI_ARGS_((WindowPtr whichWindow, 
+                               Point where, short zoomPart));
+/* 62 */
+EXTERN Tk_Window       Tk_TopCoordsToWindow _ANSI_ARGS_((Tk_Window tkwin, 
+                               int rootX, int rootY, int * newX, int * newY));
+/* 63 */
+EXTERN MacDrawable *   TkMacContainerId _ANSI_ARGS_((TkWindow * winPtr));
+/* 64 */
+EXTERN MacDrawable *   TkMacGetHostToplevel _ANSI_ARGS_((TkWindow * winPtr));
+#endif /* MAC_TCL */
+
+typedef struct TkIntPlatStubs {
+    int magic;
+    struct TkIntPlatStubHooks *hooks;
+
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    void (*tkCreateXEventSource) _ANSI_ARGS_((void)); /* 0 */
+    void (*tkFreeWindowId) _ANSI_ARGS_((TkDisplay * dispPtr, Window w)); /* 1 */
+    void (*tkInitXId) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 2 */
+    int (*tkpCmapStressed) _ANSI_ARGS_((Tk_Window tkwin, Colormap colormap)); /* 3 */
+    void (*tkpSync) _ANSI_ARGS_((Display * display)); /* 4 */
+    Window (*tkUnixContainerId) _ANSI_ARGS_((TkWindow * winPtr)); /* 5 */
+    int (*tkUnixDoOneXEvent) _ANSI_ARGS_((Tcl_Time * timePtr)); /* 6 */
+    void (*tkUnixSetMenubar) _ANSI_ARGS_((Tk_Window tkwin, Tk_Window menubar)); /* 7 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    char * (*tkAlignImageData) _ANSI_ARGS_((XImage * image, int alignment, int bitOrder)); /* 0 */
+    void *reserved1;
+    void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 2 */
+    unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 3 */
+    void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 4 */
+    void (*tkpPrintWindowId) _ANSI_ARGS_((char * buf, Window window)); /* 5 */
+    int (*tkpScanWindowId) _ANSI_ARGS_((Tcl_Interp * interp, char * string, int * idPtr)); /* 6 */
+    void (*tkpSetCapture) _ANSI_ARGS_((TkWindow * winPtr)); /* 7 */
+    void (*tkpSetCursor) _ANSI_ARGS_((TkpCursor cursor)); /* 8 */
+    void (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 9 */
+    void (*tkSetPixmapColormap) _ANSI_ARGS_((Pixmap pixmap, Colormap colormap)); /* 10 */
+    void (*tkWinCancelMouseTimer) _ANSI_ARGS_((void)); /* 11 */
+    void (*tkWinClipboardRender) _ANSI_ARGS_((TkDisplay * dispPtr, UINT format)); /* 12 */
+    LRESULT (*tkWinEmbeddedEventProc) _ANSI_ARGS_((HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)); /* 13 */
+    void (*tkWinFillRect) _ANSI_ARGS_((HDC dc, int x, int y, int width, int height, int pixel)); /* 14 */
+    COLORREF (*tkWinGetBorderPixels) _ANSI_ARGS_((Tk_Window tkwin, Tk_3DBorder border, int which)); /* 15 */
+    HDC (*tkWinGetDrawableDC) _ANSI_ARGS_((Display * display, Drawable d, TkWinDCState* state)); /* 16 */
+    int (*tkWinGetModifierState) _ANSI_ARGS_((void)); /* 17 */
+    HPALETTE (*tkWinGetSystemPalette) _ANSI_ARGS_((void)); /* 18 */
+    HWND (*tkWinGetWrapperWindow) _ANSI_ARGS_((Tk_Window tkwin)); /* 19 */
+    int (*tkWinHandleMenuEvent) _ANSI_ARGS_((HWND * phwnd, UINT * pMessage, WPARAM * pwParam, LPARAM * plParam, LRESULT * plResult)); /* 20 */
+    int (*tkWinIndexOfColor) _ANSI_ARGS_((XColor * colorPtr)); /* 21 */
+    void (*tkWinReleaseDrawableDC) _ANSI_ARGS_((Drawable d, HDC hdc, TkWinDCState* state)); /* 22 */
+    LRESULT (*tkWinResendEvent) _ANSI_ARGS_((WNDPROC wndproc, HWND hwnd, XEvent * eventPtr)); /* 23 */
+    HPALETTE (*tkWinSelectPalette) _ANSI_ARGS_((HDC dc, Colormap colormap)); /* 24 */
+    void (*tkWinSetMenu) _ANSI_ARGS_((Tk_Window tkwin, HMENU hMenu)); /* 25 */
+    void (*tkWinSetWindowPos) _ANSI_ARGS_((HWND hwnd, HWND siblingHwnd, int pos)); /* 26 */
+    void (*tkWinWmCleanup) _ANSI_ARGS_((HINSTANCE hInstance)); /* 27 */
+    void (*tkWinXCleanup) _ANSI_ARGS_((HINSTANCE hInstance)); /* 28 */
+    void (*tkWinXInit) _ANSI_ARGS_((HINSTANCE hInstance)); /* 29 */
+    void (*tkWinSetForegroundWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 30 */
+    void (*tkWinDialogDebug) _ANSI_ARGS_((int debug)); /* 31 */
+    Tcl_Obj * (*tkWinGetMenuSystemDefault) _ANSI_ARGS_((Tk_Window tkwin, char * dbName, char * className)); /* 32 */
+    int (*tkWinGetPlatformId) _ANSI_ARGS_((void)); /* 33 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 0 */
+    Pixmap (*tkpCreateNativeBitmap) _ANSI_ARGS_((Display * display, char * source)); /* 1 */
+    void (*tkpDefineNativeBitmaps) _ANSI_ARGS_((void)); /* 2 */
+    unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 3 */
+    Pixmap (*tkpGetNativeAppBitmap) _ANSI_ARGS_((Display * display, char * name, int * width, int * height)); /* 4 */
+    void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 5 */
+    void (*tkpSetCapture) _ANSI_ARGS_((TkWindow * winPtr)); /* 6 */
+    void (*tkpSetCursor) _ANSI_ARGS_((TkpCursor cursor)); /* 7 */
+    void (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 8 */
+    int (*handleWMEvent) _ANSI_ARGS_((EventRecord * theEvent)); /* 9 */
+    void (*tkAboutDlg) _ANSI_ARGS_((void)); /* 10 */
+    void (*tkCreateMacEventSource) _ANSI_ARGS_((void)); /* 11 */
+    void (*tkFontList) _ANSI_ARGS_((Tcl_Interp * interp, Display * display)); /* 12 */
+    Window (*tkGetTransientMaster) _ANSI_ARGS_((TkWindow * winPtr)); /* 13 */
+    int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 14 */
+    int (*tkGetCharPositions) _ANSI_ARGS_((XFontStruct * font_struct, char * string, int count, short * buffer)); /* 15 */
+    void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 16 */
+    void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 17 */
+    unsigned int (*tkMacButtonKeyState) _ANSI_ARGS_((void)); /* 18 */
+    void (*tkMacClearMenubarActive) _ANSI_ARGS_((void)); /* 19 */
+    int (*tkMacConvertEvent) _ANSI_ARGS_((EventRecord * eventPtr)); /* 20 */
+    int (*tkMacDispatchMenuEvent) _ANSI_ARGS_((int menuID, int index)); /* 21 */
+    void (*tkMacInstallCursor) _ANSI_ARGS_((int resizeOverride)); /* 22 */
+    int (*tkMacConvertTkEvent) _ANSI_ARGS_((EventRecord * eventPtr, Window window)); /* 23 */
+    void (*tkMacHandleTearoffMenu) _ANSI_ARGS_((void)); /* 24 */
+    void (*tkMacInstallMWConsole) _ANSI_ARGS_((Tcl_Interp * interp)); /* 25 */
+    void (*tkMacInvalClipRgns) _ANSI_ARGS_((TkWindow * winPtr)); /* 26 */
+    void (*tkMacDoHLEvent) _ANSI_ARGS_((EventRecord * theEvent)); /* 27 */
+    void (*tkMacFontInfo) _ANSI_ARGS_((Font fontId, short * family, short * style, short * size)); /* 28 */
+    Time (*tkMacGenerateTime) _ANSI_ARGS_((void)); /* 29 */
+    GWorldPtr (*tkMacGetDrawablePort) _ANSI_ARGS_((Drawable drawable)); /* 30 */
+    TkWindow * (*tkMacGetScrollbarGrowWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 31 */
+    Window (*tkMacGetXWindow) _ANSI_ARGS_((WindowRef macWinPtr)); /* 32 */
+    int (*tkMacGrowToplevel) _ANSI_ARGS_((WindowRef whichWindow, Point start)); /* 33 */
+    void (*tkMacHandleMenuSelect) _ANSI_ARGS_((long mResult, int optionKeyPressed)); /* 34 */
+    int (*tkMacHaveAppearance) _ANSI_ARGS_((void)); /* 35 */
+    void (*tkMacInitAppleEvents) _ANSI_ARGS_((Tcl_Interp * interp)); /* 36 */
+    void (*tkMacInitMenus) _ANSI_ARGS_((Tcl_Interp * interp)); /* 37 */
+    void (*tkMacInvalidateWindow) _ANSI_ARGS_((MacDrawable * macWin, int flag)); /* 38 */
+    int (*tkMacIsCharacterMissing) _ANSI_ARGS_((Tk_Font tkfont, unsigned int searchChar)); /* 39 */
+    void (*tkMacMakeRealWindowExist) _ANSI_ARGS_((TkWindow * winPtr)); /* 40 */
+    BitMapPtr (*tkMacMakeStippleMap) _ANSI_ARGS_((Drawable d1, Drawable d2)); /* 41 */
+    void (*tkMacMenuClick) _ANSI_ARGS_((void)); /* 42 */
+    void (*tkMacRegisterOffScreenWindow) _ANSI_ARGS_((Window window, GWorldPtr portPtr)); /* 43 */
+    int (*tkMacResizable) _ANSI_ARGS_((TkWindow * winPtr)); /* 44 */
+    void (*tkMacSetEmbedRgn) _ANSI_ARGS_((TkWindow * winPtr, RgnHandle rgn)); /* 45 */
+    void (*tkMacSetHelpMenuItemCount) _ANSI_ARGS_((void)); /* 46 */
+    void (*tkMacSetScrollbarGrow) _ANSI_ARGS_((TkWindow * winPtr, int flag)); /* 47 */
+    void (*tkMacSetUpClippingRgn) _ANSI_ARGS_((Drawable drawable)); /* 48 */
+    void (*tkMacSetUpGraphicsPort) _ANSI_ARGS_((GC gc)); /* 49 */
+    void (*tkMacUpdateClipRgn) _ANSI_ARGS_((TkWindow * winPtr)); /* 50 */
+    void (*tkMacUnregisterMacWindow) _ANSI_ARGS_((GWorldPtr portPtr)); /* 51 */
+    int (*tkMacUseMenuID) _ANSI_ARGS_((short macID)); /* 52 */
+    RgnHandle (*tkMacVisableClipRgn) _ANSI_ARGS_((TkWindow * winPtr)); /* 53 */
+    void (*tkMacWinBounds) _ANSI_ARGS_((TkWindow * winPtr, Rect * geometry)); /* 54 */
+    void (*tkMacWindowOffset) _ANSI_ARGS_((WindowRef wRef, int * xOffset, int * yOffset)); /* 55 */
+    void (*tkResumeClipboard) _ANSI_ARGS_((void)); /* 56 */
+    int (*tkSetMacColor) _ANSI_ARGS_((unsigned long pixel, RGBColor * macColor)); /* 57 */
+    void (*tkSetWMName) _ANSI_ARGS_((TkWindow * winPtr, Tk_Uid titleUid)); /* 58 */
+    void (*tkSuspendClipboard) _ANSI_ARGS_((void)); /* 59 */
+    int (*tkWMGrowToplevel) _ANSI_ARGS_((WindowRef whichWindow, Point start)); /* 60 */
+    int (*tkMacZoomToplevel) _ANSI_ARGS_((WindowPtr whichWindow, Point where, short zoomPart)); /* 61 */
+    Tk_Window (*tk_TopCoordsToWindow) _ANSI_ARGS_((Tk_Window tkwin, int rootX, int rootY, int * newX, int * newY)); /* 62 */
+    MacDrawable * (*tkMacContainerId) _ANSI_ARGS_((TkWindow * winPtr)); /* 63 */
+    MacDrawable * (*tkMacGetHostToplevel) _ANSI_ARGS_((TkWindow * winPtr)); /* 64 */
+#endif /* MAC_TCL */
+} TkIntPlatStubs;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern TkIntPlatStubs *tkIntPlatStubsPtr;
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS)
+
+/*
+ * Inline function declarations:
+ */
+
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+#ifndef TkCreateXEventSource
+#define TkCreateXEventSource \
+       (tkIntPlatStubsPtr->tkCreateXEventSource) /* 0 */
+#endif
+#ifndef TkFreeWindowId
+#define TkFreeWindowId \
+       (tkIntPlatStubsPtr->tkFreeWindowId) /* 1 */
+#endif
+#ifndef TkInitXId
+#define TkInitXId \
+       (tkIntPlatStubsPtr->tkInitXId) /* 2 */
+#endif
+#ifndef TkpCmapStressed
+#define TkpCmapStressed \
+       (tkIntPlatStubsPtr->tkpCmapStressed) /* 3 */
+#endif
+#ifndef TkpSync
+#define TkpSync \
+       (tkIntPlatStubsPtr->tkpSync) /* 4 */
+#endif
+#ifndef TkUnixContainerId
+#define TkUnixContainerId \
+       (tkIntPlatStubsPtr->tkUnixContainerId) /* 5 */
+#endif
+#ifndef TkUnixDoOneXEvent
+#define TkUnixDoOneXEvent \
+       (tkIntPlatStubsPtr->tkUnixDoOneXEvent) /* 6 */
+#endif
+#ifndef TkUnixSetMenubar
+#define TkUnixSetMenubar \
+       (tkIntPlatStubsPtr->tkUnixSetMenubar) /* 7 */
+#endif
+#endif /* UNIX */
+#ifdef __WIN32__
+#ifndef TkAlignImageData
+#define TkAlignImageData \
+       (tkIntPlatStubsPtr->tkAlignImageData) /* 0 */
+#endif
+/* Slot 1 is reserved */
+#ifndef TkGenerateActivateEvents
+#define TkGenerateActivateEvents \
+       (tkIntPlatStubsPtr->tkGenerateActivateEvents) /* 2 */
+#endif
+#ifndef TkpGetMS
+#define TkpGetMS \
+       (tkIntPlatStubsPtr->tkpGetMS) /* 3 */
+#endif
+#ifndef TkPointerDeadWindow
+#define TkPointerDeadWindow \
+       (tkIntPlatStubsPtr->tkPointerDeadWindow) /* 4 */
+#endif
+#ifndef TkpPrintWindowId
+#define TkpPrintWindowId \
+       (tkIntPlatStubsPtr->tkpPrintWindowId) /* 5 */
+#endif
+#ifndef TkpScanWindowId
+#define TkpScanWindowId \
+       (tkIntPlatStubsPtr->tkpScanWindowId) /* 6 */
+#endif
+#ifndef TkpSetCapture
+#define TkpSetCapture \
+       (tkIntPlatStubsPtr->tkpSetCapture) /* 7 */
+#endif
+#ifndef TkpSetCursor
+#define TkpSetCursor \
+       (tkIntPlatStubsPtr->tkpSetCursor) /* 8 */
+#endif
+#ifndef TkpWmSetState
+#define TkpWmSetState \
+       (tkIntPlatStubsPtr->tkpWmSetState) /* 9 */
+#endif
+#ifndef TkSetPixmapColormap
+#define TkSetPixmapColormap \
+       (tkIntPlatStubsPtr->tkSetPixmapColormap) /* 10 */
+#endif
+#ifndef TkWinCancelMouseTimer
+#define TkWinCancelMouseTimer \
+       (tkIntPlatStubsPtr->tkWinCancelMouseTimer) /* 11 */
+#endif
+#ifndef TkWinClipboardRender
+#define TkWinClipboardRender \
+       (tkIntPlatStubsPtr->tkWinClipboardRender) /* 12 */
+#endif
+#ifndef TkWinEmbeddedEventProc
+#define TkWinEmbeddedEventProc \
+       (tkIntPlatStubsPtr->tkWinEmbeddedEventProc) /* 13 */
+#endif
+#ifndef TkWinFillRect
+#define TkWinFillRect \
+       (tkIntPlatStubsPtr->tkWinFillRect) /* 14 */
+#endif
+#ifndef TkWinGetBorderPixels
+#define TkWinGetBorderPixels \
+       (tkIntPlatStubsPtr->tkWinGetBorderPixels) /* 15 */
+#endif
+#ifndef TkWinGetDrawableDC
+#define TkWinGetDrawableDC \
+       (tkIntPlatStubsPtr->tkWinGetDrawableDC) /* 16 */
+#endif
+#ifndef TkWinGetModifierState
+#define TkWinGetModifierState \
+       (tkIntPlatStubsPtr->tkWinGetModifierState) /* 17 */
+#endif
+#ifndef TkWinGetSystemPalette
+#define TkWinGetSystemPalette \
+       (tkIntPlatStubsPtr->tkWinGetSystemPalette) /* 18 */
+#endif
+#ifndef TkWinGetWrapperWindow
+#define TkWinGetWrapperWindow \
+       (tkIntPlatStubsPtr->tkWinGetWrapperWindow) /* 19 */
+#endif
+#ifndef TkWinHandleMenuEvent
+#define TkWinHandleMenuEvent \
+       (tkIntPlatStubsPtr->tkWinHandleMenuEvent) /* 20 */
+#endif
+#ifndef TkWinIndexOfColor
+#define TkWinIndexOfColor \
+       (tkIntPlatStubsPtr->tkWinIndexOfColor) /* 21 */
+#endif
+#ifndef TkWinReleaseDrawableDC
+#define TkWinReleaseDrawableDC \
+       (tkIntPlatStubsPtr->tkWinReleaseDrawableDC) /* 22 */
+#endif
+#ifndef TkWinResendEvent
+#define TkWinResendEvent \
+       (tkIntPlatStubsPtr->tkWinResendEvent) /* 23 */
+#endif
+#ifndef TkWinSelectPalette
+#define TkWinSelectPalette \
+       (tkIntPlatStubsPtr->tkWinSelectPalette) /* 24 */
+#endif
+#ifndef TkWinSetMenu
+#define TkWinSetMenu \
+       (tkIntPlatStubsPtr->tkWinSetMenu) /* 25 */
+#endif
+#ifndef TkWinSetWindowPos
+#define TkWinSetWindowPos \
+       (tkIntPlatStubsPtr->tkWinSetWindowPos) /* 26 */
+#endif
+#ifndef TkWinWmCleanup
+#define TkWinWmCleanup \
+       (tkIntPlatStubsPtr->tkWinWmCleanup) /* 27 */
+#endif
+#ifndef TkWinXCleanup
+#define TkWinXCleanup \
+       (tkIntPlatStubsPtr->tkWinXCleanup) /* 28 */
+#endif
+#ifndef TkWinXInit
+#define TkWinXInit \
+       (tkIntPlatStubsPtr->tkWinXInit) /* 29 */
+#endif
+#ifndef TkWinSetForegroundWindow
+#define TkWinSetForegroundWindow \
+       (tkIntPlatStubsPtr->tkWinSetForegroundWindow) /* 30 */
+#endif
+#ifndef TkWinDialogDebug
+#define TkWinDialogDebug \
+       (tkIntPlatStubsPtr->tkWinDialogDebug) /* 31 */
+#endif
+#ifndef TkWinGetMenuSystemDefault
+#define TkWinGetMenuSystemDefault \
+       (tkIntPlatStubsPtr->tkWinGetMenuSystemDefault) /* 32 */
+#endif
+#ifndef TkWinGetPlatformId
+#define TkWinGetPlatformId \
+       (tkIntPlatStubsPtr->tkWinGetPlatformId) /* 33 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef TkGenerateActivateEvents
+#define TkGenerateActivateEvents \
+       (tkIntPlatStubsPtr->tkGenerateActivateEvents) /* 0 */
+#endif
+#ifndef TkpCreateNativeBitmap
+#define TkpCreateNativeBitmap \
+       (tkIntPlatStubsPtr->tkpCreateNativeBitmap) /* 1 */
+#endif
+#ifndef TkpDefineNativeBitmaps
+#define TkpDefineNativeBitmaps \
+       (tkIntPlatStubsPtr->tkpDefineNativeBitmaps) /* 2 */
+#endif
+#ifndef TkpGetMS
+#define TkpGetMS \
+       (tkIntPlatStubsPtr->tkpGetMS) /* 3 */
+#endif
+#ifndef TkpGetNativeAppBitmap
+#define TkpGetNativeAppBitmap \
+       (tkIntPlatStubsPtr->tkpGetNativeAppBitmap) /* 4 */
+#endif
+#ifndef TkPointerDeadWindow
+#define TkPointerDeadWindow \
+       (tkIntPlatStubsPtr->tkPointerDeadWindow) /* 5 */
+#endif
+#ifndef TkpSetCapture
+#define TkpSetCapture \
+       (tkIntPlatStubsPtr->tkpSetCapture) /* 6 */
+#endif
+#ifndef TkpSetCursor
+#define TkpSetCursor \
+       (tkIntPlatStubsPtr->tkpSetCursor) /* 7 */
+#endif
+#ifndef TkpWmSetState
+#define TkpWmSetState \
+       (tkIntPlatStubsPtr->tkpWmSetState) /* 8 */
+#endif
+#ifndef HandleWMEvent
+#define HandleWMEvent \
+       (tkIntPlatStubsPtr->handleWMEvent) /* 9 */
+#endif
+#ifndef TkAboutDlg
+#define TkAboutDlg \
+       (tkIntPlatStubsPtr->tkAboutDlg) /* 10 */
+#endif
+#ifndef TkCreateMacEventSource
+#define TkCreateMacEventSource \
+       (tkIntPlatStubsPtr->tkCreateMacEventSource) /* 11 */
+#endif
+#ifndef TkFontList
+#define TkFontList \
+       (tkIntPlatStubsPtr->tkFontList) /* 12 */
+#endif
+#ifndef TkGetTransientMaster
+#define TkGetTransientMaster \
+       (tkIntPlatStubsPtr->tkGetTransientMaster) /* 13 */
+#endif
+#ifndef TkGenerateButtonEvent
+#define TkGenerateButtonEvent \
+       (tkIntPlatStubsPtr->tkGenerateButtonEvent) /* 14 */
+#endif
+#ifndef TkGetCharPositions
+#define TkGetCharPositions \
+       (tkIntPlatStubsPtr->tkGetCharPositions) /* 15 */
+#endif
+#ifndef TkGenWMDestroyEvent
+#define TkGenWMDestroyEvent \
+       (tkIntPlatStubsPtr->tkGenWMDestroyEvent) /* 16 */
+#endif
+#ifndef TkGenWMConfigureEvent
+#define TkGenWMConfigureEvent \
+       (tkIntPlatStubsPtr->tkGenWMConfigureEvent) /* 17 */
+#endif
+#ifndef TkMacButtonKeyState
+#define TkMacButtonKeyState \
+       (tkIntPlatStubsPtr->tkMacButtonKeyState) /* 18 */
+#endif
+#ifndef TkMacClearMenubarActive
+#define TkMacClearMenubarActive \
+       (tkIntPlatStubsPtr->tkMacClearMenubarActive) /* 19 */
+#endif
+#ifndef TkMacConvertEvent
+#define TkMacConvertEvent \
+       (tkIntPlatStubsPtr->tkMacConvertEvent) /* 20 */
+#endif
+#ifndef TkMacDispatchMenuEvent
+#define TkMacDispatchMenuEvent \
+       (tkIntPlatStubsPtr->tkMacDispatchMenuEvent) /* 21 */
+#endif
+#ifndef TkMacInstallCursor
+#define TkMacInstallCursor \
+       (tkIntPlatStubsPtr->tkMacInstallCursor) /* 22 */
+#endif
+#ifndef TkMacConvertTkEvent
+#define TkMacConvertTkEvent \
+       (tkIntPlatStubsPtr->tkMacConvertTkEvent) /* 23 */
+#endif
+#ifndef TkMacHandleTearoffMenu
+#define TkMacHandleTearoffMenu \
+       (tkIntPlatStubsPtr->tkMacHandleTearoffMenu) /* 24 */
+#endif
+#ifndef tkMacInstallMWConsole
+#define tkMacInstallMWConsole \
+       (tkIntPlatStubsPtr->tkMacInstallMWConsole) /* 25 */
+#endif
+#ifndef TkMacInvalClipRgns
+#define TkMacInvalClipRgns \
+       (tkIntPlatStubsPtr->tkMacInvalClipRgns) /* 26 */
+#endif
+#ifndef TkMacDoHLEvent
+#define TkMacDoHLEvent \
+       (tkIntPlatStubsPtr->tkMacDoHLEvent) /* 27 */
+#endif
+#ifndef TkMacFontInfo
+#define TkMacFontInfo \
+       (tkIntPlatStubsPtr->tkMacFontInfo) /* 28 */
+#endif
+#ifndef TkMacGenerateTime
+#define TkMacGenerateTime \
+       (tkIntPlatStubsPtr->tkMacGenerateTime) /* 29 */
+#endif
+#ifndef TkMacGetDrawablePort
+#define TkMacGetDrawablePort \
+       (tkIntPlatStubsPtr->tkMacGetDrawablePort) /* 30 */
+#endif
+#ifndef TkMacGetScrollbarGrowWindow
+#define TkMacGetScrollbarGrowWindow \
+       (tkIntPlatStubsPtr->tkMacGetScrollbarGrowWindow) /* 31 */
+#endif
+#ifndef TkMacGetXWindow
+#define TkMacGetXWindow \
+       (tkIntPlatStubsPtr->tkMacGetXWindow) /* 32 */
+#endif
+#ifndef TkMacGrowToplevel
+#define TkMacGrowToplevel \
+       (tkIntPlatStubsPtr->tkMacGrowToplevel) /* 33 */
+#endif
+#ifndef TkMacHandleMenuSelect
+#define TkMacHandleMenuSelect \
+       (tkIntPlatStubsPtr->tkMacHandleMenuSelect) /* 34 */
+#endif
+#ifndef TkMacHaveAppearance
+#define TkMacHaveAppearance \
+       (tkIntPlatStubsPtr->tkMacHaveAppearance) /* 35 */
+#endif
+#ifndef TkMacInitAppleEvents
+#define TkMacInitAppleEvents \
+       (tkIntPlatStubsPtr->tkMacInitAppleEvents) /* 36 */
+#endif
+#ifndef TkMacInitMenus
+#define TkMacInitMenus \
+       (tkIntPlatStubsPtr->tkMacInitMenus) /* 37 */
+#endif
+#ifndef TkMacInvalidateWindow
+#define TkMacInvalidateWindow \
+       (tkIntPlatStubsPtr->tkMacInvalidateWindow) /* 38 */
+#endif
+#ifndef TkMacIsCharacterMissing
+#define TkMacIsCharacterMissing \
+       (tkIntPlatStubsPtr->tkMacIsCharacterMissing) /* 39 */
+#endif
+#ifndef TkMacMakeRealWindowExist
+#define TkMacMakeRealWindowExist \
+       (tkIntPlatStubsPtr->tkMacMakeRealWindowExist) /* 40 */
+#endif
+#ifndef TkMacMakeStippleMap
+#define TkMacMakeStippleMap \
+       (tkIntPlatStubsPtr->tkMacMakeStippleMap) /* 41 */
+#endif
+#ifndef TkMacMenuClick
+#define TkMacMenuClick \
+       (tkIntPlatStubsPtr->tkMacMenuClick) /* 42 */
+#endif
+#ifndef TkMacRegisterOffScreenWindow
+#define TkMacRegisterOffScreenWindow \
+       (tkIntPlatStubsPtr->tkMacRegisterOffScreenWindow) /* 43 */
+#endif
+#ifndef TkMacResizable
+#define TkMacResizable \
+       (tkIntPlatStubsPtr->tkMacResizable) /* 44 */
+#endif
+#ifndef TkMacSetEmbedRgn
+#define TkMacSetEmbedRgn \
+       (tkIntPlatStubsPtr->tkMacSetEmbedRgn) /* 45 */
+#endif
+#ifndef TkMacSetHelpMenuItemCount
+#define TkMacSetHelpMenuItemCount \
+       (tkIntPlatStubsPtr->tkMacSetHelpMenuItemCount) /* 46 */
+#endif
+#ifndef TkMacSetScrollbarGrow
+#define TkMacSetScrollbarGrow \
+       (tkIntPlatStubsPtr->tkMacSetScrollbarGrow) /* 47 */
+#endif
+#ifndef TkMacSetUpClippingRgn
+#define TkMacSetUpClippingRgn \
+       (tkIntPlatStubsPtr->tkMacSetUpClippingRgn) /* 48 */
+#endif
+#ifndef TkMacSetUpGraphicsPort
+#define TkMacSetUpGraphicsPort \
+       (tkIntPlatStubsPtr->tkMacSetUpGraphicsPort) /* 49 */
+#endif
+#ifndef TkMacUpdateClipRgn
+#define TkMacUpdateClipRgn \
+       (tkIntPlatStubsPtr->tkMacUpdateClipRgn) /* 50 */
+#endif
+#ifndef TkMacUnregisterMacWindow
+#define TkMacUnregisterMacWindow \
+       (tkIntPlatStubsPtr->tkMacUnregisterMacWindow) /* 51 */
+#endif
+#ifndef TkMacUseMenuID
+#define TkMacUseMenuID \
+       (tkIntPlatStubsPtr->tkMacUseMenuID) /* 52 */
+#endif
+#ifndef TkMacVisableClipRgn
+#define TkMacVisableClipRgn \
+       (tkIntPlatStubsPtr->tkMacVisableClipRgn) /* 53 */
+#endif
+#ifndef TkMacWinBounds
+#define TkMacWinBounds \
+       (tkIntPlatStubsPtr->tkMacWinBounds) /* 54 */
+#endif
+#ifndef TkMacWindowOffset
+#define TkMacWindowOffset \
+       (tkIntPlatStubsPtr->tkMacWindowOffset) /* 55 */
+#endif
+#ifndef TkResumeClipboard
+#define TkResumeClipboard \
+       (tkIntPlatStubsPtr->tkResumeClipboard) /* 56 */
+#endif
+#ifndef TkSetMacColor
+#define TkSetMacColor \
+       (tkIntPlatStubsPtr->tkSetMacColor) /* 57 */
+#endif
+#ifndef TkSetWMName
+#define TkSetWMName \
+       (tkIntPlatStubsPtr->tkSetWMName) /* 58 */
+#endif
+#ifndef TkSuspendClipboard
+#define TkSuspendClipboard \
+       (tkIntPlatStubsPtr->tkSuspendClipboard) /* 59 */
+#endif
+#ifndef TkWMGrowToplevel
+#define TkWMGrowToplevel \
+       (tkIntPlatStubsPtr->tkWMGrowToplevel) /* 60 */
+#endif
+#ifndef TkMacZoomToplevel
+#define TkMacZoomToplevel \
+       (tkIntPlatStubsPtr->tkMacZoomToplevel) /* 61 */
+#endif
+#ifndef Tk_TopCoordsToWindow
+#define Tk_TopCoordsToWindow \
+       (tkIntPlatStubsPtr->tk_TopCoordsToWindow) /* 62 */
+#endif
+#ifndef TkMacContainerId
+#define TkMacContainerId \
+       (tkIntPlatStubsPtr->tkMacContainerId) /* 63 */
+#endif
+#ifndef TkMacGetHostToplevel
+#define TkMacGetHostToplevel \
+       (tkIntPlatStubsPtr->tkMacGetHostToplevel) /* 64 */
+#endif
+#endif /* MAC_TCL */
+
+#endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#endif /* _TKINTPLATDECLS */
diff --git a/tk/generic/tkIntXlibDecls.h b/tk/generic/tkIntXlibDecls.h
new file mode 100644 (file)
index 0000000..7126dd6
--- /dev/null
@@ -0,0 +1,1674 @@
+/*
+ * tkIntXlibDecls.h --
+ *
+ *     This file contains the declarations for all platform dependent
+ *     unsupported functions that are exported by the Tk library.  These
+ *     interfaces are not guaranteed to remain the same between
+ *     versions.  Use at your own risk.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * All rights reserved.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#ifndef _TKINTXLIBDECLS
+#define _TKINTXLIBDECLS
+
+#ifdef MAC_TCL
+#include "Xutil.h"
+#else
+#include "X11/Xutil.h"
+#endif
+
+#ifdef BUILD_tk
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tkInt.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+/*
+ * Exported function declarations:
+ */
+
+#ifdef __WIN32__
+/* 0 */
+EXTERN void            XSetDashes _ANSI_ARGS_((Display* display, GC gc, 
+                               int dash_offset, _Xconst char* dash_list, 
+                               int n));
+/* 1 */
+EXTERN XModifierKeymap*         XGetModifierMapping _ANSI_ARGS_((Display* d));
+/* 2 */
+EXTERN XImage *                XCreateImage _ANSI_ARGS_((Display* d, Visual* v, 
+                               unsigned int ui1, int i1, int i2, char* cp, 
+                               unsigned int ui2, unsigned int ui3, int i3, 
+                               int i4));
+/* 3 */
+EXTERN XImage *                XGetImage _ANSI_ARGS_((Display* d, Drawable dr, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, unsigned long ul, int i3));
+/* 4 */
+EXTERN char *          XGetAtomName _ANSI_ARGS_((Display* d, Atom a));
+/* 5 */
+EXTERN char *          XKeysymToString _ANSI_ARGS_((KeySym k));
+/* 6 */
+EXTERN Colormap                XCreateColormap _ANSI_ARGS_((Display* d, Window w, 
+                               Visual* v, int i));
+/* 7 */
+EXTERN Cursor          XCreatePixmapCursor _ANSI_ARGS_((Display* d, 
+                               Pixmap p1, Pixmap p2, XColor* x1, XColor* x2, 
+                               unsigned int ui1, unsigned int ui2));
+/* 8 */
+EXTERN Cursor          XCreateGlyphCursor _ANSI_ARGS_((Display* d, Font f1, 
+                               Font f2, unsigned int ui1, unsigned int ui2, 
+                               XColor* x1, XColor* x2));
+/* 9 */
+EXTERN GContext                XGContextFromGC _ANSI_ARGS_((GC g));
+/* 10 */
+EXTERN XHostAddress *  XListHosts _ANSI_ARGS_((Display* d, int* i, Bool* b));
+/* 11 */
+EXTERN KeySym          XKeycodeToKeysym _ANSI_ARGS_((Display* d, 
+                               unsigned int k, int i));
+/* 12 */
+EXTERN KeySym          XStringToKeysym _ANSI_ARGS_((_Xconst char* c));
+/* 13 */
+EXTERN Window          XRootWindow _ANSI_ARGS_((Display* d, int i));
+/* 14 */
+EXTERN XErrorHandler   XSetErrorHandler _ANSI_ARGS_((XErrorHandler x));
+/* 15 */
+EXTERN Status          XIconifyWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i));
+/* 16 */
+EXTERN Status          XWithdrawWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i));
+/* 17 */
+EXTERN Status          XGetWMColormapWindows _ANSI_ARGS_((Display* d, 
+                               Window w, Window** wpp, int* ip));
+/* 18 */
+EXTERN Status          XAllocColor _ANSI_ARGS_((Display* d, Colormap c, 
+                               XColor* xp));
+/* 19 */
+EXTERN void            XBell _ANSI_ARGS_((Display* d, int i));
+/* 20 */
+EXTERN void            XChangeProperty _ANSI_ARGS_((Display* d, Window w, 
+                               Atom a1, Atom a2, int i1, int i2, 
+                               _Xconst unsigned char* c, int i3));
+/* 21 */
+EXTERN void            XChangeWindowAttributes _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned long ul, 
+                               XSetWindowAttributes* x));
+/* 22 */
+EXTERN void            XClearWindow _ANSI_ARGS_((Display* d, Window w));
+/* 23 */
+EXTERN void            XConfigureWindow _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned int i, XWindowChanges* x));
+/* 24 */
+EXTERN void            XCopyArea _ANSI_ARGS_((Display* d, Drawable dr1, 
+                               Drawable dr2, GC g, int i1, int i2, 
+                               unsigned int ui1, unsigned int ui2, int i3, 
+                               int i4));
+/* 25 */
+EXTERN void            XCopyPlane _ANSI_ARGS_((Display* d, Drawable dr1, 
+                               Drawable dr2, GC g, int i1, int i2, 
+                               unsigned int ui1, unsigned int ui2, int i3, 
+                               int i4, unsigned long ul));
+/* 26 */
+EXTERN Pixmap          XCreateBitmapFromData _ANSI_ARGS_((Display* display, 
+                               Drawable d, _Xconst char* data, 
+                               unsigned int width, unsigned int height));
+/* 27 */
+EXTERN void            XDefineCursor _ANSI_ARGS_((Display* d, Window w, 
+                               Cursor c));
+/* 28 */
+EXTERN void            XDeleteProperty _ANSI_ARGS_((Display* d, Window w, 
+                               Atom a));
+/* 29 */
+EXTERN void            XDestroyWindow _ANSI_ARGS_((Display* d, Window w));
+/* 30 */
+EXTERN void            XDrawArc _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, int i3, int i4));
+/* 31 */
+EXTERN void            XDrawLines _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XPoint* x, int i1, int i2));
+/* 32 */
+EXTERN void            XDrawRectangle _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2));
+/* 33 */
+EXTERN void            XFillArc _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, int i3, int i4));
+/* 34 */
+EXTERN void            XFillPolygon _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XPoint* x, int i1, int i2, int i3));
+/* 35 */
+EXTERN void            XFillRectangles _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XRectangle* x, int i));
+/* 36 */
+EXTERN void            XForceScreenSaver _ANSI_ARGS_((Display* d, int i));
+/* 37 */
+EXTERN void            XFreeColormap _ANSI_ARGS_((Display* d, Colormap c));
+/* 38 */
+EXTERN void            XFreeColors _ANSI_ARGS_((Display* d, Colormap c, 
+                               unsigned long* ulp, int i, unsigned long ul));
+/* 39 */
+EXTERN void            XFreeCursor _ANSI_ARGS_((Display* d, Cursor c));
+/* 40 */
+EXTERN void            XFreeModifiermap _ANSI_ARGS_((XModifierKeymap* x));
+/* 41 */
+EXTERN Status          XGetGeometry _ANSI_ARGS_((Display* d, Drawable dr, 
+                               Window* w, int* i1, int* i2, 
+                               unsigned int* ui1, unsigned int* ui2, 
+                               unsigned int* ui3, unsigned int* ui4));
+/* 42 */
+EXTERN void            XGetInputFocus _ANSI_ARGS_((Display* d, Window* w, 
+                               int* i));
+/* 43 */
+EXTERN int             XGetWindowProperty _ANSI_ARGS_((Display* d, Window w, 
+                               Atom a1, long l1, long l2, Bool b, Atom a2, 
+                               Atom* ap, int* ip, unsigned long* ulp1, 
+                               unsigned long* ulp2, unsigned char** cpp));
+/* 44 */
+EXTERN Status          XGetWindowAttributes _ANSI_ARGS_((Display* d, 
+                               Window w, XWindowAttributes* x));
+/* 45 */
+EXTERN int             XGrabKeyboard _ANSI_ARGS_((Display* d, Window w, 
+                               Bool b, int i1, int i2, Time t));
+/* 46 */
+EXTERN int             XGrabPointer _ANSI_ARGS_((Display* d, Window w1, 
+                               Bool b, unsigned int ui, int i1, int i2, 
+                               Window w2, Cursor c, Time t));
+/* 47 */
+EXTERN KeyCode         XKeysymToKeycode _ANSI_ARGS_((Display* d, KeySym k));
+/* 48 */
+EXTERN Status          XLookupColor _ANSI_ARGS_((Display* d, Colormap c1, 
+                               _Xconst char* c2, XColor* x1, XColor* x2));
+/* 49 */
+EXTERN void            XMapWindow _ANSI_ARGS_((Display* d, Window w));
+/* 50 */
+EXTERN void            XMoveResizeWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2));
+/* 51 */
+EXTERN void            XMoveWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i1, int i2));
+/* 52 */
+EXTERN void            XNextEvent _ANSI_ARGS_((Display* d, XEvent* x));
+/* 53 */
+EXTERN void            XPutBackEvent _ANSI_ARGS_((Display* d, XEvent* x));
+/* 54 */
+EXTERN void            XQueryColors _ANSI_ARGS_((Display* d, Colormap c, 
+                               XColor* x, int i));
+/* 55 */
+EXTERN Bool            XQueryPointer _ANSI_ARGS_((Display* d, Window w1, 
+                               Window* w2, Window* w3, int* i1, int* i2, 
+                               int* i3, int* i4, unsigned int* ui));
+/* 56 */
+EXTERN Status          XQueryTree _ANSI_ARGS_((Display* d, Window w1, 
+                               Window* w2, Window* w3, Window** w4, 
+                               unsigned int* ui));
+/* 57 */
+EXTERN void            XRaiseWindow _ANSI_ARGS_((Display* d, Window w));
+/* 58 */
+EXTERN void            XRefreshKeyboardMapping _ANSI_ARGS_((
+                               XMappingEvent* x));
+/* 59 */
+EXTERN void            XResizeWindow _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned int ui1, unsigned int ui2));
+/* 60 */
+EXTERN void            XSelectInput _ANSI_ARGS_((Display* d, Window w, 
+                               long l));
+/* 61 */
+EXTERN Status          XSendEvent _ANSI_ARGS_((Display* d, Window w, Bool b, 
+                               long l, XEvent* x));
+/* 62 */
+EXTERN void            XSetCommand _ANSI_ARGS_((Display* d, Window w, 
+                               char** c, int i));
+/* 63 */
+EXTERN void            XSetIconName _ANSI_ARGS_((Display* d, Window w, 
+                               _Xconst char* c));
+/* 64 */
+EXTERN void            XSetInputFocus _ANSI_ARGS_((Display* d, Window w, 
+                               int i, Time t));
+/* 65 */
+EXTERN void            XSetSelectionOwner _ANSI_ARGS_((Display* d, Atom a, 
+                               Window w, Time t));
+/* 66 */
+EXTERN void            XSetWindowBackground _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned long ul));
+/* 67 */
+EXTERN void            XSetWindowBackgroundPixmap _ANSI_ARGS_((Display* d, 
+                               Window w, Pixmap p));
+/* 68 */
+EXTERN void            XSetWindowBorder _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned long ul));
+/* 69 */
+EXTERN void            XSetWindowBorderPixmap _ANSI_ARGS_((Display* d, 
+                               Window w, Pixmap p));
+/* 70 */
+EXTERN void            XSetWindowBorderWidth _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned int ui));
+/* 71 */
+EXTERN void            XSetWindowColormap _ANSI_ARGS_((Display* d, Window w, 
+                               Colormap c));
+/* 72 */
+EXTERN Bool            XTranslateCoordinates _ANSI_ARGS_((Display* d, 
+                               Window w1, Window w2, int i1, int i2, 
+                               int* i3, int* i4, Window* w3));
+/* 73 */
+EXTERN void            XUngrabKeyboard _ANSI_ARGS_((Display* d, Time t));
+/* 74 */
+EXTERN void            XUngrabPointer _ANSI_ARGS_((Display* d, Time t));
+/* 75 */
+EXTERN void            XUnmapWindow _ANSI_ARGS_((Display* d, Window w));
+/* 76 */
+EXTERN void            XWindowEvent _ANSI_ARGS_((Display* d, Window w, 
+                               long l, XEvent* x));
+/* 77 */
+EXTERN void            XDestroyIC _ANSI_ARGS_((XIC x));
+/* 78 */
+EXTERN Bool            XFilterEvent _ANSI_ARGS_((XEvent* x, Window w));
+/* 79 */
+EXTERN int             XmbLookupString _ANSI_ARGS_((XIC xi, 
+                               XKeyPressedEvent* xk, char* c, int i, 
+                               KeySym* k, Status* s));
+/* 80 */
+EXTERN void            TkPutImage _ANSI_ARGS_((unsigned long * colors, 
+                               int ncolors, Display* display, Drawable d, 
+                               GC gc, XImage* image, int src_x, int src_y, 
+                               int dest_x, int dest_y, unsigned int width, 
+                               unsigned int height));
+/* Slot 81 is reserved */
+/* 82 */
+EXTERN Status          XParseColor _ANSI_ARGS_((Display * display, 
+                               Colormap map, _Xconst char* spec, 
+                               XColor * colorPtr));
+/* 83 */
+EXTERN GC              XCreateGC _ANSI_ARGS_((Display* display, Drawable d, 
+                               unsigned long valuemask, XGCValues* values));
+/* 84 */
+EXTERN void            XFreeGC _ANSI_ARGS_((Display* display, GC gc));
+/* 85 */
+EXTERN Atom            XInternAtom _ANSI_ARGS_((Display* display, 
+                               _Xconst char* atom_name, Bool only_if_exists));
+/* 86 */
+EXTERN void            XSetBackground _ANSI_ARGS_((Display* display, GC gc, 
+                               unsigned long foreground));
+/* 87 */
+EXTERN void            XSetForeground _ANSI_ARGS_((Display* display, GC gc, 
+                               unsigned long foreground));
+/* 88 */
+EXTERN void            XSetClipMask _ANSI_ARGS_((Display* display, GC gc, 
+                               Pixmap pixmap));
+/* 89 */
+EXTERN void            XSetClipOrigin _ANSI_ARGS_((Display* display, GC gc, 
+                               int clip_x_origin, int clip_y_origin));
+/* 90 */
+EXTERN void            XSetTSOrigin _ANSI_ARGS_((Display* display, GC gc, 
+                               int ts_x_origin, int ts_y_origin));
+/* 91 */
+EXTERN void            XChangeGC _ANSI_ARGS_((Display * d, GC gc, 
+                               unsigned long mask, XGCValues * values));
+/* 92 */
+EXTERN void            XSetFont _ANSI_ARGS_((Display * display, GC gc, 
+                               Font font));
+/* 93 */
+EXTERN void            XSetArcMode _ANSI_ARGS_((Display * display, GC gc, 
+                               int arc_mode));
+/* 94 */
+EXTERN void            XSetStipple _ANSI_ARGS_((Display * display, GC gc, 
+                               Pixmap stipple));
+/* 95 */
+EXTERN void            XSetFillRule _ANSI_ARGS_((Display * display, GC gc, 
+                               int fill_rule));
+/* 96 */
+EXTERN void            XSetFillStyle _ANSI_ARGS_((Display * display, GC gc, 
+                               int fill_style));
+/* 97 */
+EXTERN void            XSetFunction _ANSI_ARGS_((Display * display, GC gc, 
+                               int function));
+/* 98 */
+EXTERN void            XSetLineAttributes _ANSI_ARGS_((Display * display, 
+                               GC gc, unsigned int line_width, 
+                               int line_style, int cap_style, 
+                               int join_style));
+/* 99 */
+EXTERN int             _XInitImageFuncPtrs _ANSI_ARGS_((XImage * image));
+/* 100 */
+EXTERN XIC             XCreateIC _ANSI_ARGS_((void));
+/* 101 */
+EXTERN XVisualInfo *   XGetVisualInfo _ANSI_ARGS_((Display* display, 
+                               long vinfo_mask, XVisualInfo* vinfo_template, 
+                               int* nitems_return));
+/* 102 */
+EXTERN void            XSetWMClientMachine _ANSI_ARGS_((Display* display, 
+                               Window w, XTextProperty* text_prop));
+/* 103 */
+EXTERN Status          XStringListToTextProperty _ANSI_ARGS_((char** list, 
+                               int count, XTextProperty* text_prop_return));
+/* 104 */
+EXTERN void            XDrawLine _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int x1, int y1, int x2, int y2));
+/* 105 */
+EXTERN void            XWarpPointer _ANSI_ARGS_((Display* d, Window s, 
+                               Window dw, int sx, int sy, unsigned int sw, 
+                               unsigned int sh, int dx, int dy));
+/* 106 */
+EXTERN void            XFillRectangle _ANSI_ARGS_((Display* display, 
+                               Drawable d, GC gc, int x, int y, 
+                               unsigned int width, unsigned int height));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 0 */
+EXTERN void            XSetDashes _ANSI_ARGS_((Display* display, GC gc, 
+                               int dash_offset, _Xconst char* dash_list, 
+                               int n));
+/* 1 */
+EXTERN XModifierKeymap*         XGetModifierMapping _ANSI_ARGS_((Display* d));
+/* 2 */
+EXTERN XImage *                XCreateImage _ANSI_ARGS_((Display* d, Visual* v, 
+                               unsigned int ui1, int i1, int i2, char* cp, 
+                               unsigned int ui2, unsigned int ui3, int i3, 
+                               int i4));
+/* 3 */
+EXTERN XImage *                XGetImage _ANSI_ARGS_((Display* d, Drawable dr, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, unsigned long ul, int i3));
+/* 4 */
+EXTERN char *          XGetAtomName _ANSI_ARGS_((Display* d, Atom a));
+/* 5 */
+EXTERN char *          XKeysymToString _ANSI_ARGS_((KeySym k));
+/* 6 */
+EXTERN Colormap                XCreateColormap _ANSI_ARGS_((Display* d, Window w, 
+                               Visual* v, int i));
+/* 7 */
+EXTERN GContext                XGContextFromGC _ANSI_ARGS_((GC g));
+/* 8 */
+EXTERN KeySym          XKeycodeToKeysym _ANSI_ARGS_((Display* d, KeyCode k, 
+                               int i));
+/* 9 */
+EXTERN KeySym          XStringToKeysym _ANSI_ARGS_((_Xconst char* c));
+/* 10 */
+EXTERN Window          XRootWindow _ANSI_ARGS_((Display* d, int i));
+/* 11 */
+EXTERN XErrorHandler   XSetErrorHandler _ANSI_ARGS_((XErrorHandler x));
+/* 12 */
+EXTERN Status          XAllocColor _ANSI_ARGS_((Display* d, Colormap c, 
+                               XColor* xp));
+/* 13 */
+EXTERN void            XBell _ANSI_ARGS_((Display* d, int i));
+/* 14 */
+EXTERN void            XChangeProperty _ANSI_ARGS_((Display* d, Window w, 
+                               Atom a1, Atom a2, int i1, int i2, 
+                               _Xconst unsigned char* c, int i3));
+/* 15 */
+EXTERN void            XChangeWindowAttributes _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned long ul, 
+                               XSetWindowAttributes* x));
+/* 16 */
+EXTERN void            XConfigureWindow _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned int i, XWindowChanges* x));
+/* 17 */
+EXTERN void            XCopyArea _ANSI_ARGS_((Display* d, Drawable dr1, 
+                               Drawable dr2, GC g, int i1, int i2, 
+                               unsigned int ui1, unsigned int ui2, int i3, 
+                               int i4));
+/* 18 */
+EXTERN void            XCopyPlane _ANSI_ARGS_((Display* d, Drawable dr1, 
+                               Drawable dr2, GC g, int i1, int i2, 
+                               unsigned int ui1, unsigned int ui2, int i3, 
+                               int i4, unsigned long ul));
+/* 19 */
+EXTERN Pixmap          XCreateBitmapFromData _ANSI_ARGS_((Display* display, 
+                               Drawable d, _Xconst char* data, 
+                               unsigned int width, unsigned int height));
+/* 20 */
+EXTERN void            XDefineCursor _ANSI_ARGS_((Display* d, Window w, 
+                               Cursor c));
+/* 21 */
+EXTERN void            XDestroyWindow _ANSI_ARGS_((Display* d, Window w));
+/* 22 */
+EXTERN void            XDrawArc _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, int i3, int i4));
+/* 23 */
+EXTERN void            XDrawLines _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XPoint* x, int i1, int i2));
+/* 24 */
+EXTERN void            XDrawRectangle _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2));
+/* 25 */
+EXTERN void            XFillArc _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2, int i3, int i4));
+/* 26 */
+EXTERN void            XFillPolygon _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XPoint* x, int i1, int i2, int i3));
+/* 27 */
+EXTERN void            XFillRectangles _ANSI_ARGS_((Display* d, Drawable dr, 
+                               GC g, XRectangle* x, int i));
+/* 28 */
+EXTERN void            XFreeColormap _ANSI_ARGS_((Display* d, Colormap c));
+/* 29 */
+EXTERN void            XFreeColors _ANSI_ARGS_((Display* d, Colormap c, 
+                               unsigned long* ulp, int i, unsigned long ul));
+/* 30 */
+EXTERN void            XFreeModifiermap _ANSI_ARGS_((XModifierKeymap* x));
+/* 31 */
+EXTERN Status          XGetGeometry _ANSI_ARGS_((Display* d, Drawable dr, 
+                               Window* w, int* i1, int* i2, 
+                               unsigned int* ui1, unsigned int* ui2, 
+                               unsigned int* ui3, unsigned int* ui4));
+/* 32 */
+EXTERN int             XGetWindowProperty _ANSI_ARGS_((Display* d, Window w, 
+                               Atom a1, long l1, long l2, Bool b, Atom a2, 
+                               Atom* ap, int* ip, unsigned long* ulp1, 
+                               unsigned long* ulp2, unsigned char** cpp));
+/* 33 */
+EXTERN int             XGrabKeyboard _ANSI_ARGS_((Display* d, Window w, 
+                               Bool b, int i1, int i2, Time t));
+/* 34 */
+EXTERN int             XGrabPointer _ANSI_ARGS_((Display* d, Window w1, 
+                               Bool b, unsigned int ui, int i1, int i2, 
+                               Window w2, Cursor c, Time t));
+/* 35 */
+EXTERN KeyCode         XKeysymToKeycode _ANSI_ARGS_((Display* d, KeySym k));
+/* 36 */
+EXTERN void            XMapWindow _ANSI_ARGS_((Display* d, Window w));
+/* 37 */
+EXTERN void            XMoveResizeWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i1, int i2, unsigned int ui1, 
+                               unsigned int ui2));
+/* 38 */
+EXTERN void            XMoveWindow _ANSI_ARGS_((Display* d, Window w, 
+                               int i1, int i2));
+/* 39 */
+EXTERN Bool            XQueryPointer _ANSI_ARGS_((Display* d, Window w1, 
+                               Window* w2, Window* w3, int* i1, int* i2, 
+                               int* i3, int* i4, unsigned int* ui));
+/* 40 */
+EXTERN void            XRaiseWindow _ANSI_ARGS_((Display* d, Window w));
+/* 41 */
+EXTERN void            XRefreshKeyboardMapping _ANSI_ARGS_((
+                               XMappingEvent* x));
+/* 42 */
+EXTERN void            XResizeWindow _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned int ui1, unsigned int ui2));
+/* 43 */
+EXTERN void            XSelectInput _ANSI_ARGS_((Display* d, Window w, 
+                               long l));
+/* 44 */
+EXTERN Status          XSendEvent _ANSI_ARGS_((Display* d, Window w, Bool b, 
+                               long l, XEvent* x));
+/* 45 */
+EXTERN void            XSetIconName _ANSI_ARGS_((Display* d, Window w, 
+                               _Xconst char* c));
+/* 46 */
+EXTERN void            XSetInputFocus _ANSI_ARGS_((Display* d, Window w, 
+                               int i, Time t));
+/* 47 */
+EXTERN void            XSetSelectionOwner _ANSI_ARGS_((Display* d, Atom a, 
+                               Window w, Time t));
+/* 48 */
+EXTERN void            XSetWindowBackground _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned long ul));
+/* 49 */
+EXTERN void            XSetWindowBackgroundPixmap _ANSI_ARGS_((Display* d, 
+                               Window w, Pixmap p));
+/* 50 */
+EXTERN void            XSetWindowBorder _ANSI_ARGS_((Display* d, Window w, 
+                               unsigned long ul));
+/* 51 */
+EXTERN void            XSetWindowBorderPixmap _ANSI_ARGS_((Display* d, 
+                               Window w, Pixmap p));
+/* 52 */
+EXTERN void            XSetWindowBorderWidth _ANSI_ARGS_((Display* d, 
+                               Window w, unsigned int ui));
+/* 53 */
+EXTERN void            XSetWindowColormap _ANSI_ARGS_((Display* d, Window w, 
+                               Colormap c));
+/* 54 */
+EXTERN void            XUngrabKeyboard _ANSI_ARGS_((Display* d, Time t));
+/* 55 */
+EXTERN void            XUngrabPointer _ANSI_ARGS_((Display* d, Time t));
+/* 56 */
+EXTERN void            XUnmapWindow _ANSI_ARGS_((Display* d, Window w));
+/* 57 */
+EXTERN void            TkPutImage _ANSI_ARGS_((unsigned long * colors, 
+                               int ncolors, Display* display, Drawable d, 
+                               GC gc, XImage* image, int src_x, int src_y, 
+                               int dest_x, int dest_y, unsigned int width, 
+                               unsigned int height));
+/* 58 */
+EXTERN Status          XParseColor _ANSI_ARGS_((Display * display, 
+                               Colormap map, _Xconst char* spec, 
+                               XColor * colorPtr));
+/* 59 */
+EXTERN GC              XCreateGC _ANSI_ARGS_((Display* display, Drawable d, 
+                               unsigned long valuemask, XGCValues* values));
+/* 60 */
+EXTERN void            XFreeGC _ANSI_ARGS_((Display* display, GC gc));
+/* 61 */
+EXTERN Atom            XInternAtom _ANSI_ARGS_((Display* display, 
+                               _Xconst char* atom_name, Bool only_if_exists));
+/* 62 */
+EXTERN void            XSetBackground _ANSI_ARGS_((Display* display, GC gc, 
+                               unsigned long foreground));
+/* 63 */
+EXTERN void            XSetForeground _ANSI_ARGS_((Display* display, GC gc, 
+                               unsigned long foreground));
+/* 64 */
+EXTERN void            XSetClipMask _ANSI_ARGS_((Display* display, GC gc, 
+                               Pixmap pixmap));
+/* 65 */
+EXTERN void            XSetClipOrigin _ANSI_ARGS_((Display* display, GC gc, 
+                               int clip_x_origin, int clip_y_origin));
+/* 66 */
+EXTERN void            XSetTSOrigin _ANSI_ARGS_((Display* display, GC gc, 
+                               int ts_x_origin, int ts_y_origin));
+/* 67 */
+EXTERN void            XChangeGC _ANSI_ARGS_((Display * d, GC gc, 
+                               unsigned long mask, XGCValues * values));
+/* 68 */
+EXTERN void            XSetFont _ANSI_ARGS_((Display * display, GC gc, 
+                               Font font));
+/* 69 */
+EXTERN void            XSetArcMode _ANSI_ARGS_((Display * display, GC gc, 
+                               int arc_mode));
+/* 70 */
+EXTERN void            XSetStipple _ANSI_ARGS_((Display * display, GC gc, 
+                               Pixmap stipple));
+/* 71 */
+EXTERN void            XSetFillRule _ANSI_ARGS_((Display * display, GC gc, 
+                               int fill_rule));
+/* 72 */
+EXTERN void            XSetFillStyle _ANSI_ARGS_((Display * display, GC gc, 
+                               int fill_style));
+/* 73 */
+EXTERN void            XSetFunction _ANSI_ARGS_((Display * display, GC gc, 
+                               int function));
+/* 74 */
+EXTERN void            XSetLineAttributes _ANSI_ARGS_((Display * display, 
+                               GC gc, unsigned int line_width, 
+                               int line_style, int cap_style, 
+                               int join_style));
+/* 75 */
+EXTERN int             _XInitImageFuncPtrs _ANSI_ARGS_((XImage * image));
+/* 76 */
+EXTERN XIC             XCreateIC _ANSI_ARGS_((void));
+/* 77 */
+EXTERN XVisualInfo *   XGetVisualInfo _ANSI_ARGS_((Display* display, 
+                               long vinfo_mask, XVisualInfo* vinfo_template, 
+                               int* nitems_return));
+/* 78 */
+EXTERN void            XSetWMClientMachine _ANSI_ARGS_((Display* display, 
+                               Window w, XTextProperty* text_prop));
+/* 79 */
+EXTERN Status          XStringListToTextProperty _ANSI_ARGS_((char** list, 
+                               int count, XTextProperty* text_prop_return));
+/* 80 */
+EXTERN void            XDrawSegments _ANSI_ARGS_((Display * display, 
+                               Drawable d, GC gc, XSegment * segments, 
+                               int nsegments));
+/* 81 */
+EXTERN void            XForceScreenSaver _ANSI_ARGS_((Display* display, 
+                               int mode));
+/* 82 */
+EXTERN void            XDrawLine _ANSI_ARGS_((Display* d, Drawable dr, GC g, 
+                               int x1, int y1, int x2, int y2));
+/* 83 */
+EXTERN void            XFillRectangle _ANSI_ARGS_((Display* display, 
+                               Drawable d, GC gc, int x, int y, 
+                               unsigned int width, unsigned int height));
+/* 84 */
+EXTERN void            XClearWindow _ANSI_ARGS_((Display* d, Window w));
+/* 85 */
+EXTERN void            XDrawPoint _ANSI_ARGS_((Display* display, Drawable d, 
+                               GC gc, int x, int y));
+/* 86 */
+EXTERN void            XDrawPoints _ANSI_ARGS_((Display* display, 
+                               Drawable d, GC gc, XPoint * points, 
+                               int npoints, int mode));
+/* 87 */
+EXTERN void            XWarpPointer _ANSI_ARGS_((Display* display, 
+                               Window src_w, Window dest_w, int src_x, 
+                               int src_y, unsigned int src_width, 
+                               unsigned int src_height, int dest_x, 
+                               int dest_y));
+/* 88 */
+EXTERN void            XQueryColor _ANSI_ARGS_((Display * display, 
+                               Colormap colormap, XColor * def_in_out));
+/* 89 */
+EXTERN void            XQueryColors _ANSI_ARGS_((Display * display, 
+                               Colormap colormap, XColor * defs_in_out, 
+                               int ncolors));
+#endif /* MAC_TCL */
+
+typedef struct TkIntXlibStubs {
+    int magic;
+    struct TkIntXlibStubHooks *hooks;
+
+#ifdef __WIN32__
+    void (*xSetDashes) _ANSI_ARGS_((Display* display, GC gc, int dash_offset, _Xconst char* dash_list, int n)); /* 0 */
+    XModifierKeymap* (*xGetModifierMapping) _ANSI_ARGS_((Display* d)); /* 1 */
+    XImage * (*xCreateImage) _ANSI_ARGS_((Display* d, Visual* v, unsigned int ui1, int i1, int i2, char* cp, unsigned int ui2, unsigned int ui3, int i3, int i4)); /* 2 */
+    XImage * (*xGetImage) _ANSI_ARGS_((Display* d, Drawable dr, int i1, int i2, unsigned int ui1, unsigned int ui2, unsigned long ul, int i3)); /* 3 */
+    char * (*xGetAtomName) _ANSI_ARGS_((Display* d, Atom a)); /* 4 */
+    char * (*xKeysymToString) _ANSI_ARGS_((KeySym k)); /* 5 */
+    Colormap (*xCreateColormap) _ANSI_ARGS_((Display* d, Window w, Visual* v, int i)); /* 6 */
+    Cursor (*xCreatePixmapCursor) _ANSI_ARGS_((Display* d, Pixmap p1, Pixmap p2, XColor* x1, XColor* x2, unsigned int ui1, unsigned int ui2)); /* 7 */
+    Cursor (*xCreateGlyphCursor) _ANSI_ARGS_((Display* d, Font f1, Font f2, unsigned int ui1, unsigned int ui2, XColor* x1, XColor* x2)); /* 8 */
+    GContext (*xGContextFromGC) _ANSI_ARGS_((GC g)); /* 9 */
+    XHostAddress * (*xListHosts) _ANSI_ARGS_((Display* d, int* i, Bool* b)); /* 10 */
+    KeySym (*xKeycodeToKeysym) _ANSI_ARGS_((Display* d, unsigned int k, int i)); /* 11 */
+    KeySym (*xStringToKeysym) _ANSI_ARGS_((_Xconst char* c)); /* 12 */
+    Window (*xRootWindow) _ANSI_ARGS_((Display* d, int i)); /* 13 */
+    XErrorHandler (*xSetErrorHandler) _ANSI_ARGS_((XErrorHandler x)); /* 14 */
+    Status (*xIconifyWindow) _ANSI_ARGS_((Display* d, Window w, int i)); /* 15 */
+    Status (*xWithdrawWindow) _ANSI_ARGS_((Display* d, Window w, int i)); /* 16 */
+    Status (*xGetWMColormapWindows) _ANSI_ARGS_((Display* d, Window w, Window** wpp, int* ip)); /* 17 */
+    Status (*xAllocColor) _ANSI_ARGS_((Display* d, Colormap c, XColor* xp)); /* 18 */
+    void (*xBell) _ANSI_ARGS_((Display* d, int i)); /* 19 */
+    void (*xChangeProperty) _ANSI_ARGS_((Display* d, Window w, Atom a1, Atom a2, int i1, int i2, _Xconst unsigned char* c, int i3)); /* 20 */
+    void (*xChangeWindowAttributes) _ANSI_ARGS_((Display* d, Window w, unsigned long ul, XSetWindowAttributes* x)); /* 21 */
+    void (*xClearWindow) _ANSI_ARGS_((Display* d, Window w)); /* 22 */
+    void (*xConfigureWindow) _ANSI_ARGS_((Display* d, Window w, unsigned int i, XWindowChanges* x)); /* 23 */
+    void (*xCopyArea) _ANSI_ARGS_((Display* d, Drawable dr1, Drawable dr2, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 24 */
+    void (*xCopyPlane) _ANSI_ARGS_((Display* d, Drawable dr1, Drawable dr2, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4, unsigned long ul)); /* 25 */
+    Pixmap (*xCreateBitmapFromData) _ANSI_ARGS_((Display* display, Drawable d, _Xconst char* data, unsigned int width, unsigned int height)); /* 26 */
+    void (*xDefineCursor) _ANSI_ARGS_((Display* d, Window w, Cursor c)); /* 27 */
+    void (*xDeleteProperty) _ANSI_ARGS_((Display* d, Window w, Atom a)); /* 28 */
+    void (*xDestroyWindow) _ANSI_ARGS_((Display* d, Window w)); /* 29 */
+    void (*xDrawArc) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 30 */
+    void (*xDrawLines) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2)); /* 31 */
+    void (*xDrawRectangle) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2)); /* 32 */
+    void (*xFillArc) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 33 */
+    void (*xFillPolygon) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2, int i3)); /* 34 */
+    void (*xFillRectangles) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XRectangle* x, int i)); /* 35 */
+    void (*xForceScreenSaver) _ANSI_ARGS_((Display* d, int i)); /* 36 */
+    void (*xFreeColormap) _ANSI_ARGS_((Display* d, Colormap c)); /* 37 */
+    void (*xFreeColors) _ANSI_ARGS_((Display* d, Colormap c, unsigned long* ulp, int i, unsigned long ul)); /* 38 */
+    void (*xFreeCursor) _ANSI_ARGS_((Display* d, Cursor c)); /* 39 */
+    void (*xFreeModifiermap) _ANSI_ARGS_((XModifierKeymap* x)); /* 40 */
+    Status (*xGetGeometry) _ANSI_ARGS_((Display* d, Drawable dr, Window* w, int* i1, int* i2, unsigned int* ui1, unsigned int* ui2, unsigned int* ui3, unsigned int* ui4)); /* 41 */
+    void (*xGetInputFocus) _ANSI_ARGS_((Display* d, Window* w, int* i)); /* 42 */
+    int (*xGetWindowProperty) _ANSI_ARGS_((Display* d, Window w, Atom a1, long l1, long l2, Bool b, Atom a2, Atom* ap, int* ip, unsigned long* ulp1, unsigned long* ulp2, unsigned char** cpp)); /* 43 */
+    Status (*xGetWindowAttributes) _ANSI_ARGS_((Display* d, Window w, XWindowAttributes* x)); /* 44 */
+    int (*xGrabKeyboard) _ANSI_ARGS_((Display* d, Window w, Bool b, int i1, int i2, Time t)); /* 45 */
+    int (*xGrabPointer) _ANSI_ARGS_((Display* d, Window w1, Bool b, unsigned int ui, int i1, int i2, Window w2, Cursor c, Time t)); /* 46 */
+    KeyCode (*xKeysymToKeycode) _ANSI_ARGS_((Display* d, KeySym k)); /* 47 */
+    Status (*xLookupColor) _ANSI_ARGS_((Display* d, Colormap c1, _Xconst char* c2, XColor* x1, XColor* x2)); /* 48 */
+    void (*xMapWindow) _ANSI_ARGS_((Display* d, Window w)); /* 49 */
+    void (*xMoveResizeWindow) _ANSI_ARGS_((Display* d, Window w, int i1, int i2, unsigned int ui1, unsigned int ui2)); /* 50 */
+    void (*xMoveWindow) _ANSI_ARGS_((Display* d, Window w, int i1, int i2)); /* 51 */
+    void (*xNextEvent) _ANSI_ARGS_((Display* d, XEvent* x)); /* 52 */
+    void (*xPutBackEvent) _ANSI_ARGS_((Display* d, XEvent* x)); /* 53 */
+    void (*xQueryColors) _ANSI_ARGS_((Display* d, Colormap c, XColor* x, int i)); /* 54 */
+    Bool (*xQueryPointer) _ANSI_ARGS_((Display* d, Window w1, Window* w2, Window* w3, int* i1, int* i2, int* i3, int* i4, unsigned int* ui)); /* 55 */
+    Status (*xQueryTree) _ANSI_ARGS_((Display* d, Window w1, Window* w2, Window* w3, Window** w4, unsigned int* ui)); /* 56 */
+    void (*xRaiseWindow) _ANSI_ARGS_((Display* d, Window w)); /* 57 */
+    void (*xRefreshKeyboardMapping) _ANSI_ARGS_((XMappingEvent* x)); /* 58 */
+    void (*xResizeWindow) _ANSI_ARGS_((Display* d, Window w, unsigned int ui1, unsigned int ui2)); /* 59 */
+    void (*xSelectInput) _ANSI_ARGS_((Display* d, Window w, long l)); /* 60 */
+    Status (*xSendEvent) _ANSI_ARGS_((Display* d, Window w, Bool b, long l, XEvent* x)); /* 61 */
+    void (*xSetCommand) _ANSI_ARGS_((Display* d, Window w, char** c, int i)); /* 62 */
+    void (*xSetIconName) _ANSI_ARGS_((Display* d, Window w, _Xconst char* c)); /* 63 */
+    void (*xSetInputFocus) _ANSI_ARGS_((Display* d, Window w, int i, Time t)); /* 64 */
+    void (*xSetSelectionOwner) _ANSI_ARGS_((Display* d, Atom a, Window w, Time t)); /* 65 */
+    void (*xSetWindowBackground) _ANSI_ARGS_((Display* d, Window w, unsigned long ul)); /* 66 */
+    void (*xSetWindowBackgroundPixmap) _ANSI_ARGS_((Display* d, Window w, Pixmap p)); /* 67 */
+    void (*xSetWindowBorder) _ANSI_ARGS_((Display* d, Window w, unsigned long ul)); /* 68 */
+    void (*xSetWindowBorderPixmap) _ANSI_ARGS_((Display* d, Window w, Pixmap p)); /* 69 */
+    void (*xSetWindowBorderWidth) _ANSI_ARGS_((Display* d, Window w, unsigned int ui)); /* 70 */
+    void (*xSetWindowColormap) _ANSI_ARGS_((Display* d, Window w, Colormap c)); /* 71 */
+    Bool (*xTranslateCoordinates) _ANSI_ARGS_((Display* d, Window w1, Window w2, int i1, int i2, int* i3, int* i4, Window* w3)); /* 72 */
+    void (*xUngrabKeyboard) _ANSI_ARGS_((Display* d, Time t)); /* 73 */
+    void (*xUngrabPointer) _ANSI_ARGS_((Display* d, Time t)); /* 74 */
+    void (*xUnmapWindow) _ANSI_ARGS_((Display* d, Window w)); /* 75 */
+    void (*xWindowEvent) _ANSI_ARGS_((Display* d, Window w, long l, XEvent* x)); /* 76 */
+    void (*xDestroyIC) _ANSI_ARGS_((XIC x)); /* 77 */
+    Bool (*xFilterEvent) _ANSI_ARGS_((XEvent* x, Window w)); /* 78 */
+    int (*xmbLookupString) _ANSI_ARGS_((XIC xi, XKeyPressedEvent* xk, char* c, int i, KeySym* k, Status* s)); /* 79 */
+    void (*tkPutImage) _ANSI_ARGS_((unsigned long * colors, int ncolors, Display* display, Drawable d, GC gc, XImage* image, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height)); /* 80 */
+    void *reserved81;
+    Status (*xParseColor) _ANSI_ARGS_((Display * display, Colormap map, _Xconst char* spec, XColor * colorPtr)); /* 82 */
+    GC (*xCreateGC) _ANSI_ARGS_((Display* display, Drawable d, unsigned long valuemask, XGCValues* values)); /* 83 */
+    void (*xFreeGC) _ANSI_ARGS_((Display* display, GC gc)); /* 84 */
+    Atom (*xInternAtom) _ANSI_ARGS_((Display* display, _Xconst char* atom_name, Bool only_if_exists)); /* 85 */
+    void (*xSetBackground) _ANSI_ARGS_((Display* display, GC gc, unsigned long foreground)); /* 86 */
+    void (*xSetForeground) _ANSI_ARGS_((Display* display, GC gc, unsigned long foreground)); /* 87 */
+    void (*xSetClipMask) _ANSI_ARGS_((Display* display, GC gc, Pixmap pixmap)); /* 88 */
+    void (*xSetClipOrigin) _ANSI_ARGS_((Display* display, GC gc, int clip_x_origin, int clip_y_origin)); /* 89 */
+    void (*xSetTSOrigin) _ANSI_ARGS_((Display* display, GC gc, int ts_x_origin, int ts_y_origin)); /* 90 */
+    void (*xChangeGC) _ANSI_ARGS_((Display * d, GC gc, unsigned long mask, XGCValues * values)); /* 91 */
+    void (*xSetFont) _ANSI_ARGS_((Display * display, GC gc, Font font)); /* 92 */
+    void (*xSetArcMode) _ANSI_ARGS_((Display * display, GC gc, int arc_mode)); /* 93 */
+    void (*xSetStipple) _ANSI_ARGS_((Display * display, GC gc, Pixmap stipple)); /* 94 */
+    void (*xSetFillRule) _ANSI_ARGS_((Display * display, GC gc, int fill_rule)); /* 95 */
+    void (*xSetFillStyle) _ANSI_ARGS_((Display * display, GC gc, int fill_style)); /* 96 */
+    void (*xSetFunction) _ANSI_ARGS_((Display * display, GC gc, int function)); /* 97 */
+    void (*xSetLineAttributes) _ANSI_ARGS_((Display * display, GC gc, unsigned int line_width, int line_style, int cap_style, int join_style)); /* 98 */
+    int (*_XInitImageFuncPtrs) _ANSI_ARGS_((XImage * image)); /* 99 */
+    XIC (*xCreateIC) _ANSI_ARGS_((void)); /* 100 */
+    XVisualInfo * (*xGetVisualInfo) _ANSI_ARGS_((Display* display, long vinfo_mask, XVisualInfo* vinfo_template, int* nitems_return)); /* 101 */
+    void (*xSetWMClientMachine) _ANSI_ARGS_((Display* display, Window w, XTextProperty* text_prop)); /* 102 */
+    Status (*xStringListToTextProperty) _ANSI_ARGS_((char** list, int count, XTextProperty* text_prop_return)); /* 103 */
+    void (*xDrawLine) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int x1, int y1, int x2, int y2)); /* 104 */
+    void (*xWarpPointer) _ANSI_ARGS_((Display* d, Window s, Window dw, int sx, int sy, unsigned int sw, unsigned int sh, int dx, int dy)); /* 105 */
+    void (*xFillRectangle) _ANSI_ARGS_((Display* display, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height)); /* 106 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*xSetDashes) _ANSI_ARGS_((Display* display, GC gc, int dash_offset, _Xconst char* dash_list, int n)); /* 0 */
+    XModifierKeymap* (*xGetModifierMapping) _ANSI_ARGS_((Display* d)); /* 1 */
+    XImage * (*xCreateImage) _ANSI_ARGS_((Display* d, Visual* v, unsigned int ui1, int i1, int i2, char* cp, unsigned int ui2, unsigned int ui3, int i3, int i4)); /* 2 */
+    XImage * (*xGetImage) _ANSI_ARGS_((Display* d, Drawable dr, int i1, int i2, unsigned int ui1, unsigned int ui2, unsigned long ul, int i3)); /* 3 */
+    char * (*xGetAtomName) _ANSI_ARGS_((Display* d, Atom a)); /* 4 */
+    char * (*xKeysymToString) _ANSI_ARGS_((KeySym k)); /* 5 */
+    Colormap (*xCreateColormap) _ANSI_ARGS_((Display* d, Window w, Visual* v, int i)); /* 6 */
+    GContext (*xGContextFromGC) _ANSI_ARGS_((GC g)); /* 7 */
+    KeySym (*xKeycodeToKeysym) _ANSI_ARGS_((Display* d, KeyCode k, int i)); /* 8 */
+    KeySym (*xStringToKeysym) _ANSI_ARGS_((_Xconst char* c)); /* 9 */
+    Window (*xRootWindow) _ANSI_ARGS_((Display* d, int i)); /* 10 */
+    XErrorHandler (*xSetErrorHandler) _ANSI_ARGS_((XErrorHandler x)); /* 11 */
+    Status (*xAllocColor) _ANSI_ARGS_((Display* d, Colormap c, XColor* xp)); /* 12 */
+    void (*xBell) _ANSI_ARGS_((Display* d, int i)); /* 13 */
+    void (*xChangeProperty) _ANSI_ARGS_((Display* d, Window w, Atom a1, Atom a2, int i1, int i2, _Xconst unsigned char* c, int i3)); /* 14 */
+    void (*xChangeWindowAttributes) _ANSI_ARGS_((Display* d, Window w, unsigned long ul, XSetWindowAttributes* x)); /* 15 */
+    void (*xConfigureWindow) _ANSI_ARGS_((Display* d, Window w, unsigned int i, XWindowChanges* x)); /* 16 */
+    void (*xCopyArea) _ANSI_ARGS_((Display* d, Drawable dr1, Drawable dr2, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 17 */
+    void (*xCopyPlane) _ANSI_ARGS_((Display* d, Drawable dr1, Drawable dr2, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4, unsigned long ul)); /* 18 */
+    Pixmap (*xCreateBitmapFromData) _ANSI_ARGS_((Display* display, Drawable d, _Xconst char* data, unsigned int width, unsigned int height)); /* 19 */
+    void (*xDefineCursor) _ANSI_ARGS_((Display* d, Window w, Cursor c)); /* 20 */
+    void (*xDestroyWindow) _ANSI_ARGS_((Display* d, Window w)); /* 21 */
+    void (*xDrawArc) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 22 */
+    void (*xDrawLines) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2)); /* 23 */
+    void (*xDrawRectangle) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2)); /* 24 */
+    void (*xFillArc) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int i1, int i2, unsigned int ui1, unsigned int ui2, int i3, int i4)); /* 25 */
+    void (*xFillPolygon) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XPoint* x, int i1, int i2, int i3)); /* 26 */
+    void (*xFillRectangles) _ANSI_ARGS_((Display* d, Drawable dr, GC g, XRectangle* x, int i)); /* 27 */
+    void (*xFreeColormap) _ANSI_ARGS_((Display* d, Colormap c)); /* 28 */
+    void (*xFreeColors) _ANSI_ARGS_((Display* d, Colormap c, unsigned long* ulp, int i, unsigned long ul)); /* 29 */
+    void (*xFreeModifiermap) _ANSI_ARGS_((XModifierKeymap* x)); /* 30 */
+    Status (*xGetGeometry) _ANSI_ARGS_((Display* d, Drawable dr, Window* w, int* i1, int* i2, unsigned int* ui1, unsigned int* ui2, unsigned int* ui3, unsigned int* ui4)); /* 31 */
+    int (*xGetWindowProperty) _ANSI_ARGS_((Display* d, Window w, Atom a1, long l1, long l2, Bool b, Atom a2, Atom* ap, int* ip, unsigned long* ulp1, unsigned long* ulp2, unsigned char** cpp)); /* 32 */
+    int (*xGrabKeyboard) _ANSI_ARGS_((Display* d, Window w, Bool b, int i1, int i2, Time t)); /* 33 */
+    int (*xGrabPointer) _ANSI_ARGS_((Display* d, Window w1, Bool b, unsigned int ui, int i1, int i2, Window w2, Cursor c, Time t)); /* 34 */
+    KeyCode (*xKeysymToKeycode) _ANSI_ARGS_((Display* d, KeySym k)); /* 35 */
+    void (*xMapWindow) _ANSI_ARGS_((Display* d, Window w)); /* 36 */
+    void (*xMoveResizeWindow) _ANSI_ARGS_((Display* d, Window w, int i1, int i2, unsigned int ui1, unsigned int ui2)); /* 37 */
+    void (*xMoveWindow) _ANSI_ARGS_((Display* d, Window w, int i1, int i2)); /* 38 */
+    Bool (*xQueryPointer) _ANSI_ARGS_((Display* d, Window w1, Window* w2, Window* w3, int* i1, int* i2, int* i3, int* i4, unsigned int* ui)); /* 39 */
+    void (*xRaiseWindow) _ANSI_ARGS_((Display* d, Window w)); /* 40 */
+    void (*xRefreshKeyboardMapping) _ANSI_ARGS_((XMappingEvent* x)); /* 41 */
+    void (*xResizeWindow) _ANSI_ARGS_((Display* d, Window w, unsigned int ui1, unsigned int ui2)); /* 42 */
+    void (*xSelectInput) _ANSI_ARGS_((Display* d, Window w, long l)); /* 43 */
+    Status (*xSendEvent) _ANSI_ARGS_((Display* d, Window w, Bool b, long l, XEvent* x)); /* 44 */
+    void (*xSetIconName) _ANSI_ARGS_((Display* d, Window w, _Xconst char* c)); /* 45 */
+    void (*xSetInputFocus) _ANSI_ARGS_((Display* d, Window w, int i, Time t)); /* 46 */
+    void (*xSetSelectionOwner) _ANSI_ARGS_((Display* d, Atom a, Window w, Time t)); /* 47 */
+    void (*xSetWindowBackground) _ANSI_ARGS_((Display* d, Window w, unsigned long ul)); /* 48 */
+    void (*xSetWindowBackgroundPixmap) _ANSI_ARGS_((Display* d, Window w, Pixmap p)); /* 49 */
+    void (*xSetWindowBorder) _ANSI_ARGS_((Display* d, Window w, unsigned long ul)); /* 50 */
+    void (*xSetWindowBorderPixmap) _ANSI_ARGS_((Display* d, Window w, Pixmap p)); /* 51 */
+    void (*xSetWindowBorderWidth) _ANSI_ARGS_((Display* d, Window w, unsigned int ui)); /* 52 */
+    void (*xSetWindowColormap) _ANSI_ARGS_((Display* d, Window w, Colormap c)); /* 53 */
+    void (*xUngrabKeyboard) _ANSI_ARGS_((Display* d, Time t)); /* 54 */
+    void (*xUngrabPointer) _ANSI_ARGS_((Display* d, Time t)); /* 55 */
+    void (*xUnmapWindow) _ANSI_ARGS_((Display* d, Window w)); /* 56 */
+    void (*tkPutImage) _ANSI_ARGS_((unsigned long * colors, int ncolors, Display* display, Drawable d, GC gc, XImage* image, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height)); /* 57 */
+    Status (*xParseColor) _ANSI_ARGS_((Display * display, Colormap map, _Xconst char* spec, XColor * colorPtr)); /* 58 */
+    GC (*xCreateGC) _ANSI_ARGS_((Display* display, Drawable d, unsigned long valuemask, XGCValues* values)); /* 59 */
+    void (*xFreeGC) _ANSI_ARGS_((Display* display, GC gc)); /* 60 */
+    Atom (*xInternAtom) _ANSI_ARGS_((Display* display, _Xconst char* atom_name, Bool only_if_exists)); /* 61 */
+    void (*xSetBackground) _ANSI_ARGS_((Display* display, GC gc, unsigned long foreground)); /* 62 */
+    void (*xSetForeground) _ANSI_ARGS_((Display* display, GC gc, unsigned long foreground)); /* 63 */
+    void (*xSetClipMask) _ANSI_ARGS_((Display* display, GC gc, Pixmap pixmap)); /* 64 */
+    void (*xSetClipOrigin) _ANSI_ARGS_((Display* display, GC gc, int clip_x_origin, int clip_y_origin)); /* 65 */
+    void (*xSetTSOrigin) _ANSI_ARGS_((Display* display, GC gc, int ts_x_origin, int ts_y_origin)); /* 66 */
+    void (*xChangeGC) _ANSI_ARGS_((Display * d, GC gc, unsigned long mask, XGCValues * values)); /* 67 */
+    void (*xSetFont) _ANSI_ARGS_((Display * display, GC gc, Font font)); /* 68 */
+    void (*xSetArcMode) _ANSI_ARGS_((Display * display, GC gc, int arc_mode)); /* 69 */
+    void (*xSetStipple) _ANSI_ARGS_((Display * display, GC gc, Pixmap stipple)); /* 70 */
+    void (*xSetFillRule) _ANSI_ARGS_((Display * display, GC gc, int fill_rule)); /* 71 */
+    void (*xSetFillStyle) _ANSI_ARGS_((Display * display, GC gc, int fill_style)); /* 72 */
+    void (*xSetFunction) _ANSI_ARGS_((Display * display, GC gc, int function)); /* 73 */
+    void (*xSetLineAttributes) _ANSI_ARGS_((Display * display, GC gc, unsigned int line_width, int line_style, int cap_style, int join_style)); /* 74 */
+    int (*_XInitImageFuncPtrs) _ANSI_ARGS_((XImage * image)); /* 75 */
+    XIC (*xCreateIC) _ANSI_ARGS_((void)); /* 76 */
+    XVisualInfo * (*xGetVisualInfo) _ANSI_ARGS_((Display* display, long vinfo_mask, XVisualInfo* vinfo_template, int* nitems_return)); /* 77 */
+    void (*xSetWMClientMachine) _ANSI_ARGS_((Display* display, Window w, XTextProperty* text_prop)); /* 78 */
+    Status (*xStringListToTextProperty) _ANSI_ARGS_((char** list, int count, XTextProperty* text_prop_return)); /* 79 */
+    void (*xDrawSegments) _ANSI_ARGS_((Display * display, Drawable d, GC gc, XSegment * segments, int nsegments)); /* 80 */
+    void (*xForceScreenSaver) _ANSI_ARGS_((Display* display, int mode)); /* 81 */
+    void (*xDrawLine) _ANSI_ARGS_((Display* d, Drawable dr, GC g, int x1, int y1, int x2, int y2)); /* 82 */
+    void (*xFillRectangle) _ANSI_ARGS_((Display* display, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height)); /* 83 */
+    void (*xClearWindow) _ANSI_ARGS_((Display* d, Window w)); /* 84 */
+    void (*xDrawPoint) _ANSI_ARGS_((Display* display, Drawable d, GC gc, int x, int y)); /* 85 */
+    void (*xDrawPoints) _ANSI_ARGS_((Display* display, Drawable d, GC gc, XPoint * points, int npoints, int mode)); /* 86 */
+    void (*xWarpPointer) _ANSI_ARGS_((Display* display, Window src_w, Window dest_w, int src_x, int src_y, unsigned int src_width, unsigned int src_height, int dest_x, int dest_y)); /* 87 */
+    void (*xQueryColor) _ANSI_ARGS_((Display * display, Colormap colormap, XColor * def_in_out)); /* 88 */
+    void (*xQueryColors) _ANSI_ARGS_((Display * display, Colormap colormap, XColor * defs_in_out, int ncolors)); /* 89 */
+#endif /* MAC_TCL */
+} TkIntXlibStubs;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern TkIntXlibStubs *tkIntXlibStubsPtr;
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS)
+
+/*
+ * Inline function declarations:
+ */
+
+#ifdef __WIN32__
+#ifndef XSetDashes
+#define XSetDashes \
+       (tkIntXlibStubsPtr->xSetDashes) /* 0 */
+#endif
+#ifndef XGetModifierMapping
+#define XGetModifierMapping \
+       (tkIntXlibStubsPtr->xGetModifierMapping) /* 1 */
+#endif
+#ifndef XCreateImage
+#define XCreateImage \
+       (tkIntXlibStubsPtr->xCreateImage) /* 2 */
+#endif
+#ifndef XGetImage
+#define XGetImage \
+       (tkIntXlibStubsPtr->xGetImage) /* 3 */
+#endif
+#ifndef XGetAtomName
+#define XGetAtomName \
+       (tkIntXlibStubsPtr->xGetAtomName) /* 4 */
+#endif
+#ifndef XKeysymToString
+#define XKeysymToString \
+       (tkIntXlibStubsPtr->xKeysymToString) /* 5 */
+#endif
+#ifndef XCreateColormap
+#define XCreateColormap \
+       (tkIntXlibStubsPtr->xCreateColormap) /* 6 */
+#endif
+#ifndef XCreatePixmapCursor
+#define XCreatePixmapCursor \
+       (tkIntXlibStubsPtr->xCreatePixmapCursor) /* 7 */
+#endif
+#ifndef XCreateGlyphCursor
+#define XCreateGlyphCursor \
+       (tkIntXlibStubsPtr->xCreateGlyphCursor) /* 8 */
+#endif
+#ifndef XGContextFromGC
+#define XGContextFromGC \
+       (tkIntXlibStubsPtr->xGContextFromGC) /* 9 */
+#endif
+#ifndef XListHosts
+#define XListHosts \
+       (tkIntXlibStubsPtr->xListHosts) /* 10 */
+#endif
+#ifndef XKeycodeToKeysym
+#define XKeycodeToKeysym \
+       (tkIntXlibStubsPtr->xKeycodeToKeysym) /* 11 */
+#endif
+#ifndef XStringToKeysym
+#define XStringToKeysym \
+       (tkIntXlibStubsPtr->xStringToKeysym) /* 12 */
+#endif
+#ifndef XRootWindow
+#define XRootWindow \
+       (tkIntXlibStubsPtr->xRootWindow) /* 13 */
+#endif
+#ifndef XSetErrorHandler
+#define XSetErrorHandler \
+       (tkIntXlibStubsPtr->xSetErrorHandler) /* 14 */
+#endif
+#ifndef XIconifyWindow
+#define XIconifyWindow \
+       (tkIntXlibStubsPtr->xIconifyWindow) /* 15 */
+#endif
+#ifndef XWithdrawWindow
+#define XWithdrawWindow \
+       (tkIntXlibStubsPtr->xWithdrawWindow) /* 16 */
+#endif
+#ifndef XGetWMColormapWindows
+#define XGetWMColormapWindows \
+       (tkIntXlibStubsPtr->xGetWMColormapWindows) /* 17 */
+#endif
+#ifndef XAllocColor
+#define XAllocColor \
+       (tkIntXlibStubsPtr->xAllocColor) /* 18 */
+#endif
+#ifndef XBell
+#define XBell \
+       (tkIntXlibStubsPtr->xBell) /* 19 */
+#endif
+#ifndef XChangeProperty
+#define XChangeProperty \
+       (tkIntXlibStubsPtr->xChangeProperty) /* 20 */
+#endif
+#ifndef XChangeWindowAttributes
+#define XChangeWindowAttributes \
+       (tkIntXlibStubsPtr->xChangeWindowAttributes) /* 21 */
+#endif
+#ifndef XClearWindow
+#define XClearWindow \
+       (tkIntXlibStubsPtr->xClearWindow) /* 22 */
+#endif
+#ifndef XConfigureWindow
+#define XConfigureWindow \
+       (tkIntXlibStubsPtr->xConfigureWindow) /* 23 */
+#endif
+#ifndef XCopyArea
+#define XCopyArea \
+       (tkIntXlibStubsPtr->xCopyArea) /* 24 */
+#endif
+#ifndef XCopyPlane
+#define XCopyPlane \
+       (tkIntXlibStubsPtr->xCopyPlane) /* 25 */
+#endif
+#ifndef XCreateBitmapFromData
+#define XCreateBitmapFromData \
+       (tkIntXlibStubsPtr->xCreateBitmapFromData) /* 26 */
+#endif
+#ifndef XDefineCursor
+#define XDefineCursor \
+       (tkIntXlibStubsPtr->xDefineCursor) /* 27 */
+#endif
+#ifndef XDeleteProperty
+#define XDeleteProperty \
+       (tkIntXlibStubsPtr->xDeleteProperty) /* 28 */
+#endif
+#ifndef XDestroyWindow
+#define XDestroyWindow \
+       (tkIntXlibStubsPtr->xDestroyWindow) /* 29 */
+#endif
+#ifndef XDrawArc
+#define XDrawArc \
+       (tkIntXlibStubsPtr->xDrawArc) /* 30 */
+#endif
+#ifndef XDrawLines
+#define XDrawLines \
+       (tkIntXlibStubsPtr->xDrawLines) /* 31 */
+#endif
+#ifndef XDrawRectangle
+#define XDrawRectangle \
+       (tkIntXlibStubsPtr->xDrawRectangle) /* 32 */
+#endif
+#ifndef XFillArc
+#define XFillArc \
+       (tkIntXlibStubsPtr->xFillArc) /* 33 */
+#endif
+#ifndef XFillPolygon
+#define XFillPolygon \
+       (tkIntXlibStubsPtr->xFillPolygon) /* 34 */
+#endif
+#ifndef XFillRectangles
+#define XFillRectangles \
+       (tkIntXlibStubsPtr->xFillRectangles) /* 35 */
+#endif
+#ifndef XForceScreenSaver
+#define XForceScreenSaver \
+       (tkIntXlibStubsPtr->xForceScreenSaver) /* 36 */
+#endif
+#ifndef XFreeColormap
+#define XFreeColormap \
+       (tkIntXlibStubsPtr->xFreeColormap) /* 37 */
+#endif
+#ifndef XFreeColors
+#define XFreeColors \
+       (tkIntXlibStubsPtr->xFreeColors) /* 38 */
+#endif
+#ifndef XFreeCursor
+#define XFreeCursor \
+       (tkIntXlibStubsPtr->xFreeCursor) /* 39 */
+#endif
+#ifndef XFreeModifiermap
+#define XFreeModifiermap \
+       (tkIntXlibStubsPtr->xFreeModifiermap) /* 40 */
+#endif
+#ifndef XGetGeometry
+#define XGetGeometry \
+       (tkIntXlibStubsPtr->xGetGeometry) /* 41 */
+#endif
+#ifndef XGetInputFocus
+#define XGetInputFocus \
+       (tkIntXlibStubsPtr->xGetInputFocus) /* 42 */
+#endif
+#ifndef XGetWindowProperty
+#define XGetWindowProperty \
+       (tkIntXlibStubsPtr->xGetWindowProperty) /* 43 */
+#endif
+#ifndef XGetWindowAttributes
+#define XGetWindowAttributes \
+       (tkIntXlibStubsPtr->xGetWindowAttributes) /* 44 */
+#endif
+#ifndef XGrabKeyboard
+#define XGrabKeyboard \
+       (tkIntXlibStubsPtr->xGrabKeyboard) /* 45 */
+#endif
+#ifndef XGrabPointer
+#define XGrabPointer \
+       (tkIntXlibStubsPtr->xGrabPointer) /* 46 */
+#endif
+#ifndef XKeysymToKeycode
+#define XKeysymToKeycode \
+       (tkIntXlibStubsPtr->xKeysymToKeycode) /* 47 */
+#endif
+#ifndef XLookupColor
+#define XLookupColor \
+       (tkIntXlibStubsPtr->xLookupColor) /* 48 */
+#endif
+#ifndef XMapWindow
+#define XMapWindow \
+       (tkIntXlibStubsPtr->xMapWindow) /* 49 */
+#endif
+#ifndef XMoveResizeWindow
+#define XMoveResizeWindow \
+       (tkIntXlibStubsPtr->xMoveResizeWindow) /* 50 */
+#endif
+#ifndef XMoveWindow
+#define XMoveWindow \
+       (tkIntXlibStubsPtr->xMoveWindow) /* 51 */
+#endif
+#ifndef XNextEvent
+#define XNextEvent \
+       (tkIntXlibStubsPtr->xNextEvent) /* 52 */
+#endif
+#ifndef XPutBackEvent
+#define XPutBackEvent \
+       (tkIntXlibStubsPtr->xPutBackEvent) /* 53 */
+#endif
+#ifndef XQueryColors
+#define XQueryColors \
+       (tkIntXlibStubsPtr->xQueryColors) /* 54 */
+#endif
+#ifndef XQueryPointer
+#define XQueryPointer \
+       (tkIntXlibStubsPtr->xQueryPointer) /* 55 */
+#endif
+#ifndef XQueryTree
+#define XQueryTree \
+       (tkIntXlibStubsPtr->xQueryTree) /* 56 */
+#endif
+#ifndef XRaiseWindow
+#define XRaiseWindow \
+       (tkIntXlibStubsPtr->xRaiseWindow) /* 57 */
+#endif
+#ifndef XRefreshKeyboardMapping
+#define XRefreshKeyboardMapping \
+       (tkIntXlibStubsPtr->xRefreshKeyboardMapping) /* 58 */
+#endif
+#ifndef XResizeWindow
+#define XResizeWindow \
+       (tkIntXlibStubsPtr->xResizeWindow) /* 59 */
+#endif
+#ifndef XSelectInput
+#define XSelectInput \
+       (tkIntXlibStubsPtr->xSelectInput) /* 60 */
+#endif
+#ifndef XSendEvent
+#define XSendEvent \
+       (tkIntXlibStubsPtr->xSendEvent) /* 61 */
+#endif
+#ifndef XSetCommand
+#define XSetCommand \
+       (tkIntXlibStubsPtr->xSetCommand) /* 62 */
+#endif
+#ifndef XSetIconName
+#define XSetIconName \
+       (tkIntXlibStubsPtr->xSetIconName) /* 63 */
+#endif
+#ifndef XSetInputFocus
+#define XSetInputFocus \
+       (tkIntXlibStubsPtr->xSetInputFocus) /* 64 */
+#endif
+#ifndef XSetSelectionOwner
+#define XSetSelectionOwner \
+       (tkIntXlibStubsPtr->xSetSelectionOwner) /* 65 */
+#endif
+#ifndef XSetWindowBackground
+#define XSetWindowBackground \
+       (tkIntXlibStubsPtr->xSetWindowBackground) /* 66 */
+#endif
+#ifndef XSetWindowBackgroundPixmap
+#define XSetWindowBackgroundPixmap \
+       (tkIntXlibStubsPtr->xSetWindowBackgroundPixmap) /* 67 */
+#endif
+#ifndef XSetWindowBorder
+#define XSetWindowBorder \
+       (tkIntXlibStubsPtr->xSetWindowBorder) /* 68 */
+#endif
+#ifndef XSetWindowBorderPixmap
+#define XSetWindowBorderPixmap \
+       (tkIntXlibStubsPtr->xSetWindowBorderPixmap) /* 69 */
+#endif
+#ifndef XSetWindowBorderWidth
+#define XSetWindowBorderWidth \
+       (tkIntXlibStubsPtr->xSetWindowBorderWidth) /* 70 */
+#endif
+#ifndef XSetWindowColormap
+#define XSetWindowColormap \
+       (tkIntXlibStubsPtr->xSetWindowColormap) /* 71 */
+#endif
+#ifndef XTranslateCoordinates
+#define XTranslateCoordinates \
+       (tkIntXlibStubsPtr->xTranslateCoordinates) /* 72 */
+#endif
+#ifndef XUngrabKeyboard
+#define XUngrabKeyboard \
+       (tkIntXlibStubsPtr->xUngrabKeyboard) /* 73 */
+#endif
+#ifndef XUngrabPointer
+#define XUngrabPointer \
+       (tkIntXlibStubsPtr->xUngrabPointer) /* 74 */
+#endif
+#ifndef XUnmapWindow
+#define XUnmapWindow \
+       (tkIntXlibStubsPtr->xUnmapWindow) /* 75 */
+#endif
+#ifndef XWindowEvent
+#define XWindowEvent \
+       (tkIntXlibStubsPtr->xWindowEvent) /* 76 */
+#endif
+#ifndef XDestroyIC
+#define XDestroyIC \
+       (tkIntXlibStubsPtr->xDestroyIC) /* 77 */
+#endif
+#ifndef XFilterEvent
+#define XFilterEvent \
+       (tkIntXlibStubsPtr->xFilterEvent) /* 78 */
+#endif
+#ifndef XmbLookupString
+#define XmbLookupString \
+       (tkIntXlibStubsPtr->xmbLookupString) /* 79 */
+#endif
+#ifndef TkPutImage
+#define TkPutImage \
+       (tkIntXlibStubsPtr->tkPutImage) /* 80 */
+#endif
+/* Slot 81 is reserved */
+#ifndef XParseColor
+#define XParseColor \
+       (tkIntXlibStubsPtr->xParseColor) /* 82 */
+#endif
+#ifndef XCreateGC
+#define XCreateGC \
+       (tkIntXlibStubsPtr->xCreateGC) /* 83 */
+#endif
+#ifndef XFreeGC
+#define XFreeGC \
+       (tkIntXlibStubsPtr->xFreeGC) /* 84 */
+#endif
+#ifndef XInternAtom
+#define XInternAtom \
+       (tkIntXlibStubsPtr->xInternAtom) /* 85 */
+#endif
+#ifndef XSetBackground
+#define XSetBackground \
+       (tkIntXlibStubsPtr->xSetBackground) /* 86 */
+#endif
+#ifndef XSetForeground
+#define XSetForeground \
+       (tkIntXlibStubsPtr->xSetForeground) /* 87 */
+#endif
+#ifndef XSetClipMask
+#define XSetClipMask \
+       (tkIntXlibStubsPtr->xSetClipMask) /* 88 */
+#endif
+#ifndef XSetClipOrigin
+#define XSetClipOrigin \
+       (tkIntXlibStubsPtr->xSetClipOrigin) /* 89 */
+#endif
+#ifndef XSetTSOrigin
+#define XSetTSOrigin \
+       (tkIntXlibStubsPtr->xSetTSOrigin) /* 90 */
+#endif
+#ifndef XChangeGC
+#define XChangeGC \
+       (tkIntXlibStubsPtr->xChangeGC) /* 91 */
+#endif
+#ifndef XSetFont
+#define XSetFont \
+       (tkIntXlibStubsPtr->xSetFont) /* 92 */
+#endif
+#ifndef XSetArcMode
+#define XSetArcMode \
+       (tkIntXlibStubsPtr->xSetArcMode) /* 93 */
+#endif
+#ifndef XSetStipple
+#define XSetStipple \
+       (tkIntXlibStubsPtr->xSetStipple) /* 94 */
+#endif
+#ifndef XSetFillRule
+#define XSetFillRule \
+       (tkIntXlibStubsPtr->xSetFillRule) /* 95 */
+#endif
+#ifndef XSetFillStyle
+#define XSetFillStyle \
+       (tkIntXlibStubsPtr->xSetFillStyle) /* 96 */
+#endif
+#ifndef XSetFunction
+#define XSetFunction \
+       (tkIntXlibStubsPtr->xSetFunction) /* 97 */
+#endif
+#ifndef XSetLineAttributes
+#define XSetLineAttributes \
+       (tkIntXlibStubsPtr->xSetLineAttributes) /* 98 */
+#endif
+#ifndef _XInitImageFuncPtrs
+#define _XInitImageFuncPtrs \
+       (tkIntXlibStubsPtr->_XInitImageFuncPtrs) /* 99 */
+#endif
+#ifndef XCreateIC
+#define XCreateIC \
+       (tkIntXlibStubsPtr->xCreateIC) /* 100 */
+#endif
+#ifndef XGetVisualInfo
+#define XGetVisualInfo \
+       (tkIntXlibStubsPtr->xGetVisualInfo) /* 101 */
+#endif
+#ifndef XSetWMClientMachine
+#define XSetWMClientMachine \
+       (tkIntXlibStubsPtr->xSetWMClientMachine) /* 102 */
+#endif
+#ifndef XStringListToTextProperty
+#define XStringListToTextProperty \
+       (tkIntXlibStubsPtr->xStringListToTextProperty) /* 103 */
+#endif
+#ifndef XDrawLine
+#define XDrawLine \
+       (tkIntXlibStubsPtr->xDrawLine) /* 104 */
+#endif
+#ifndef XWarpPointer
+#define XWarpPointer \
+       (tkIntXlibStubsPtr->xWarpPointer) /* 105 */
+#endif
+#ifndef XFillRectangle
+#define XFillRectangle \
+       (tkIntXlibStubsPtr->xFillRectangle) /* 106 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef XSetDashes
+#define XSetDashes \
+       (tkIntXlibStubsPtr->xSetDashes) /* 0 */
+#endif
+#ifndef XGetModifierMapping
+#define XGetModifierMapping \
+       (tkIntXlibStubsPtr->xGetModifierMapping) /* 1 */
+#endif
+#ifndef XCreateImage
+#define XCreateImage \
+       (tkIntXlibStubsPtr->xCreateImage) /* 2 */
+#endif
+#ifndef XGetImage
+#define XGetImage \
+       (tkIntXlibStubsPtr->xGetImage) /* 3 */
+#endif
+#ifndef XGetAtomName
+#define XGetAtomName \
+       (tkIntXlibStubsPtr->xGetAtomName) /* 4 */
+#endif
+#ifndef XKeysymToString
+#define XKeysymToString \
+       (tkIntXlibStubsPtr->xKeysymToString) /* 5 */
+#endif
+#ifndef XCreateColormap
+#define XCreateColormap \
+       (tkIntXlibStubsPtr->xCreateColormap) /* 6 */
+#endif
+#ifndef XGContextFromGC
+#define XGContextFromGC \
+       (tkIntXlibStubsPtr->xGContextFromGC) /* 7 */
+#endif
+#ifndef XKeycodeToKeysym
+#define XKeycodeToKeysym \
+       (tkIntXlibStubsPtr->xKeycodeToKeysym) /* 8 */
+#endif
+#ifndef XStringToKeysym
+#define XStringToKeysym \
+       (tkIntXlibStubsPtr->xStringToKeysym) /* 9 */
+#endif
+#ifndef XRootWindow
+#define XRootWindow \
+       (tkIntXlibStubsPtr->xRootWindow) /* 10 */
+#endif
+#ifndef XSetErrorHandler
+#define XSetErrorHandler \
+       (tkIntXlibStubsPtr->xSetErrorHandler) /* 11 */
+#endif
+#ifndef XAllocColor
+#define XAllocColor \
+       (tkIntXlibStubsPtr->xAllocColor) /* 12 */
+#endif
+#ifndef XBell
+#define XBell \
+       (tkIntXlibStubsPtr->xBell) /* 13 */
+#endif
+#ifndef XChangeProperty
+#define XChangeProperty \
+       (tkIntXlibStubsPtr->xChangeProperty) /* 14 */
+#endif
+#ifndef XChangeWindowAttributes
+#define XChangeWindowAttributes \
+       (tkIntXlibStubsPtr->xChangeWindowAttributes) /* 15 */
+#endif
+#ifndef XConfigureWindow
+#define XConfigureWindow \
+       (tkIntXlibStubsPtr->xConfigureWindow) /* 16 */
+#endif
+#ifndef XCopyArea
+#define XCopyArea \
+       (tkIntXlibStubsPtr->xCopyArea) /* 17 */
+#endif
+#ifndef XCopyPlane
+#define XCopyPlane \
+       (tkIntXlibStubsPtr->xCopyPlane) /* 18 */
+#endif
+#ifndef XCreateBitmapFromData
+#define XCreateBitmapFromData \
+       (tkIntXlibStubsPtr->xCreateBitmapFromData) /* 19 */
+#endif
+#ifndef XDefineCursor
+#define XDefineCursor \
+       (tkIntXlibStubsPtr->xDefineCursor) /* 20 */
+#endif
+#ifndef XDestroyWindow
+#define XDestroyWindow \
+       (tkIntXlibStubsPtr->xDestroyWindow) /* 21 */
+#endif
+#ifndef XDrawArc
+#define XDrawArc \
+       (tkIntXlibStubsPtr->xDrawArc) /* 22 */
+#endif
+#ifndef XDrawLines
+#define XDrawLines \
+       (tkIntXlibStubsPtr->xDrawLines) /* 23 */
+#endif
+#ifndef XDrawRectangle
+#define XDrawRectangle \
+       (tkIntXlibStubsPtr->xDrawRectangle) /* 24 */
+#endif
+#ifndef XFillArc
+#define XFillArc \
+       (tkIntXlibStubsPtr->xFillArc) /* 25 */
+#endif
+#ifndef XFillPolygon
+#define XFillPolygon \
+       (tkIntXlibStubsPtr->xFillPolygon) /* 26 */
+#endif
+#ifndef XFillRectangles
+#define XFillRectangles \
+       (tkIntXlibStubsPtr->xFillRectangles) /* 27 */
+#endif
+#ifndef XFreeColormap
+#define XFreeColormap \
+       (tkIntXlibStubsPtr->xFreeColormap) /* 28 */
+#endif
+#ifndef XFreeColors
+#define XFreeColors \
+       (tkIntXlibStubsPtr->xFreeColors) /* 29 */
+#endif
+#ifndef XFreeModifiermap
+#define XFreeModifiermap \
+       (tkIntXlibStubsPtr->xFreeModifiermap) /* 30 */
+#endif
+#ifndef XGetGeometry
+#define XGetGeometry \
+       (tkIntXlibStubsPtr->xGetGeometry) /* 31 */
+#endif
+#ifndef XGetWindowProperty
+#define XGetWindowProperty \
+       (tkIntXlibStubsPtr->xGetWindowProperty) /* 32 */
+#endif
+#ifndef XGrabKeyboard
+#define XGrabKeyboard \
+       (tkIntXlibStubsPtr->xGrabKeyboard) /* 33 */
+#endif
+#ifndef XGrabPointer
+#define XGrabPointer \
+       (tkIntXlibStubsPtr->xGrabPointer) /* 34 */
+#endif
+#ifndef XKeysymToKeycode
+#define XKeysymToKeycode \
+       (tkIntXlibStubsPtr->xKeysymToKeycode) /* 35 */
+#endif
+#ifndef XMapWindow
+#define XMapWindow \
+       (tkIntXlibStubsPtr->xMapWindow) /* 36 */
+#endif
+#ifndef XMoveResizeWindow
+#define XMoveResizeWindow \
+       (tkIntXlibStubsPtr->xMoveResizeWindow) /* 37 */
+#endif
+#ifndef XMoveWindow
+#define XMoveWindow \
+       (tkIntXlibStubsPtr->xMoveWindow) /* 38 */
+#endif
+#ifndef XQueryPointer
+#define XQueryPointer \
+       (tkIntXlibStubsPtr->xQueryPointer) /* 39 */
+#endif
+#ifndef XRaiseWindow
+#define XRaiseWindow \
+       (tkIntXlibStubsPtr->xRaiseWindow) /* 40 */
+#endif
+#ifndef XRefreshKeyboardMapping
+#define XRefreshKeyboardMapping \
+       (tkIntXlibStubsPtr->xRefreshKeyboardMapping) /* 41 */
+#endif
+#ifndef XResizeWindow
+#define XResizeWindow \
+       (tkIntXlibStubsPtr->xResizeWindow) /* 42 */
+#endif
+#ifndef XSelectInput
+#define XSelectInput \
+       (tkIntXlibStubsPtr->xSelectInput) /* 43 */
+#endif
+#ifndef XSendEvent
+#define XSendEvent \
+       (tkIntXlibStubsPtr->xSendEvent) /* 44 */
+#endif
+#ifndef XSetIconName
+#define XSetIconName \
+       (tkIntXlibStubsPtr->xSetIconName) /* 45 */
+#endif
+#ifndef XSetInputFocus
+#define XSetInputFocus \
+       (tkIntXlibStubsPtr->xSetInputFocus) /* 46 */
+#endif
+#ifndef XSetSelectionOwner
+#define XSetSelectionOwner \
+       (tkIntXlibStubsPtr->xSetSelectionOwner) /* 47 */
+#endif
+#ifndef XSetWindowBackground
+#define XSetWindowBackground \
+       (tkIntXlibStubsPtr->xSetWindowBackground) /* 48 */
+#endif
+#ifndef XSetWindowBackgroundPixmap
+#define XSetWindowBackgroundPixmap \
+       (tkIntXlibStubsPtr->xSetWindowBackgroundPixmap) /* 49 */
+#endif
+#ifndef XSetWindowBorder
+#define XSetWindowBorder \
+       (tkIntXlibStubsPtr->xSetWindowBorder) /* 50 */
+#endif
+#ifndef XSetWindowBorderPixmap
+#define XSetWindowBorderPixmap \
+       (tkIntXlibStubsPtr->xSetWindowBorderPixmap) /* 51 */
+#endif
+#ifndef XSetWindowBorderWidth
+#define XSetWindowBorderWidth \
+       (tkIntXlibStubsPtr->xSetWindowBorderWidth) /* 52 */
+#endif
+#ifndef XSetWindowColormap
+#define XSetWindowColormap \
+       (tkIntXlibStubsPtr->xSetWindowColormap) /* 53 */
+#endif
+#ifndef XUngrabKeyboard
+#define XUngrabKeyboard \
+       (tkIntXlibStubsPtr->xUngrabKeyboard) /* 54 */
+#endif
+#ifndef XUngrabPointer
+#define XUngrabPointer \
+       (tkIntXlibStubsPtr->xUngrabPointer) /* 55 */
+#endif
+#ifndef XUnmapWindow
+#define XUnmapWindow \
+       (tkIntXlibStubsPtr->xUnmapWindow) /* 56 */
+#endif
+#ifndef TkPutImage
+#define TkPutImage \
+       (tkIntXlibStubsPtr->tkPutImage) /* 57 */
+#endif
+#ifndef XParseColor
+#define XParseColor \
+       (tkIntXlibStubsPtr->xParseColor) /* 58 */
+#endif
+#ifndef XCreateGC
+#define XCreateGC \
+       (tkIntXlibStubsPtr->xCreateGC) /* 59 */
+#endif
+#ifndef XFreeGC
+#define XFreeGC \
+       (tkIntXlibStubsPtr->xFreeGC) /* 60 */
+#endif
+#ifndef XInternAtom
+#define XInternAtom \
+       (tkIntXlibStubsPtr->xInternAtom) /* 61 */
+#endif
+#ifndef XSetBackground
+#define XSetBackground \
+       (tkIntXlibStubsPtr->xSetBackground) /* 62 */
+#endif
+#ifndef XSetForeground
+#define XSetForeground \
+       (tkIntXlibStubsPtr->xSetForeground) /* 63 */
+#endif
+#ifndef XSetClipMask
+#define XSetClipMask \
+       (tkIntXlibStubsPtr->xSetClipMask) /* 64 */
+#endif
+#ifndef XSetClipOrigin
+#define XSetClipOrigin \
+       (tkIntXlibStubsPtr->xSetClipOrigin) /* 65 */
+#endif
+#ifndef XSetTSOrigin
+#define XSetTSOrigin \
+       (tkIntXlibStubsPtr->xSetTSOrigin) /* 66 */
+#endif
+#ifndef XChangeGC
+#define XChangeGC \
+       (tkIntXlibStubsPtr->xChangeGC) /* 67 */
+#endif
+#ifndef XSetFont
+#define XSetFont \
+       (tkIntXlibStubsPtr->xSetFont) /* 68 */
+#endif
+#ifndef XSetArcMode
+#define XSetArcMode \
+       (tkIntXlibStubsPtr->xSetArcMode) /* 69 */
+#endif
+#ifndef XSetStipple
+#define XSetStipple \
+       (tkIntXlibStubsPtr->xSetStipple) /* 70 */
+#endif
+#ifndef XSetFillRule
+#define XSetFillRule \
+       (tkIntXlibStubsPtr->xSetFillRule) /* 71 */
+#endif
+#ifndef XSetFillStyle
+#define XSetFillStyle \
+       (tkIntXlibStubsPtr->xSetFillStyle) /* 72 */
+#endif
+#ifndef XSetFunction
+#define XSetFunction \
+       (tkIntXlibStubsPtr->xSetFunction) /* 73 */
+#endif
+#ifndef XSetLineAttributes
+#define XSetLineAttributes \
+       (tkIntXlibStubsPtr->xSetLineAttributes) /* 74 */
+#endif
+#ifndef _XInitImageFuncPtrs
+#define _XInitImageFuncPtrs \
+       (tkIntXlibStubsPtr->_XInitImageFuncPtrs) /* 75 */
+#endif
+#ifndef XCreateIC
+#define XCreateIC \
+       (tkIntXlibStubsPtr->xCreateIC) /* 76 */
+#endif
+#ifndef XGetVisualInfo
+#define XGetVisualInfo \
+       (tkIntXlibStubsPtr->xGetVisualInfo) /* 77 */
+#endif
+#ifndef XSetWMClientMachine
+#define XSetWMClientMachine \
+       (tkIntXlibStubsPtr->xSetWMClientMachine) /* 78 */
+#endif
+#ifndef XStringListToTextProperty
+#define XStringListToTextProperty \
+       (tkIntXlibStubsPtr->xStringListToTextProperty) /* 79 */
+#endif
+#ifndef XDrawSegments
+#define XDrawSegments \
+       (tkIntXlibStubsPtr->xDrawSegments) /* 80 */
+#endif
+#ifndef XForceScreenSaver
+#define XForceScreenSaver \
+       (tkIntXlibStubsPtr->xForceScreenSaver) /* 81 */
+#endif
+#ifndef XDrawLine
+#define XDrawLine \
+       (tkIntXlibStubsPtr->xDrawLine) /* 82 */
+#endif
+#ifndef XFillRectangle
+#define XFillRectangle \
+       (tkIntXlibStubsPtr->xFillRectangle) /* 83 */
+#endif
+#ifndef XClearWindow
+#define XClearWindow \
+       (tkIntXlibStubsPtr->xClearWindow) /* 84 */
+#endif
+#ifndef XDrawPoint
+#define XDrawPoint \
+       (tkIntXlibStubsPtr->xDrawPoint) /* 85 */
+#endif
+#ifndef XDrawPoints
+#define XDrawPoints \
+       (tkIntXlibStubsPtr->xDrawPoints) /* 86 */
+#endif
+#ifndef XWarpPointer
+#define XWarpPointer \
+       (tkIntXlibStubsPtr->xWarpPointer) /* 87 */
+#endif
+#ifndef XQueryColor
+#define XQueryColor \
+       (tkIntXlibStubsPtr->xQueryColor) /* 88 */
+#endif
+#ifndef XQueryColors
+#define XQueryColors \
+       (tkIntXlibStubsPtr->xQueryColors) /* 89 */
+#endif
+#endif /* MAC_TCL */
+
+#endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#endif /* _TKINTXLIBDECLS */
diff --git a/tk/generic/tkObj.c b/tk/generic/tkObj.c
new file mode 100644 (file)
index 0000000..071cb38
--- /dev/null
@@ -0,0 +1,660 @@
+/* 
+ * tkObj.c --
+ *
+ *     This file contains procedures that implement the common Tk object
+ *     types
+ *
+ * Copyright (c) 1997 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tkInt.h"
+
+/*
+ * The following structure is the internal representation for pixel objects.
+ */
+typedef struct PixelRep {
+    double value;
+    int units;
+    Tk_Window tkwin;
+    int returnValue;
+} PixelRep;
+
+#define SIMPLE_PIXELREP(objPtr)                                \
+    ((objPtr)->internalRep.twoPtrValue.ptr2 == 0)
+
+#define SET_SIMPLEPIXEL(objPtr, intval)                        \
+    (objPtr)->internalRep.twoPtrValue.ptr1 = (VOID *) (intval);        \
+    (objPtr)->internalRep.twoPtrValue.ptr2 = 0
+
+#define GET_SIMPLEPIXEL(objPtr)                                \
+    ((int) (objPtr)->internalRep.twoPtrValue.ptr1)
+
+#define SET_COMPLEXPIXEL(objPtr, repPtr)               \
+    (objPtr)->internalRep.twoPtrValue.ptr1 = 0;                \
+    (objPtr)->internalRep.twoPtrValue.ptr2 = (VOID *) repPtr
+
+#define GET_COMPLEXPIXEL(objPtr)                       \
+    ((PixelRep *) (objPtr)->internalRep.twoPtrValue.ptr2)
+
+
+/*
+ * The following structure is the internal representation for mm objects.
+ */
+typedef struct MMRep {
+    double value;
+    int units;
+    Tk_Window tkwin;
+    double returnValue;
+} MMRep;
+
+/*
+ * Prototypes for procedures defined later in this file:
+ */
+
+static void            DupMMInternalRep _ANSI_ARGS_((Tcl_Obj *srcPtr,
+                           Tcl_Obj *copyPtr));
+static void            DupPixelInternalRep _ANSI_ARGS_((Tcl_Obj *srcPtr,
+                           Tcl_Obj *copyPtr));
+static void            FreeMMInternalRep _ANSI_ARGS_((Tcl_Obj *objPtr));
+static void            FreePixelInternalRep _ANSI_ARGS_((Tcl_Obj *objPtr));
+static int             SetMMFromAny _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tcl_Obj *objPtr));
+static int             SetPixelFromAny _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tcl_Obj *objPtr));
+static int             SetWindowFromAny _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tcl_Obj *objPtr));
+                       
+/*
+ * The following structure defines the implementation of the "pixel"
+ * Tcl object, used for measuring distances.  The pixel object remembers
+ * its initial display-independant settings.
+ */
+
+static Tcl_ObjType pixelObjType = {
+    "pixel",                   /* name */
+    FreePixelInternalRep,      /* freeIntRepProc */
+    DupPixelInternalRep,       /* dupIntRepProc */
+    NULL,                      /* updateStringProc */
+    SetPixelFromAny            /* setFromAnyProc */
+};
+
+/*
+ * The following structure defines the implementation of the "pixel"
+ * Tcl object, used for measuring distances.  The pixel object remembers
+ * its initial display-independant settings.
+ */
+
+static Tcl_ObjType mmObjType = {
+    "mm",                      /* name */
+    FreeMMInternalRep,         /* freeIntRepProc */
+    DupMMInternalRep,          /* dupIntRepProc */
+    NULL,                      /* updateStringProc */
+    SetMMFromAny               /* setFromAnyProc */
+};
+
+/*
+ * The following structure defines the implementation of the "window"
+ * Tcl object.
+ */
+
+static Tcl_ObjType windowObjType = {
+    "window",                          /* name */
+    (Tcl_FreeInternalRepProc *) NULL,   /* freeIntRepProc */
+    (Tcl_DupInternalRepProc *) NULL,   /* dupIntRepProc */
+    NULL,                              /* updateStringProc */
+    SetWindowFromAny                   /* setFromAnyProc */
+};
+
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_GetPixelsFromObj --
+ *
+ *     Attempt to return a pixel value from the Tcl object "objPtr". If the
+ *     object is not already a pixel value, an attempt will be made to convert
+ *     it to one.
+ *
+ * Results:
+ *     The return value is a standard Tcl object result. If an error occurs
+ *     during conversion, an error message is left in the interpreter's
+ *     result unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If the object is not already a pixel, the conversion will free
+ *     any old internal representation. 
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tk_GetPixelsFromObj(interp, tkwin, objPtr, intPtr)
+    Tcl_Interp *interp;        /* Used for error reporting if not NULL. */
+    Tk_Window tkwin;
+    Tcl_Obj *objPtr;           /* The object from which to get pixels. */
+    int *intPtr;               /* Place to store resulting pixels. */
+{
+    int result;
+    double d;
+    PixelRep *pixelPtr;
+    static double bias[] = {
+       1.0,    10.0,   25.4,   25.4 / 72.0
+    };
+
+    if (objPtr->typePtr != &pixelObjType) {
+       result = SetPixelFromAny(interp, objPtr);
+       if (result != TCL_OK) {
+           return result;
+       }
+    }
+
+    if (SIMPLE_PIXELREP(objPtr)) {
+       *intPtr = GET_SIMPLEPIXEL(objPtr);
+    } else {
+       pixelPtr = GET_COMPLEXPIXEL(objPtr);
+       if (pixelPtr->tkwin != tkwin) {
+           d = pixelPtr->value;
+           if (pixelPtr->units >= 0) {
+               d *= bias[pixelPtr->units] * WidthOfScreen(Tk_Screen(tkwin));
+               d /= WidthMMOfScreen(Tk_Screen(tkwin));
+           }
+           if (d < 0) {
+               pixelPtr->returnValue = (int) (d - 0.5);
+           } else {
+               pixelPtr->returnValue = (int) (d + 0.5);
+           }
+           pixelPtr->tkwin = tkwin;
+       }
+        *intPtr = pixelPtr->returnValue;
+    }
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * FreePixelInternalRep --
+ *
+ *     Deallocate the storage associated with a pixel object's internal
+ *     representation.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Frees objPtr's internal representation and sets objPtr's
+ *     internalRep to NULL.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+FreePixelInternalRep(objPtr)
+    Tcl_Obj *objPtr;           /* Pixel object with internal rep to free. */
+{
+    PixelRep *pixelPtr;
+    
+    if (!SIMPLE_PIXELREP(objPtr)) {
+       pixelPtr = GET_COMPLEXPIXEL(objPtr);
+       ckfree((char *) pixelPtr);
+    }
+    SET_SIMPLEPIXEL(objPtr, 0);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * DupPixelInternalRep --
+ *
+ *     Initialize the internal representation of a pixel Tcl_Obj to a
+ *     copy of the internal representation of an existing pixel object. 
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     copyPtr's internal rep is set to the pixel corresponding to
+ *     srcPtr's internal rep.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+DupPixelInternalRep(srcPtr, copyPtr)
+    register Tcl_Obj *srcPtr;  /* Object with internal rep to copy. */
+    register Tcl_Obj *copyPtr; /* Object with internal rep to set. */
+{
+    PixelRep *oldPtr, *newPtr;
+    
+    copyPtr->typePtr = srcPtr->typePtr;
+
+    if (SIMPLE_PIXELREP(srcPtr)) {
+       SET_SIMPLEPIXEL(copyPtr, GET_SIMPLEPIXEL(srcPtr));
+    } else {
+       oldPtr = GET_COMPLEXPIXEL(srcPtr);
+       newPtr = (PixelRep *) ckalloc(sizeof(PixelRep));
+       newPtr->value = oldPtr->value;
+       newPtr->units = oldPtr->units;
+       newPtr->tkwin = oldPtr->tkwin;
+       newPtr->returnValue = oldPtr->returnValue;
+       SET_COMPLEXPIXEL(copyPtr, newPtr);
+    }
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * SetPixelFromAny --
+ *
+ *     Attempt to generate a pixel internal form for the Tcl object
+ *     "objPtr".
+ *
+ * Results:
+ *     The return value is a standard Tcl result. If an error occurs during
+ *     conversion, an error message is left in the interpreter's result
+ *     unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If no error occurs, a pixel representation of the object is
+ *     stored internally and the type of "objPtr" is set to pixel.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+SetPixelFromAny(interp, objPtr)
+    Tcl_Interp *interp;                /* Used for error reporting if not NULL. */
+    Tcl_Obj *objPtr;           /* The object to convert. */
+{
+    Tcl_ObjType *typePtr;
+    char *string, *rest;
+    double d;
+    int i, units;
+    PixelRep *pixelPtr;
+
+    string = Tcl_GetStringFromObj(objPtr, NULL);
+
+    d = strtod(string, &rest);
+    if (rest == string) {
+       /*
+        * Must copy string before resetting the result in case a caller
+        * is trying to convert the interpreter's result to pixels.
+        */
+
+       char buf[100];
+
+       error:
+       sprintf(buf, "bad screen distance \"%.50s\"", string);
+       Tcl_ResetResult(interp);
+       Tcl_AppendResult(interp, buf, NULL);
+       return TCL_ERROR;
+    }
+    while ((*rest != '\0') && isspace(UCHAR(*rest))) {
+       rest++;
+    }
+    switch (*rest) {
+       case '\0':
+           units = -1;
+           break;
+
+       case 'm':
+           units = 0;
+           break;
+
+       case 'c':
+           units = 1;
+           break;
+
+       case 'i':
+           units = 2;
+           break;
+
+       case 'p':
+           units = 3;
+           break;
+
+       default:
+           goto error;
+    }
+
+    /*
+     * Free the old internalRep before setting the new one. 
+     */
+
+    typePtr = objPtr->typePtr;
+    if ((typePtr != NULL) && (typePtr->freeIntRepProc != NULL)) {
+       (*typePtr->freeIntRepProc)(objPtr);
+    }
+
+    objPtr->typePtr = &pixelObjType;
+
+    i = (int) d;
+    if ((units < 0) && (i == d)) {
+       SET_SIMPLEPIXEL(objPtr, i);
+    } else {
+       pixelPtr = (PixelRep *) ckalloc(sizeof(PixelRep));
+       pixelPtr->value = d;
+       pixelPtr->units = units;
+       pixelPtr->tkwin = NULL;
+       pixelPtr->returnValue = i;
+       SET_COMPLEXPIXEL(objPtr, pixelPtr);
+    }
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_GetMMFromObj --
+ *
+ *     Attempt to return an mm value from the Tcl object "objPtr". If the
+ *     object is not already an mm value, an attempt will be made to convert
+ *     it to one.
+ *
+ * Results:
+ *     The return value is a standard Tcl object result. If an error occurs
+ *     during conversion, an error message is left in the interpreter's
+ *     result unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If the object is not already a pixel, the conversion will free
+ *     any old internal representation. 
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tk_GetMMFromObj(interp, tkwin, objPtr, doublePtr)
+    Tcl_Interp *interp;        /* Used for error reporting if not NULL. */
+    Tk_Window tkwin;
+    Tcl_Obj *objPtr;           /* The object from which to get mms. */
+    double *doublePtr;         /* Place to store resulting millimeters. */
+{
+    int result;
+    double d;
+    MMRep *mmPtr;
+    static double bias[] = {
+       10.0,   25.4,   1.0,    25.4 / 72.0
+    };
+
+    if (objPtr->typePtr != &mmObjType) {
+       result = SetMMFromAny(interp, objPtr);
+       if (result != TCL_OK) {
+           return result;
+       }
+    }
+
+    mmPtr = (MMRep *) objPtr->internalRep.otherValuePtr;
+    if (mmPtr->tkwin != tkwin) {
+       d = mmPtr->value;
+       if (mmPtr->units == -1) {
+           d /= WidthOfScreen(Tk_Screen(tkwin));
+           d *= WidthMMOfScreen(Tk_Screen(tkwin));
+       } else {
+           d *= bias[mmPtr->units];
+       }
+       mmPtr->tkwin = tkwin;
+       mmPtr->returnValue = d;
+    }
+    *doublePtr = mmPtr->returnValue;
+
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * FreeMMInternalRep --
+ *
+ *     Deallocate the storage associated with a mm object's internal
+ *     representation.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Frees objPtr's internal representation and sets objPtr's
+ *     internalRep to NULL.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+FreeMMInternalRep(objPtr)
+    Tcl_Obj *objPtr;           /* MM object with internal rep to free. */
+{
+    ckfree((char *) objPtr->internalRep.otherValuePtr);
+    objPtr->internalRep.otherValuePtr = NULL;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * DupMMInternalRep --
+ *
+ *     Initialize the internal representation of a pixel Tcl_Obj to a
+ *     copy of the internal representation of an existing pixel object. 
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     copyPtr's internal rep is set to the pixel corresponding to
+ *     srcPtr's internal rep.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+DupMMInternalRep(srcPtr, copyPtr)
+    register Tcl_Obj *srcPtr;  /* Object with internal rep to copy. */
+    register Tcl_Obj *copyPtr; /* Object with internal rep to set. */
+{
+    MMRep *oldPtr, *newPtr;
+    
+    copyPtr->typePtr = srcPtr->typePtr;
+    oldPtr = (MMRep *) srcPtr->internalRep.otherValuePtr;
+    newPtr = (MMRep *) ckalloc(sizeof(MMRep));
+    newPtr->value = oldPtr->value;
+    newPtr->units = oldPtr->units;
+    newPtr->tkwin = oldPtr->tkwin;
+    newPtr->returnValue = oldPtr->returnValue;
+    copyPtr->internalRep.otherValuePtr = (VOID *) newPtr;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * SetMMFromAny --
+ *
+ *     Attempt to generate a mm internal form for the Tcl object
+ *     "objPtr".
+ *
+ * Results:
+ *     The return value is a standard Tcl result. If an error occurs during
+ *     conversion, an error message is left in the interpreter's result
+ *     unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If no error occurs, a mm representation of the object is
+ *     stored internally and the type of "objPtr" is set to mm.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+SetMMFromAny(interp, objPtr)
+    Tcl_Interp *interp;                /* Used for error reporting if not NULL. */
+    Tcl_Obj *objPtr;           /* The object to convert. */
+{
+    Tcl_ObjType *typePtr;
+    char *string, *rest;
+    double d;
+    int units;
+    MMRep *mmPtr;
+
+    string = Tcl_GetStringFromObj(objPtr, NULL);
+
+    d = strtod(string, &rest);
+    if (rest == string) {
+       /*
+        * Must copy string before resetting the result in case a caller
+        * is trying to convert the interpreter's result to mms.
+        */
+
+       error:
+       Tcl_AppendResult(interp, "bad screen distance \"", string,
+               "\"", (char *) NULL);
+       return TCL_ERROR;
+    }
+    while ((*rest != '\0') && isspace(UCHAR(*rest))) {
+       rest++;
+    }
+    switch (*rest) {
+       case '\0':
+           units = -1;
+           break;
+
+       case 'c':
+           units = 0;
+           break;
+
+       case 'i':
+           units = 1;
+           break;
+
+       case 'm':
+           units = 2;
+           break;
+
+       case 'p':
+           units = 3;
+           break;
+
+       default:
+           goto error;
+    }
+
+    /*
+     * Free the old internalRep before setting the new one. 
+     */
+
+    typePtr = objPtr->typePtr;
+    if ((typePtr != NULL) && (typePtr->freeIntRepProc != NULL)) {
+       (*typePtr->freeIntRepProc)(objPtr);
+    }
+
+    objPtr->typePtr = &mmObjType;
+
+    mmPtr = (MMRep *) ckalloc(sizeof(MMRep));
+    mmPtr->value = d;
+    mmPtr->units = units;
+    mmPtr->tkwin = NULL;
+    mmPtr->returnValue = d;
+    objPtr->internalRep.otherValuePtr = (VOID *) mmPtr;
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkGetWindowFromObj --
+ *
+ *     Attempt to return a Tk_Window from the Tcl object "objPtr". If the
+ *     object is not already a Tk_Window, an attempt will be made to convert
+ *     it to one.
+ *
+ * Results:
+ *     The return value is a standard Tcl object result. If an error occurs
+ *     during conversion, an error message is left in the interpreter's
+ *     result unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If the object is not already a Tk_Window, the conversion will free
+ *     any old internal representation. 
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TkGetWindowFromObj(interp, tkwin, objPtr, windowPtr)
+    Tcl_Interp *interp;        /* Used for error reporting if not NULL. */
+    Tk_Window tkwin;           /* A token to get the main window from. */
+    register Tcl_Obj *objPtr;  /* The object from which to get boolean. */
+    Tk_Window *windowPtr;      /* Place to store resulting window. */
+{
+    register int result;
+    Tk_Window lastWindow;
+
+    result = SetWindowFromAny(interp, objPtr);
+    if (result != TCL_OK) {
+       return result;
+    }
+
+    lastWindow = (Tk_Window) objPtr->internalRep.twoPtrValue.ptr1;
+    if (tkwin != lastWindow) {
+       Tk_Window foundWindow = Tk_NameToWindow(interp,
+               Tcl_GetStringFromObj(objPtr, NULL), tkwin);
+
+       if (foundWindow == NULL) {
+           return TCL_ERROR;
+       }
+       objPtr->internalRep.twoPtrValue.ptr1 = (VOID *) tkwin;
+       objPtr->internalRep.twoPtrValue.ptr2 = (VOID *) foundWindow;
+    }
+    *windowPtr = (Tk_Window) objPtr->internalRep.twoPtrValue.ptr2;
+
+    return result;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * SetWindowFromAny --
+ *
+ *     Attempt to generate a Tk_Window internal form for the Tcl object
+ *     "objPtr".
+ *
+ * Results:
+ *     The return value is a standard Tcl result. If an error occurs during
+ *     conversion, an error message is left in the interpreter's result
+ *     unless "interp" is NULL.
+ *
+ * Side effects:
+ *     If no error occurs, a standard window value is stored as "objPtr"s
+ *     internal representation and the type of "objPtr" is set to Tk_Window.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+SetWindowFromAny(interp, objPtr)
+    Tcl_Interp *interp;                /* Used for error reporting if not NULL. */
+    register Tcl_Obj *objPtr;  /* The object to convert. */
+{
+    Tcl_ObjType *typePtr;
+
+    /*
+     * Free the old internalRep before setting the new one. 
+     */
+
+    Tcl_GetStringFromObj(objPtr, NULL);
+    typePtr = objPtr->typePtr;
+    if ((typePtr != NULL) && (typePtr->freeIntRepProc != NULL)) {
+       (*typePtr->freeIntRepProc)(objPtr);
+    }
+    objPtr->typePtr = &windowObjType;
+    objPtr->internalRep.twoPtrValue.ptr1 = NULL;
+    objPtr->internalRep.twoPtrValue.ptr2 = NULL;
+
+    return TCL_OK;
+}
+
diff --git a/tk/generic/tkOldConfig.c b/tk/generic/tkOldConfig.c
new file mode 100644 (file)
index 0000000..18b22e4
--- /dev/null
@@ -0,0 +1,1023 @@
+/* 
+ * tkOldConfig.c --
+ *
+ *     This file contains the Tk_ConfigureWidget procedure. THIS FILE
+ *     IS HERE FOR BACKWARD COMPATIBILITY; THE NEW CONFIGURATION
+ *     PACKAGE SHOULD BE USED FOR NEW PROJECTS.
+ *
+ * Copyright (c) 1990-1994 The Regents of the University of California.
+ * Copyright (c) 1994-1997 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tkPort.h"
+#include "tk.h"
+
+/*
+ * Values for "flags" field of Tk_ConfigSpec structures.  Be sure
+ * to coordinate these values with those defined in tk.h
+ * (TK_CONFIG_COLOR_ONLY, etc.).  There must not be overlap!
+ *
+ * INIT -              Non-zero means (char *) things have been
+ *                     converted to Tk_Uid's.
+ */
+
+#define INIT           0x20
+
+/*
+ * Forward declarations for procedures defined later in this file:
+ */
+
+static int             DoConfig _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tk_Window tkwin, Tk_ConfigSpec *specPtr,
+                           Tk_Uid value, int valueIsUid, char *widgRec));
+static Tk_ConfigSpec * FindConfigSpec _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tk_ConfigSpec *specs, char *argvName,
+                           int needFlags, int hateFlags));
+static char *          FormatConfigInfo _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tk_Window tkwin, Tk_ConfigSpec *specPtr,
+                           char *widgRec));
+static char *          FormatConfigValue _ANSI_ARGS_((Tcl_Interp *interp,
+                           Tk_Window tkwin, Tk_ConfigSpec *specPtr,
+                           char *widgRec, char *buffer,
+                           Tcl_FreeProc **freeProcPtr));
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * Tk_ConfigureWidget --
+ *
+ *     Process command-line options and database options to
+ *     fill in fields of a widget record with resources and
+ *     other parameters.
+ *
+ * Results:
+ *     A standard Tcl return value.  In case of an error,
+ *     the interp's result will hold an error message.
+ *
+ * Side effects:
+ *     The fields of widgRec get filled in with information
+ *     from argc/argv and the option database.  Old information
+ *     in widgRec's fields gets recycled.
+ *
+ *--------------------------------------------------------------
+ */
+
+int
+Tk_ConfigureWidget(interp, tkwin, specs, argc, argv, widgRec, flags)
+    Tcl_Interp *interp;                /* Interpreter for error reporting. */
+    Tk_Window tkwin;           /* Window containing widget (needed to
+                                * set up X resources). */
+    Tk_ConfigSpec *specs;      /* Describes legal options. */
+    int argc;                  /* Number of elements in argv. */
+    char **argv;               /* Command-line options. */
+    char *widgRec;             /* Record whose fields are to be
+                                * modified.  Values must be properly
+                                * initialized. */
+    int flags;                 /* Used to specify additional flags
+                                * that must be present in config specs
+                                * for them to be considered.  Also,
+                                * may have TK_CONFIG_ARGV_ONLY set. */
+{
+    register Tk_ConfigSpec *specPtr;
+    Tk_Uid value;              /* Value of option from database. */
+    int needFlags;             /* Specs must contain this set of flags
+                                * or else they are not considered. */
+    int hateFlags;             /* If a spec contains any bits here, it's
+                                * not considered. */
+
+    if (tkwin == NULL) {
+       /*
+        * Either we're not really in Tk, or the main window was destroyed and
+        * we're on our way out of the application
+        */
+       Tcl_AppendResult(interp, "NULL main window", (char *)NULL);
+       return TCL_ERROR;
+    }
+
+    needFlags = flags & ~(TK_CONFIG_USER_BIT - 1);
+    if (Tk_Depth(tkwin) <= 1) {
+       hateFlags = TK_CONFIG_COLOR_ONLY;
+    } else {
+       hateFlags = TK_CONFIG_MONO_ONLY;
+    }
+
+    /*
+     * Pass one:  scan through all the option specs, replacing strings
+     * with Tk_Uid structs (if this hasn't been done already) and
+     * clearing the TK_CONFIG_OPTION_SPECIFIED flags.
+     */
+
+    for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {
+       if (!(specPtr->specFlags & INIT) && (specPtr->argvName != NULL)) {
+           if (specPtr->dbName != NULL) {
+               specPtr->dbName = Tk_GetUid(specPtr->dbName);
+           }
+           if (specPtr->dbClass != NULL) {
+               specPtr->dbClass = Tk_GetUid(specPtr->dbClass);
+           }
+           if (specPtr->defValue != NULL) {
+               specPtr->defValue = Tk_GetUid(specPtr->defValue);
+           }
+       }
+       specPtr->specFlags = (specPtr->specFlags & ~TK_CONFIG_OPTION_SPECIFIED)
+               | INIT;
+    }
+
+    /*
+     * Pass two:  scan through all of the arguments, processing those
+     * that match entries in the specs.
+     */
+
+    for ( ; argc > 0; argc -= 2, argv += 2) {
+       char *arg;
+
+       if (flags & TK_CONFIG_OBJS) {
+           arg = Tcl_GetStringFromObj((Tcl_Obj *) *argv, NULL);
+       } else {
+           arg = *argv;
+       }
+       specPtr = FindConfigSpec(interp, specs, arg, needFlags, hateFlags);
+       if (specPtr == NULL) {
+           return TCL_ERROR;
+       }
+
+       /*
+        * Process the entry.
+        */
+
+       if (argc < 2) {
+           Tcl_AppendResult(interp, "value for \"", arg,
+                   "\" missing", (char *) NULL);
+           return TCL_ERROR;
+       }
+       if (flags & TK_CONFIG_OBJS) {
+           arg = Tcl_GetString((Tcl_Obj *) argv[1]);
+       } else {
+           arg = argv[1];
+       }
+       if (DoConfig(interp, tkwin, specPtr, arg, 0, widgRec) != TCL_OK) {
+           char msg[100];
+
+           sprintf(msg, "\n    (processing \"%.40s\" option)",
+                   specPtr->argvName);
+           Tcl_AddErrorInfo(interp, msg);
+           return TCL_ERROR;
+       }
+       specPtr->specFlags |= TK_CONFIG_OPTION_SPECIFIED;
+    }
+
+    /*
+     * Pass three:  scan through all of the specs again;  if no
+     * command-line argument matched a spec, then check for info
+     * in the option database.  If there was nothing in the
+     * database, then use the default.
+     */
+
+    if (!(flags & TK_CONFIG_ARGV_ONLY)) {
+       for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {
+           if ((specPtr->specFlags & TK_CONFIG_OPTION_SPECIFIED)
+                   || (specPtr->argvName == NULL)
+                   || (specPtr->type == TK_CONFIG_SYNONYM)) {
+               continue;
+           }
+           if (((specPtr->specFlags & needFlags) != needFlags)
+                   || (specPtr->specFlags & hateFlags)) {
+               continue;
+           }
+           value = NULL;
+           if (specPtr->dbName != NULL) {
+               value = Tk_GetOption(tkwin, specPtr->dbName, specPtr->dbClass);
+           }
+           if (value != NULL) {
+               if (DoConfig(interp, tkwin, specPtr, value, 1, widgRec) !=
+                       TCL_OK) {
+                   char msg[200];
+    
+                   sprintf(msg, "\n    (%s \"%.50s\" in widget \"%.50s\")",
+                           "database entry for",
+                           specPtr->dbName, Tk_PathName(tkwin));
+                   Tcl_AddErrorInfo(interp, msg);
+                   return TCL_ERROR;
+               }
+           } else {
+               if (specPtr->defValue != NULL) {
+                   value = Tk_GetUid(specPtr->defValue);
+               } else {
+                   value = NULL;
+               }
+               if ((value != NULL) && !(specPtr->specFlags
+                       & TK_CONFIG_DONT_SET_DEFAULT)) {
+                   if (DoConfig(interp, tkwin, specPtr, value, 1, widgRec) !=
+                           TCL_OK) {
+                       char msg[200];
+       
+                       sprintf(msg,
+                               "\n    (%s \"%.50s\" in widget \"%.50s\")",
+                               "default value for",
+                               specPtr->dbName, Tk_PathName(tkwin));
+                       Tcl_AddErrorInfo(interp, msg);
+                       return TCL_ERROR;
+                   }
+               }
+           }
+       }
+    }
+
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * FindConfigSpec --
+ *
+ *     Search through a table of configuration specs, looking for
+ *     one that matches a given argvName.
+ *
+ * Results:
+ *     The return value is a pointer to the matching entry, or NULL
+ *     if nothing matched.  In that case an error message is left
+ *     in the interp's result.
+ *
+ * Side effects:
+ *     None.
+ *
+ *--------------------------------------------------------------
+ */
+
+static Tk_ConfigSpec *
+FindConfigSpec(interp, specs, argvName, needFlags, hateFlags)
+    Tcl_Interp *interp;                /* Used for reporting errors. */
+    Tk_ConfigSpec *specs;      /* Pointer to table of configuration
+                                * specifications for a widget. */
+    char *argvName;            /* Name (suitable for use in a "config"
+                                * command) identifying particular option. */
+    int needFlags;             /* Flags that must be present in matching
+                                * entry. */
+    int hateFlags;             /* Flags that must NOT be present in
+                                * matching entry. */
+{
+    register Tk_ConfigSpec *specPtr;
+    register char c;           /* First character of current argument. */
+    Tk_ConfigSpec *matchPtr;   /* Matching spec, or NULL. */
+    size_t length;
+
+    c = argvName[1];
+    length = strlen(argvName);
+    matchPtr = NULL;
+    for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {
+       if (specPtr->argvName == NULL) {
+           continue;
+       }
+       if ((specPtr->argvName[1] != c)
+               || (strncmp(specPtr->argvName, argvName, length) != 0)) {
+           continue;
+       }
+       if (((specPtr->specFlags & needFlags) != needFlags)
+               || (specPtr->specFlags & hateFlags)) {
+           continue;
+       }
+       if (specPtr->argvName[length] == 0) {
+           matchPtr = specPtr;
+           goto gotMatch;
+       }
+       if (matchPtr != NULL) {
+           Tcl_AppendResult(interp, "ambiguous option \"", argvName,
+                   "\"", (char *) NULL);
+           return (Tk_ConfigSpec *) NULL;
+       }
+       matchPtr = specPtr;
+    }
+
+    if (matchPtr == NULL) {
+       Tcl_AppendResult(interp, "unknown option \"", argvName,
+               "\"", (char *) NULL);
+       return (Tk_ConfigSpec *) NULL;
+    }
+
+    /*
+     * Found a matching entry.  If it's a synonym, then find the
+     * entry that it's a synonym for.
+     */
+
+    gotMatch:
+    specPtr = matchPtr;
+    if (specPtr->type == TK_CONFIG_SYNONYM) {
+       for (specPtr = specs; ; specPtr++) {
+           if (specPtr->type == TK_CONFIG_END) {
+               Tcl_AppendResult(interp,
+                       "couldn't find synonym for option \"",
+                       argvName, "\"", (char *) NULL);
+               return (Tk_ConfigSpec *) NULL;
+           }
+           if ((specPtr->dbName == matchPtr->dbName) 
+                   && (specPtr->type != TK_CONFIG_SYNONYM)
+                   && ((specPtr->specFlags & needFlags) == needFlags)
+                   && !(specPtr->specFlags & hateFlags)) {
+               break;
+           }
+       }
+    }
+    return specPtr;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * DoConfig --
+ *
+ *     This procedure applies a single configuration option
+ *     to a widget record.
+ *
+ * Results:
+ *     A standard Tcl return value.
+ *
+ * Side effects:
+ *     WidgRec is modified as indicated by specPtr and value.
+ *     The old value is recycled, if that is appropriate for
+ *     the value type.
+ *
+ *--------------------------------------------------------------
+ */
+
+static int
+DoConfig(interp, tkwin, specPtr, value, valueIsUid, widgRec)
+    Tcl_Interp *interp;                /* Interpreter for error reporting. */
+    Tk_Window tkwin;           /* Window containing widget (needed to
+                                * set up X resources). */
+    Tk_ConfigSpec *specPtr;    /* Specifier to apply. */
+    char *value;               /* Value to use to fill in widgRec. */
+    int valueIsUid;            /* Non-zero means value is a Tk_Uid;
+                                * zero means it's an ordinary string. */
+    char *widgRec;             /* Record whose fields are to be
+                                * modified.  Values must be properly
+                                * initialized. */
+{
+    char *ptr;
+    Tk_Uid uid;
+    int nullValue;
+
+    nullValue = 0;
+    if ((*value == 0) && (specPtr->specFlags & TK_CONFIG_NULL_OK)) {
+       nullValue = 1;
+    }
+
+    do {
+       ptr = widgRec + specPtr->offset;
+       switch (specPtr->type) {
+           case TK_CONFIG_BOOLEAN:
+               if (Tcl_GetBoolean(interp, value, (int *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_INT:
+               if (Tcl_GetInt(interp, value, (int *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_DOUBLE:
+               if (Tcl_GetDouble(interp, value, (double *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_STRING: {
+               char *old, *new;
+
+               if (nullValue) {
+                   new = NULL;
+               } else {
+                   new = (char *) ckalloc((unsigned) (strlen(value) + 1));
+                   strcpy(new, value);
+               }
+               old = *((char **) ptr);
+               if (old != NULL) {
+                   ckfree(old);
+               }
+               *((char **) ptr) = new;
+               break;
+           }
+           case TK_CONFIG_UID:
+               if (nullValue) {
+                   *((Tk_Uid *) ptr) = NULL;
+               } else {
+                   uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+                   *((Tk_Uid *) ptr) = uid;
+               }
+               break;
+           case TK_CONFIG_COLOR: {
+               XColor *newPtr, *oldPtr;
+
+               if (nullValue) {
+                   newPtr = NULL;
+               } else {
+                   uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+                   newPtr = Tk_GetColor(interp, tkwin, uid);
+                   if (newPtr == NULL) {
+                       return TCL_ERROR;
+                   }
+               }
+               oldPtr = *((XColor **) ptr);
+               if (oldPtr != NULL) {
+                   Tk_FreeColor(oldPtr);
+               }
+               *((XColor **) ptr) = newPtr;
+               break;
+           }
+           case TK_CONFIG_FONT: {
+               Tk_Font new;
+
+               if (nullValue) {
+                   new = NULL;
+               } else {
+                   new = Tk_GetFont(interp, tkwin, value);
+                   if (new == NULL) {
+                       return TCL_ERROR;
+                   }
+               }
+               Tk_FreeFont(*((Tk_Font *) ptr));
+               *((Tk_Font *) ptr) = new;
+               break;
+           }
+           case TK_CONFIG_BITMAP: {
+               Pixmap new, old;
+
+               if (nullValue) {
+                   new = None;
+               } else {
+                   uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+                   new = Tk_GetBitmap(interp, tkwin, uid);
+                   if (new == None) {
+                       return TCL_ERROR;
+                   }
+               }
+               old = *((Pixmap *) ptr);
+               if (old != None) {
+                   Tk_FreeBitmap(Tk_Display(tkwin), old);
+               }
+               *((Pixmap *) ptr) = new;
+               break;
+           }
+           case TK_CONFIG_BORDER: {
+               Tk_3DBorder new, old;
+
+               if (nullValue) {
+                   new = NULL;
+               } else {
+                   uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+                   new = Tk_Get3DBorder(interp, tkwin, uid);
+                   if (new == NULL) {
+                       return TCL_ERROR;
+                   }
+               }
+               old = *((Tk_3DBorder *) ptr);
+               if (old != NULL) {
+                   Tk_Free3DBorder(old);
+               }
+               *((Tk_3DBorder *) ptr) = new;
+               break;
+           }
+           case TK_CONFIG_RELIEF:
+               uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+               if (Tk_GetRelief(interp, uid, (int *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_CURSOR:
+           case TK_CONFIG_ACTIVE_CURSOR: {
+               Tk_Cursor new, old;
+
+               if (nullValue) {
+                   new = None;
+               } else {
+                   uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+                   new = Tk_GetCursor(interp, tkwin, uid);
+                   if (new == None) {
+                       return TCL_ERROR;
+                   }
+               }
+               old = *((Tk_Cursor *) ptr);
+               if (old != None) {
+                   Tk_FreeCursor(Tk_Display(tkwin), old);
+               }
+               *((Tk_Cursor *) ptr) = new;
+               if (specPtr->type == TK_CONFIG_ACTIVE_CURSOR) {
+                   Tk_DefineCursor(tkwin, new);
+               }
+               break;
+           }
+           case TK_CONFIG_JUSTIFY:
+               uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+               if (Tk_GetJustify(interp, uid, (Tk_Justify *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_ANCHOR:
+               uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+               if (Tk_GetAnchor(interp, uid, (Tk_Anchor *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_CAP_STYLE:
+               uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+               if (Tk_GetCapStyle(interp, uid, (int *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_JOIN_STYLE:
+               uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
+               if (Tk_GetJoinStyle(interp, uid, (int *) ptr) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_PIXELS:
+               if (Tk_GetPixels(interp, tkwin, value, (int *) ptr)
+                       != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_MM:
+               if (Tk_GetScreenMM(interp, tkwin, value, (double *) ptr)
+                       != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           case TK_CONFIG_WINDOW: {
+               Tk_Window tkwin2;
+
+               if (nullValue) {
+                   tkwin2 = NULL;
+               } else {
+                   tkwin2 = Tk_NameToWindow(interp, value, tkwin);
+                   if (tkwin2 == NULL) {
+                       return TCL_ERROR;
+                   }
+               }
+               *((Tk_Window *) ptr) = tkwin2;
+               break;
+           }
+           case TK_CONFIG_CUSTOM:
+               if ((*specPtr->customPtr->parseProc)(
+                       specPtr->customPtr->clientData, interp, tkwin,
+                       value, widgRec, specPtr->offset) != TCL_OK) {
+                   return TCL_ERROR;
+               }
+               break;
+           default: {
+               char buf[64 + TCL_INTEGER_SPACE];
+
+               sprintf(buf, "bad config table: unknown type %d",
+                       specPtr->type);
+               Tcl_SetResult(interp, buf, TCL_VOLATILE);
+               return TCL_ERROR;
+           }
+       }
+       specPtr++;
+    } while ((specPtr->argvName == NULL) && (specPtr->type != TK_CONFIG_END));
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * Tk_ConfigureInfo --
+ *
+ *     Return information about the configuration options
+ *     for a window, and their current values.
+ *
+ * Results:
+ *     Always returns TCL_OK.  The interp's result will be modified
+ *     hold a description of either a single configuration option
+ *     available for "widgRec" via "specs", or all the configuration
+ *     options available.  In the "all" case, the result will
+ *     available for "widgRec" via "specs".  The result will
+ *     be a list, each of whose entries describes one option.
+ *     Each entry will itself be a list containing the option's
+ *     name for use on command lines, database name, database
+ *     class, default value, and current value (empty string
+ *     if none).  For options that are synonyms, the list will
+ *     contain only two values:  name and synonym name.  If the
+ *     "name" argument is non-NULL, then the only information
+ *     returned is that for the named argument (i.e. the corresponding
+ *     entry in the overall list is returned).
+ *
+ * Side effects:
+ *     None.
+ *
+ *--------------------------------------------------------------
+ */
+
+int
+Tk_ConfigureInfo(interp, tkwin, specs, widgRec, argvName, flags)
+    Tcl_Interp *interp;                /* Interpreter for error reporting. */
+    Tk_Window tkwin;           /* Window corresponding to widgRec. */
+    Tk_ConfigSpec *specs;      /* Describes legal options. */
+    char *widgRec;             /* Record whose fields contain current
+                                * values for options. */
+    char *argvName;            /* If non-NULL, indicates a single option
+                                * whose info is to be returned.  Otherwise
+                                * info is returned for all options. */
+    int flags;                 /* Used to specify additional flags
+                                * that must be present in config specs
+                                * for them to be considered. */
+{
+    register Tk_ConfigSpec *specPtr;
+    int needFlags, hateFlags;
+    char *list;
+    char *leader = "{";
+
+    needFlags = flags & ~(TK_CONFIG_USER_BIT - 1);
+    if (Tk_Depth(tkwin) <= 1) {
+       hateFlags = TK_CONFIG_COLOR_ONLY;
+    } else {
+       hateFlags = TK_CONFIG_MONO_ONLY;
+    }
+
+    /*
+     * If information is only wanted for a single configuration
+     * spec, then handle that one spec specially.
+     */
+
+    Tcl_SetResult(interp, (char *) NULL, TCL_STATIC);
+    if (argvName != NULL) {
+       specPtr = FindConfigSpec(interp, specs, argvName, needFlags,
+               hateFlags);
+       if (specPtr == NULL) {
+           return TCL_ERROR;
+       }
+       Tcl_SetResult(interp,
+               FormatConfigInfo(interp, tkwin, specPtr, widgRec),
+               TCL_DYNAMIC);
+       return TCL_OK;
+    }
+
+    /*
+     * Loop through all the specs, creating a big list with all
+     * their information.
+     */
+
+    for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {
+       if ((argvName != NULL) && (specPtr->argvName != argvName)) {
+           continue;
+       }
+       if (((specPtr->specFlags & needFlags) != needFlags)
+               || (specPtr->specFlags & hateFlags)) {
+           continue;
+       }
+       if (specPtr->argvName == NULL) {
+           continue;
+       }
+       list = FormatConfigInfo(interp, tkwin, specPtr, widgRec);
+       Tcl_AppendResult(interp, leader, list, "}", (char *) NULL);
+       ckfree(list);
+       leader = " {";
+    }
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * FormatConfigInfo --
+ *
+ *     Create a valid Tcl list holding the configuration information
+ *     for a single configuration option.
+ *
+ * Results:
+ *     A Tcl list, dynamically allocated.  The caller is expected to
+ *     arrange for this list to be freed eventually.
+ *
+ * Side effects:
+ *     Memory is allocated.
+ *
+ *--------------------------------------------------------------
+ */
+
+static char *
+FormatConfigInfo(interp, tkwin, specPtr, widgRec)
+    Tcl_Interp *interp;                        /* Interpreter to use for things
+                                        * like floating-point precision. */
+    Tk_Window tkwin;                   /* Window corresponding to widget. */
+    register Tk_ConfigSpec *specPtr;   /* Pointer to information describing
+                                        * option. */
+    char *widgRec;                     /* Pointer to record holding current
+                                        * values of info for widget. */
+{
+    char *argv[6], *result;
+    char buffer[200];
+    Tcl_FreeProc *freeProc = (Tcl_FreeProc *) NULL;
+
+    argv[0] = specPtr->argvName;
+    argv[1] = specPtr->dbName;
+    argv[2] = specPtr->dbClass;
+    argv[3] = specPtr->defValue;
+    if (specPtr->type == TK_CONFIG_SYNONYM) {
+       return Tcl_Merge(2, argv);
+    }
+    argv[4] = FormatConfigValue(interp, tkwin, specPtr, widgRec, buffer,
+           &freeProc);
+    if (argv[1] == NULL) {
+       argv[1] = "";
+    }
+    if (argv[2] == NULL) {
+       argv[2] = "";
+    }
+    if (argv[3] == NULL) {
+       argv[3] = "";
+    }
+    if (argv[4] == NULL) {
+       argv[4] = "";
+    }
+    result = Tcl_Merge(5, argv);
+    if (freeProc != NULL) {
+       if ((freeProc == TCL_DYNAMIC) || (freeProc == (Tcl_FreeProc *) free)) {
+           ckfree(argv[4]);
+       } else {
+           (*freeProc)(argv[4]);
+       }
+    }
+    return result;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * FormatConfigValue --
+ *
+ *     This procedure formats the current value of a configuration
+ *     option.
+ *
+ * Results:
+ *     The return value is the formatted value of the option given
+ *     by specPtr and widgRec.  If the value is static, so that it
+ *     need not be freed, *freeProcPtr will be set to NULL;  otherwise
+ *     *freeProcPtr will be set to the address of a procedure to
+ *     free the result, and the caller must invoke this procedure
+ *     when it is finished with the result.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static char *
+FormatConfigValue(interp, tkwin, specPtr, widgRec, buffer, freeProcPtr)
+    Tcl_Interp *interp;                /* Interpreter for use in real conversions. */
+    Tk_Window tkwin;           /* Window corresponding to widget. */
+    Tk_ConfigSpec *specPtr;    /* Pointer to information describing option.
+                                * Must not point to a synonym option. */
+    char *widgRec;             /* Pointer to record holding current
+                                * values of info for widget. */
+    char *buffer;              /* Static buffer to use for small values.
+                                * Must have at least 200 bytes of storage. */
+    Tcl_FreeProc **freeProcPtr;        /* Pointer to word to fill in with address
+                                * of procedure to free the result, or NULL
+                                * if result is static. */
+{
+    char *ptr, *result;
+
+    *freeProcPtr = NULL;
+    ptr = widgRec + specPtr->offset;
+    result = "";
+    switch (specPtr->type) {
+       case TK_CONFIG_BOOLEAN:
+           if (*((int *) ptr) == 0) {
+               result = "0";
+           } else {
+               result = "1";
+           }
+           break;
+       case TK_CONFIG_INT:
+           sprintf(buffer, "%d", *((int *) ptr));
+           result = buffer;
+           break;
+       case TK_CONFIG_DOUBLE:
+           Tcl_PrintDouble(interp, *((double *) ptr), buffer);
+           result = buffer;
+           break;
+       case TK_CONFIG_STRING:
+           result = (*(char **) ptr);
+           if (result == NULL) {
+               result = "";
+           }
+           break;
+       case TK_CONFIG_UID: {
+           Tk_Uid uid = *((Tk_Uid *) ptr);
+           if (uid != NULL) {
+               result = uid;
+           }
+           break;
+       }
+       case TK_CONFIG_COLOR: {
+           XColor *colorPtr = *((XColor **) ptr);
+           if (colorPtr != NULL) {
+               result = Tk_NameOfColor(colorPtr);
+           }
+           break;
+       }
+       case TK_CONFIG_FONT: {
+           Tk_Font tkfont = *((Tk_Font *) ptr);
+           if (tkfont != NULL) {
+               result = Tk_NameOfFont(tkfont);
+           }
+           break;
+       }
+       case TK_CONFIG_BITMAP: {
+           Pixmap pixmap = *((Pixmap *) ptr);
+           if (pixmap != None) {
+               result = Tk_NameOfBitmap(Tk_Display(tkwin), pixmap);
+           }
+           break;
+       }
+       case TK_CONFIG_BORDER: {
+           Tk_3DBorder border = *((Tk_3DBorder *) ptr);
+           if (border != NULL) {
+               result = Tk_NameOf3DBorder(border);
+           }
+           break;
+       }
+       case TK_CONFIG_RELIEF:
+           result = Tk_NameOfRelief(*((int *) ptr));
+           break;
+       case TK_CONFIG_CURSOR:
+       case TK_CONFIG_ACTIVE_CURSOR: {
+           Tk_Cursor cursor = *((Tk_Cursor *) ptr);
+           if (cursor != None) {
+               result = Tk_NameOfCursor(Tk_Display(tkwin), cursor);
+           }
+           break;
+       }
+       case TK_CONFIG_JUSTIFY:
+           result = Tk_NameOfJustify(*((Tk_Justify *) ptr));
+           break;
+       case TK_CONFIG_ANCHOR:
+           result = Tk_NameOfAnchor(*((Tk_Anchor *) ptr));
+           break;
+       case TK_CONFIG_CAP_STYLE:
+           result = Tk_NameOfCapStyle(*((int *) ptr));
+           break;
+       case TK_CONFIG_JOIN_STYLE:
+           result = Tk_NameOfJoinStyle(*((int *) ptr));
+           break;
+       case TK_CONFIG_PIXELS:
+           sprintf(buffer, "%d", *((int *) ptr));
+           result = buffer;
+           break;
+       case TK_CONFIG_MM:
+           Tcl_PrintDouble(interp, *((double *) ptr), buffer);
+           result = buffer;
+           break;
+       case TK_CONFIG_WINDOW: {
+           Tk_Window tkwin;
+
+           tkwin = *((Tk_Window *) ptr);
+           if (tkwin != NULL) {
+               result = Tk_PathName(tkwin);
+           }
+           break;
+       }
+       case TK_CONFIG_CUSTOM:
+           result = (*specPtr->customPtr->printProc)(
+                   specPtr->customPtr->clientData, tkwin, widgRec,
+                   specPtr->offset, freeProcPtr);
+           break;
+       default: 
+           result = "?? unknown type ??";
+    }
+    return result;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_ConfigureValue --
+ *
+ *     This procedure returns the current value of a configuration
+ *     option for a widget.
+ *
+ * Results:
+ *     The return value is a standard Tcl completion code (TCL_OK or
+ *     TCL_ERROR).  The interp's result will be set to hold either the value
+ *     of the option given by argvName (if TCL_OK is returned) or
+ *     an error message (if TCL_ERROR is returned).
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tk_ConfigureValue(interp, tkwin, specs, widgRec, argvName, flags)
+    Tcl_Interp *interp;                /* Interpreter for error reporting. */
+    Tk_Window tkwin;           /* Window corresponding to widgRec. */
+    Tk_ConfigSpec *specs;      /* Describes legal options. */
+    char *widgRec;             /* Record whose fields contain current
+                                * values for options. */
+    char *argvName;            /* Gives the command-line name for the
+                                * option whose value is to be returned. */
+    int flags;                 /* Used to specify additional flags
+                                * that must be present in config specs
+                                * for them to be considered. */
+{
+    Tk_ConfigSpec *specPtr;
+    int needFlags, hateFlags;
+
+    needFlags = flags & ~(TK_CONFIG_USER_BIT - 1);
+    if (Tk_Depth(tkwin) <= 1) {
+       hateFlags = TK_CONFIG_COLOR_ONLY;
+    } else {
+       hateFlags = TK_CONFIG_MONO_ONLY;
+    }
+    specPtr = FindConfigSpec(interp, specs, argvName, needFlags, hateFlags);
+    if (specPtr == NULL) {
+       return TCL_ERROR;
+    }
+    interp->result = FormatConfigValue(interp, tkwin, specPtr, widgRec,
+           interp->result, &interp->freeProc);
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_FreeOptions --
+ *
+ *     Free up all resources associated with configuration options.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Any resource in widgRec that is controlled by a configuration
+ *     option (e.g. a Tk_3DBorder or XColor) is freed in the appropriate
+ *     fashion.
+ *
+ *----------------------------------------------------------------------
+ */
+
+       /* ARGSUSED */
+void
+Tk_FreeOptions(specs, widgRec, display, needFlags)
+    Tk_ConfigSpec *specs;      /* Describes legal options. */
+    char *widgRec;             /* Record whose fields contain current
+                                * values for options. */
+    Display *display;          /* X display; needed for freeing some
+                                * resources. */
+    int needFlags;             /* Used to specify additional flags
+                                * that must be present in config specs
+                                * for them to be considered. */
+{
+    register Tk_ConfigSpec *specPtr;
+    char *ptr;
+
+    for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {
+       if ((specPtr->specFlags & needFlags) != needFlags) {
+           continue;
+       }
+       ptr = widgRec + specPtr->offset;
+       switch (specPtr->type) {
+           case TK_CONFIG_STRING:
+               if (*((char **) ptr) != NULL) {
+                   ckfree(*((char **) ptr));
+                   *((char **) ptr) = NULL;
+               }
+               break;
+           case TK_CONFIG_COLOR:
+               if (*((XColor **) ptr) != NULL) {
+                   Tk_FreeColor(*((XColor **) ptr));
+                   *((XColor **) ptr) = NULL;
+               }
+               break;
+           case TK_CONFIG_FONT:
+               Tk_FreeFont(*((Tk_Font *) ptr));
+               *((Tk_Font *) ptr) = NULL;
+               break;
+           case TK_CONFIG_BITMAP:
+               if (*((Pixmap *) ptr) != None) {
+                   Tk_FreeBitmap(display, *((Pixmap *) ptr));
+                   *((Pixmap *) ptr) = None;
+               }
+               break;
+           case TK_CONFIG_BORDER:
+               if (*((Tk_3DBorder *) ptr) != NULL) {
+                   Tk_Free3DBorder(*((Tk_3DBorder *) ptr));
+                   *((Tk_3DBorder *) ptr) = NULL;
+               }
+               break;
+           case TK_CONFIG_CURSOR:
+           case TK_CONFIG_ACTIVE_CURSOR:
+               if (*((Tk_Cursor *) ptr) != None) {
+                   Tk_FreeCursor(display, *((Tk_Cursor *) ptr));
+                   *((Tk_Cursor *) ptr) = None;
+               }
+       }
+    }
+}
+
+
diff --git a/tk/generic/tkPatch.h b/tk/generic/tkPatch.h
new file mode 100644 (file)
index 0000000..c36ed20
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * tkPatch.h --
+ *
+ * This file does nothing except define a "patch level" for Tk.
+ * The patch level has the form "X.YpZ" where X.Y is the base
+ * release, and Z is a serial number that is used to sequence
+ * patches for a given release.  Thus 4.0p1 is the first patch
+ * to release 4.0, 4.0p2 is the patch that follows 4.0p1, and
+ * so on.  The "pZ" is omitted in an original new release, and
+ * it is replaced with "bZ" for beta releases or "aZ" for alpha
+ * releases (e.g. 4.0b1 is the first beta release of Tk 4.0).
+ * The patch level ensures that patches are applied in the
+ * correct order and only to appropriate sources.
+ *
+ * Copyright (c) 1994-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) tkPatch.h 1.22 96/10/02 14:36:36
+ */
+
+#define TK_PATCH_LEVEL "4.2"
diff --git a/tk/generic/tkPlatDecls.h b/tk/generic/tkPlatDecls.h
new file mode 100644 (file)
index 0000000..f2c3123
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * tkPlatDecls.h --
+ *
+ *     Declarations of functions in the platform-specific public Tcl API.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#ifndef _TKPLATDECLS
+#define _TKPLATDECLS
+
+#ifdef BUILD_tk
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tk.decls script.
+ */
+
+
+/* !BEGIN!: Do not edit below this line. */
+
+/*
+ * Exported function declarations:
+ */
+
+#ifdef __WIN32__
+/* 0 */
+EXTERN Window          Tk_AttachHWND _ANSI_ARGS_((Tk_Window tkwin, 
+                               HWND hwnd));
+/* 1 */
+EXTERN HINSTANCE       Tk_GetHINSTANCE _ANSI_ARGS_((void));
+/* 2 */
+EXTERN HWND            Tk_GetHWND _ANSI_ARGS_((Window window));
+/* 3 */
+EXTERN Tk_Window       Tk_HWNDToWindow _ANSI_ARGS_((HWND hwnd));
+/* 4 */
+EXTERN void            Tk_PointerEvent _ANSI_ARGS_((HWND hwnd, int x, int y));
+/* 5 */
+EXTERN int             Tk_TranslateWinEvent _ANSI_ARGS_((HWND hwnd, 
+                               UINT message, WPARAM wParam, LPARAM lParam, 
+                               LRESULT * result));
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+/* 0 */
+EXTERN void            Tk_MacSetEmbedHandler _ANSI_ARGS_((
+                               Tk_MacEmbedRegisterWinProc * registerWinProcPtr, 
+                               Tk_MacEmbedGetGrafPortProc * getPortProcPtr, 
+                               Tk_MacEmbedMakeContainerExistProc * containerExistProcPtr, 
+                               Tk_MacEmbedGetClipProc * getClipProc, 
+                               Tk_MacEmbedGetOffsetInParentProc * getOffsetProc));
+/* 1 */
+EXTERN void            Tk_MacTurnOffMenus _ANSI_ARGS_((void));
+/* 2 */
+EXTERN void            Tk_MacTkOwnsCursor _ANSI_ARGS_((int tkOwnsIt));
+/* 3 */
+EXTERN void            TkMacInitMenus _ANSI_ARGS_((Tcl_Interp * interp));
+/* 4 */
+EXTERN void            TkMacInitAppleEvents _ANSI_ARGS_((
+                               Tcl_Interp * interp));
+/* 5 */
+EXTERN int             TkMacConvertEvent _ANSI_ARGS_((
+                               EventRecord * eventPtr));
+/* 6 */
+EXTERN int             TkMacConvertTkEvent _ANSI_ARGS_((
+                               EventRecord * eventPtr, Window window));
+/* 7 */
+EXTERN void            TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, 
+                               int x, int y, int width, int height, 
+                               int flags));
+/* 8 */
+EXTERN void            TkMacInvalClipRgns _ANSI_ARGS_((TkWindow * winPtr));
+/* 9 */
+EXTERN int             TkMacHaveAppearance _ANSI_ARGS_((void));
+/* 10 */
+EXTERN GWorldPtr       TkMacGetDrawablePort _ANSI_ARGS_((Drawable drawable));
+#endif /* MAC_TCL */
+
+typedef struct TkPlatStubs {
+    int magic;
+    struct TkPlatStubHooks *hooks;
+
+#ifdef __WIN32__
+    Window (*tk_AttachHWND) _ANSI_ARGS_((Tk_Window tkwin, HWND hwnd)); /* 0 */
+    HINSTANCE (*tk_GetHINSTANCE) _ANSI_ARGS_((void)); /* 1 */
+    HWND (*tk_GetHWND) _ANSI_ARGS_((Window window)); /* 2 */
+    Tk_Window (*tk_HWNDToWindow) _ANSI_ARGS_((HWND hwnd)); /* 3 */
+    void (*tk_PointerEvent) _ANSI_ARGS_((HWND hwnd, int x, int y)); /* 4 */
+    int (*tk_TranslateWinEvent) _ANSI_ARGS_((HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT * result)); /* 5 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    void (*tk_MacSetEmbedHandler) _ANSI_ARGS_((Tk_MacEmbedRegisterWinProc * registerWinProcPtr, Tk_MacEmbedGetGrafPortProc * getPortProcPtr, Tk_MacEmbedMakeContainerExistProc * containerExistProcPtr, Tk_MacEmbedGetClipProc * getClipProc, Tk_MacEmbedGetOffsetInParentProc * getOffsetProc)); /* 0 */
+    void (*tk_MacTurnOffMenus) _ANSI_ARGS_((void)); /* 1 */
+    void (*tk_MacTkOwnsCursor) _ANSI_ARGS_((int tkOwnsIt)); /* 2 */
+    void (*tkMacInitMenus) _ANSI_ARGS_((Tcl_Interp * interp)); /* 3 */
+    void (*tkMacInitAppleEvents) _ANSI_ARGS_((Tcl_Interp * interp)); /* 4 */
+    int (*tkMacConvertEvent) _ANSI_ARGS_((EventRecord * eventPtr)); /* 5 */
+    int (*tkMacConvertTkEvent) _ANSI_ARGS_((EventRecord * eventPtr, Window window)); /* 6 */
+    void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 7 */
+    void (*tkMacInvalClipRgns) _ANSI_ARGS_((TkWindow * winPtr)); /* 8 */
+    int (*tkMacHaveAppearance) _ANSI_ARGS_((void)); /* 9 */
+    GWorldPtr (*tkMacGetDrawablePort) _ANSI_ARGS_((Drawable drawable)); /* 10 */
+#endif /* MAC_TCL */
+} TkPlatStubs;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern TkPlatStubs *tkPlatStubsPtr;
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS)
+
+/*
+ * Inline function declarations:
+ */
+
+#ifdef __WIN32__
+#ifndef Tk_AttachHWND
+#define Tk_AttachHWND \
+       (tkPlatStubsPtr->tk_AttachHWND) /* 0 */
+#endif
+#ifndef Tk_GetHINSTANCE
+#define Tk_GetHINSTANCE \
+       (tkPlatStubsPtr->tk_GetHINSTANCE) /* 1 */
+#endif
+#ifndef Tk_GetHWND
+#define Tk_GetHWND \
+       (tkPlatStubsPtr->tk_GetHWND) /* 2 */
+#endif
+#ifndef Tk_HWNDToWindow
+#define Tk_HWNDToWindow \
+       (tkPlatStubsPtr->tk_HWNDToWindow) /* 3 */
+#endif
+#ifndef Tk_PointerEvent
+#define Tk_PointerEvent \
+       (tkPlatStubsPtr->tk_PointerEvent) /* 4 */
+#endif
+#ifndef Tk_TranslateWinEvent
+#define Tk_TranslateWinEvent \
+       (tkPlatStubsPtr->tk_TranslateWinEvent) /* 5 */
+#endif
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+#ifndef Tk_MacSetEmbedHandler
+#define Tk_MacSetEmbedHandler \
+       (tkPlatStubsPtr->tk_MacSetEmbedHandler) /* 0 */
+#endif
+#ifndef Tk_MacTurnOffMenus
+#define Tk_MacTurnOffMenus \
+       (tkPlatStubsPtr->tk_MacTurnOffMenus) /* 1 */
+#endif
+#ifndef Tk_MacTkOwnsCursor
+#define Tk_MacTkOwnsCursor \
+       (tkPlatStubsPtr->tk_MacTkOwnsCursor) /* 2 */
+#endif
+#ifndef TkMacInitMenus
+#define TkMacInitMenus \
+       (tkPlatStubsPtr->tkMacInitMenus) /* 3 */
+#endif
+#ifndef TkMacInitAppleEvents
+#define TkMacInitAppleEvents \
+       (tkPlatStubsPtr->tkMacInitAppleEvents) /* 4 */
+#endif
+#ifndef TkMacConvertEvent
+#define TkMacConvertEvent \
+       (tkPlatStubsPtr->tkMacConvertEvent) /* 5 */
+#endif
+#ifndef TkMacConvertTkEvent
+#define TkMacConvertTkEvent \
+       (tkPlatStubsPtr->tkMacConvertTkEvent) /* 6 */
+#endif
+#ifndef TkGenWMConfigureEvent
+#define TkGenWMConfigureEvent \
+       (tkPlatStubsPtr->tkGenWMConfigureEvent) /* 7 */
+#endif
+#ifndef TkMacInvalClipRgns
+#define TkMacInvalClipRgns \
+       (tkPlatStubsPtr->tkMacInvalClipRgns) /* 8 */
+#endif
+#ifndef TkMacHaveAppearance
+#define TkMacHaveAppearance \
+       (tkPlatStubsPtr->tkMacHaveAppearance) /* 9 */
+#endif
+#ifndef TkMacGetDrawablePort
+#define TkMacGetDrawablePort \
+       (tkPlatStubsPtr->tkMacGetDrawablePort) /* 10 */
+#endif
+#endif /* MAC_TCL */
+
+#endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#endif /* _TKPLATDECLS */
diff --git a/tk/generic/tkSend.c b/tk/generic/tkSend.c
new file mode 100644 (file)
index 0000000..074ce5a
--- /dev/null
@@ -0,0 +1,1867 @@
+/* 
+ * tkSend.c --
+ *
+ *     This file provides procedures that implement the "send"
+ *     command, allowing commands to be passed from interpreter
+ *     to interpreter.
+ *
+ * Copyright (c) 1989-1994 The Regents of the University of California.
+ * Copyright (c) 1994-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) tkSend.c 1.64 96/07/20 17:38:32
+ */
+
+#include "tkPort.h"
+#include "tkInt.h"
+
+/* 
+ * The following structure is used to keep track of the interpreters
+ * registered by this process.
+ */
+
+typedef struct RegisteredInterp {
+    char *name;                        /* Interpreter's name (malloc-ed). */
+    Tcl_Interp *interp;                /* Interpreter associated with name.  NULL
+                                * means that the application was unregistered
+                                * or deleted while a send was in progress
+                                * to it. */
+    TkDisplay *dispPtr;                /* Display for the application.  Needed
+                                * because we may need to unregister the
+                                * interpreter after its main window has
+                                * been deleted. */
+    struct RegisteredInterp *nextPtr;
+                               /* Next in list of names associated
+                                * with interps in this process.
+                                * NULL means end of list. */
+} RegisteredInterp;
+
+static RegisteredInterp *registry = NULL;
+                               /* List of all interpreters
+                                * registered by this process. */
+
+/*
+ * A registry of all interpreters for a display is kept in a
+ * property "InterpRegistry" on the root window of the display.
+ * It is organized as a series of zero or more concatenated strings
+ * (in no particular order), each of the form
+ *     window space name '\0'
+ * where "window" is the hex id of the comm. window to use to talk
+ * to an interpreter named "name".
+ *
+ * When the registry is being manipulated by an application (e.g. to
+ * add or remove an entry), it is loaded into memory using a structure
+ * of the following type:
+ */
+
+typedef struct NameRegistry {
+    TkDisplay *dispPtr;                /* Display from which the registry was
+                                * read. */
+    int locked;                        /* Non-zero means that the display was
+                                * locked when the property was read in. */
+    int modified;              /* Non-zero means that the property has
+                                * been modified, so it needs to be written
+                                * out when the NameRegistry is closed. */
+    unsigned long propLength;  /* Length of the property, in bytes. */
+    char *property;            /* The contents of the property, or NULL
+                                * if none.  See format description above;
+                                * this is *not* terminated by the first
+                                * null character.  Dynamically allocated. */
+    int allocedByX;            /* Non-zero means must free property with
+                                * XFree;  zero means use ckfree. */
+} NameRegistry;
+
+/*
+ * When a result is being awaited from a sent command, one of
+ * the following structures is present on a list of all outstanding
+ * sent commands.  The information in the structure is used to
+ * process the result when it arrives.  You're probably wondering
+ * how there could ever be multiple outstanding sent commands.
+ * This could happen if interpreters invoke each other recursively.
+ * It's unlikely, but possible.
+ */
+
+typedef struct PendingCommand {
+    int serial;                        /* Serial number expected in
+                                * result. */
+    TkDisplay *dispPtr;                /* Display being used for communication. */
+    char *target;              /* Name of interpreter command is
+                                * being sent to. */
+    Window commWindow;         /* Target's communication window. */
+    Tcl_Interp *interp;                /* Interpreter from which the send
+                                * was invoked. */
+    int code;                  /* Tcl return code for command
+                                * will be stored here. */
+    char *result;              /* String result for command (malloc'ed),
+                                * or NULL. */
+    char *errorInfo;           /* Information for "errorInfo" variable,
+                                * or NULL (malloc'ed). */
+    char *errorCode;           /* Information for "errorCode" variable,
+                                * or NULL (malloc'ed). */
+    int gotResponse;           /* 1 means a response has been received,
+                                * 0 means the command is still outstanding. */
+    struct PendingCommand *nextPtr;
+                               /* Next in list of all outstanding
+                                * commands.  NULL means end of
+                                * list. */
+} PendingCommand;
+
+static PendingCommand *pendingCommands = NULL;
+                               /* List of all commands currently
+                                * being waited for. */
+
+/*
+ * The information below is used for communication between processes
+ * during "send" commands.  Each process keeps a private window, never
+ * even mapped, with one property, "Comm".  When a command is sent to
+ * an interpreter, the command is appended to the comm property of the
+ * communication window associated with the interp's process.  Similarly,
+ * when a result is returned from a sent command, it is also appended
+ * to the comm property.
+ *
+ * Each command and each result takes the form of ASCII text.  For a
+ * command, the text consists of a zero character followed by several
+ * null-terminated ASCII strings.  The first string consists of the
+ * single letter "c".  Subsequent strings have the form "option value"
+ * where the following options are supported:
+ *
+ * -r commWindow serial
+ *
+ *     This option means that a response should be sent to the window
+ *     whose X identifier is "commWindow" (in hex), and the response should
+ *     be identified with the serial number given by "serial" (in decimal).
+ *     If this option isn't specified then the send is asynchronous and
+ *     no response is sent.
+ *
+ * -n name
+ *     "Name" gives the name of the application for which the command is
+ *     intended.  This option must be present.
+ *
+ * -s script
+ *
+ *     "Script" is the script to be executed.  This option must be present.
+ *
+ * The options may appear in any order.  The -n and -s options must be
+ * present, but -r may be omitted for asynchronous RPCs.  For compatibility
+ * with future releases that may add new features, there may be additional
+ * options present;  as long as they start with a "-" character, they will
+ * be ignored.
+ *
+ * A result also consists of a zero character followed by several null-
+ * terminated ASCII strings.  The first string consists of the single
+ * letter "r".  Subsequent strings have the form "option value" where
+ * the following options are supported:
+ *
+ * -s serial
+ *
+ *     Identifies the command for which this is the result.  It is the
+ *     same as the "serial" field from the -s option in the command.  This
+ *     option must be present.
+ *
+ * -c code
+ *
+ *     "Code" is the completion code for the script, in decimal.  If the
+ *     code is omitted it defaults to TCL_OK.
+ *
+ * -r result
+ *
+ *     "Result" is the result string for the script, which may be either
+ *     a result or an error message.  If this field is omitted then it
+ *     defaults to an empty string.
+ *
+ * -i errorInfo
+ *
+ *     "ErrorInfo" gives a string with which to initialize the errorInfo
+ *     variable.  This option may be omitted;  it is ignored unless the
+ *     completion code is TCL_ERROR.
+ *
+ * -e errorCode
+ *
+ *     "ErrorCode" gives a string with with to initialize the errorCode
+ *     variable.  This option may be omitted;  it is ignored  unless the
+ *     completion code is TCL_ERROR.
+ *
+ * Options may appear in any order, and only the -s option must be
+ * present.  As with commands, there may be additional options besides
+ * these;  unknown options are ignored.
+ */
+
+/*
+ * The following variable is the serial number that was used in the
+ * last "send" command.  It is exported only for testing purposes.
+ */
+
+int tkSendSerial = 0;
+
+/*
+ * Maximum size property that can be read at one time by
+ * this module:
+ */
+
+#define MAX_PROP_WORDS 100000
+
+/*
+ * The following variable can be set while debugging to do things like
+ * skip locking the server.
+ */
+
+static int sendDebug = 0;
+
+/*
+ * Forward declarations for procedures defined later in this file:
+ */
+
+static int             AppendErrorProc _ANSI_ARGS_((ClientData clientData,
+                               XErrorEvent *errorPtr));
+static void            AppendPropCarefully _ANSI_ARGS_((Display *display,
+                           Window window, Atom property, char *value,
+                           int length, PendingCommand *pendingPtr));
+static void            DeleteProc _ANSI_ARGS_((ClientData clientData));
+static void            RegAddName _ANSI_ARGS_((NameRegistry *regPtr,
+                           char *name, Window commWindow));
+static void            RegClose _ANSI_ARGS_((NameRegistry *regPtr));
+static void            RegDeleteName _ANSI_ARGS_((NameRegistry *regPtr,
+                           char *name));
+static Window          RegFindName _ANSI_ARGS_((NameRegistry *regPtr,
+                           char *name));
+static NameRegistry *  RegOpen _ANSI_ARGS_((Tcl_Interp *interp,
+                           TkDisplay *dispPtr, int lock));
+static void            SendEventProc _ANSI_ARGS_((ClientData clientData,
+                           XEvent *eventPtr));
+static int             SendInit _ANSI_ARGS_((Tcl_Interp *interp,
+                           TkDisplay *dispPtr));
+static Tk_RestrictAction SendRestrictProc _ANSI_ARGS_((ClientData clientData,
+                           XEvent *eventPtr));
+static int             ServerSecure _ANSI_ARGS_((TkDisplay *dispPtr));
+static void            TimeoutProc _ANSI_ARGS_((ClientData clientData));
+static void            UpdateCommWindow _ANSI_ARGS_((TkDisplay *dispPtr));
+static int             ValidateName _ANSI_ARGS_((TkDisplay *dispPtr,
+                           char *name, Window commWindow, int oldOK));
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * RegOpen --
+ *
+ *     This procedure loads the name registry for a display into
+ *     memory so that it can be manipulated.
+ *
+ * Results:
+ *     The return value is a pointer to the loaded registry.
+ *
+ * Side effects:
+ *     If "lock" is set then the server will be locked.  It is the
+ *     caller's responsibility to call RegClose when finished with
+ *     the registry, so that we can write back the registry if
+ *     neeeded, unlock the server if needed, and free memory.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static NameRegistry *
+RegOpen(interp, dispPtr, lock)
+    Tcl_Interp *interp;                /* Interpreter to use for error reporting
+                                * (errors cause a panic so in fact no
+                                * error is ever returned, but the interpreter
+                                * is needed anyway). */
+    TkDisplay *dispPtr;                /* Display whose name registry is to be
+                                * opened. */
+    int lock;                  /* Non-zero means lock the window server
+                                * when opening the registry, so no-one
+                                * else can use the registry until we
+                                * close it. */
+{
+    NameRegistry *regPtr;
+    int result, actualFormat;
+    unsigned long bytesAfter;
+    Atom actualType;
+
+    if (dispPtr->commTkwin == NULL) {
+       SendInit(interp, dispPtr);
+    }
+
+    regPtr = (NameRegistry *) ckalloc(sizeof(NameRegistry));
+    regPtr->dispPtr = dispPtr;
+    regPtr->locked = 0;
+    regPtr->modified = 0;
+    regPtr->allocedByX = 1;
+
+    if (lock && !sendDebug) {
+       XGrabServer(dispPtr->display);
+       regPtr->locked = 1;
+    }
+
+    /*
+     * Read the registry property.
+     */
+
+    result = XGetWindowProperty(dispPtr->display,
+           RootWindow(dispPtr->display, 0),
+           dispPtr->registryProperty, 0, MAX_PROP_WORDS,
+           False, XA_STRING, &actualType, &actualFormat,
+           &regPtr->propLength, &bytesAfter,
+           (unsigned char **) &regPtr->property);
+
+    if (actualType == None) {
+       regPtr->propLength = 0;
+       regPtr->property = NULL;
+    } else if ((result != Success) || (actualFormat != 8)
+           || (actualType != XA_STRING)) {
+       /*
+        * The property is improperly formed;  delete it.
+        */
+
+       if (regPtr->property != NULL) {
+           XFree(regPtr->property);
+           regPtr->propLength = 0;
+           regPtr->property = NULL;
+       }
+       XDeleteProperty(dispPtr->display,
+               RootWindow(dispPtr->display, 0),
+               dispPtr->registryProperty);
+    }
+
+    /*
+     * Xlib placed an extra null byte after the end of the property, just
+     * to make sure that it is always NULL-terminated.  Be sure to include
+     * this byte in our count if it's needed to ensure null termination
+     * (note: as of 8/95 I'm no longer sure why this code is needed;  seems
+     * like it shouldn't be).
+     */
+
+    if ((regPtr->propLength > 0)
+           && (regPtr->property[regPtr->propLength-1] != 0)) {
+       regPtr->propLength++;
+    }
+    return regPtr;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * RegFindName --
+ *
+ *     Given an open name registry, this procedure finds an entry
+ *     with a given name, if there is one, and returns information
+ *     about that entry.
+ *
+ * Results:
+ *     The return value is the X identifier for the comm window for
+ *     the application named "name", or None if there is no such
+ *     entry in the registry.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static Window
+RegFindName(regPtr, name)
+    NameRegistry *regPtr;      /* Pointer to a registry opened with a
+                                * previous call to RegOpen. */
+    char *name;                        /* Name of an application. */
+{
+    char *p, *entry;
+    Window commWindow;
+
+    commWindow = None;
+    for (p = regPtr->property; (p-regPtr->property) < regPtr->propLength; ) {
+       entry = p;
+       while ((*p != 0) && (!isspace(UCHAR(*p)))) {
+           p++;
+       }
+       if ((*p != 0) && (strcmp(name, p+1) == 0)) {
+           if (sscanf(entry, "%x", (unsigned int *) &commWindow) == 1) {
+               return commWindow;
+           }
+       }
+       while (*p != 0) {
+           p++;
+       }
+       p++;
+    }
+    return None;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * RegDeleteName --
+ *
+ *     This procedure deletes the entry for a given name from
+ *     an open registry.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     If there used to be an entry named "name" in the registry,
+ *     then it is deleted and the registry is marked as modified
+ *     so it will be written back when closed.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+RegDeleteName(regPtr, name)
+    NameRegistry *regPtr;      /* Pointer to a registry opened with a
+                                * previous call to RegOpen. */
+    char *name;                        /* Name of an application. */
+{
+    char *p, *entry, *entryName;
+    int count;
+
+    for (p = regPtr->property; (p-regPtr->property) < regPtr->propLength; ) {
+       entry = p;
+       while ((*p != 0) && (!isspace(UCHAR(*p)))) {
+           p++;
+       }
+       if (*p != 0) {
+           p++;
+       }
+       entryName = p;
+       while (*p != 0) {
+           p++;
+       }
+       p++;
+       if ((strcmp(name, entryName) == 0)) {
+           /*
+            * Found the matching entry.  Copy everything after it
+            * down on top of it.
+            */
+
+           count = regPtr->propLength - (p - regPtr->property);
+           if (count > 0)  {
+               memmove((VOID *) entry, (VOID *) p, (size_t) count);
+           }
+           regPtr->propLength -=  p - entry;
+           regPtr->modified = 1;
+           return;
+       }
+    }
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * RegAddName --
+ *
+ *     Add a new entry to an open registry.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The open registry is expanded;  it is marked as modified so that
+ *     it will be written back when closed.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+RegAddName(regPtr, name, commWindow)
+    NameRegistry *regPtr;      /* Pointer to a registry opened with a
+                                * previous call to RegOpen. */
+    char *name;                        /* Name of an application.  The caller
+                                * must ensure that this name isn't
+                                * already registered. */
+    Window commWindow;         /* X identifier for comm. window of
+                                * application.  */
+{
+    char id[30];
+    char *newProp;
+    int idLength, newBytes;
+
+    sprintf(id, "%x ", (unsigned int) commWindow);
+    idLength = strlen(id);
+    newBytes = idLength + strlen(name) + 1;
+    newProp = (char *) ckalloc((unsigned) (regPtr->propLength + newBytes));
+    strcpy(newProp, id);
+    strcpy(newProp+idLength, name);
+    if (regPtr->property != NULL) {
+       memcpy((VOID *) (newProp + newBytes), (VOID *) regPtr->property,
+               regPtr->propLength);
+       if (regPtr->allocedByX) {
+           XFree(regPtr->property);
+       } else {
+           ckfree(regPtr->property);
+       }
+    }
+    regPtr->modified = 1;
+    regPtr->propLength += newBytes;
+    regPtr->property = newProp;
+    regPtr->allocedByX = 0;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * RegClose --
+ *
+ *     This procedure is called to end a series of operations on
+ *     a name registry.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The registry is written back if it has been modified, and the
+ *     X server is unlocked if it was locked.  Memory for the
+ *     registry is freed, so the caller should never use regPtr
+ *     again.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+RegClose(regPtr)
+    NameRegistry *regPtr;      /* Pointer to a registry opened with a
+                                * previous call to RegOpen. */
+{
+    if (regPtr->modified) {
+       if (!regPtr->locked && !sendDebug) {
+           panic("The name registry was modified without being locked!");
+       }
+       XChangeProperty(regPtr->dispPtr->display,
+               RootWindow(regPtr->dispPtr->display, 0),
+               regPtr->dispPtr->registryProperty, XA_STRING, 8,
+               PropModeReplace, (unsigned char *) regPtr->property,
+               (int) regPtr->propLength);
+    }
+
+    if (regPtr->locked) {
+       XUngrabServer(regPtr->dispPtr->display);
+    }
+    XFlush(regPtr->dispPtr->display);
+
+    if (regPtr->property != NULL) {
+       if (regPtr->allocedByX) {
+           XFree(regPtr->property);
+       } else {
+           ckfree(regPtr->property);
+       }
+    }
+    ckfree((char *) regPtr);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * ValidateName --
+ *
+ *     This procedure checks to see if an entry in the registry
+ *     is still valid.
+ *
+ * Results:
+ *     The return value is 1 if the given commWindow exists and its
+ *     name is "name".  Otherwise 0 is returned.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+ValidateName(dispPtr, name, commWindow, oldOK)
+    TkDisplay *dispPtr;                /* Display for which to perform the
+                                * validation. */
+    char *name;                        /* The name of an application. */
+    Window commWindow;         /* X identifier for the application's
+                                * comm. window. */
+    int oldOK;                 /* Non-zero means that we should consider
+                                * an application to be valid even if it
+                                * looks like an old-style (pre-4.0) one;
+                                * 0 means consider these invalid. */
+{
+    int result, actualFormat, argc, i;
+    unsigned long length, bytesAfter;
+    Atom actualType;
+    char *property;
+    Tk_ErrorHandler handler;
+    char **argv;
+
+    property = NULL;
+
+    /*
+     * Ignore X errors when reading the property (e.g., the window
+     * might not exist).  If an error occurs, result will be some
+     * value other than Success.
+     */
+
+    handler = Tk_CreateErrorHandler(dispPtr->display, -1, -1, -1,
+           (Tk_ErrorProc *) NULL, (ClientData) NULL);
+    result = XGetWindowProperty(dispPtr->display, commWindow,
+           dispPtr->appNameProperty, 0, MAX_PROP_WORDS,
+           False, XA_STRING, &actualType, &actualFormat,
+           &length, &bytesAfter, (unsigned char **) &property);
+
+    if ((result == Success) && (actualType == None)) {
+       XWindowAttributes atts;
+
+       /*
+        * The comm. window exists but the property we're looking for
+        * doesn't exist.  This probably means that the application
+        * comes from an older version of Tk (< 4.0) that didn't set the
+        * property;  if this is the case, then assume for compatibility's
+        * sake that everything's OK.  However, it's also possible that
+        * some random application has re-used the window id for something
+        * totally unrelated.  Check a few characteristics of the window,
+        * such as its dimensions and mapped state, to be sure that it
+        * still "smells" like a commWindow.
+        */
+
+       if (!oldOK
+               || !XGetWindowAttributes(dispPtr->display, commWindow, &atts)
+               || (atts.width != 1) || (atts.height != 1)
+               || (atts.map_state != IsUnmapped)) {
+           result = 0;
+       } else {
+           result = 1;
+       }
+    } else if ((result == Success) && (actualFormat == 8)
+          && (actualType == XA_STRING)) {
+       result = 0;
+       if (Tcl_SplitList((Tcl_Interp *) NULL, property, &argc, &argv)
+               == TCL_OK) {
+           for (i = 0; i < argc; i++) {
+               if (strcmp(argv[i], name) == 0) {
+                   result = 1;
+                   break;
+               }
+           }
+           ckfree((char *) argv);
+       }
+    } else {
+       result = 0;
+    }
+    Tk_DeleteErrorHandler(handler);
+    if (property != NULL) {
+       XFree(property);
+    }
+    return result;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * ServerSecure --
+ *
+ *     Check whether a server is secure enough for us to trust
+ *     Tcl scripts arriving via that server.
+ *
+ * Results:
+ *     The return value is 1 if the server is secure, which means
+ *     that host-style authentication is turned on but there are
+ *     no hosts in the enabled list.  This means that some other
+ *     form of authorization (presumably more secure, such as xauth)
+ *     is in use.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+ServerSecure(dispPtr)
+    TkDisplay *dispPtr;                /* Display to check. */
+{
+#ifdef TK_NO_SECURITY
+    return 1;
+#else
+    XHostAddress *addrPtr;
+    int numHosts, secure;
+    Bool enabled;
+
+    secure = 0;
+    addrPtr = XListHosts(dispPtr->display, &numHosts, &enabled);
+    if (enabled && (numHosts == 0)) {
+       secure = 1;
+    }
+    if (addrPtr != NULL) {
+       XFree((char *) addrPtr);
+    }
+    return secure;
+#endif /* TK_NO_SECURITY */
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * Tk_SetAppName --
+ *
+ *     This procedure is called to associate an ASCII name with a Tk
+ *     application.  If the application has already been named, the
+ *     name replaces the old one.
+ *
+ * Results:
+ *     The return value is the name actually given to the application.
+ *     This will normally be the same as name, but if name was already
+ *     in use for an application then a name of the form "name #2" will
+ *     be chosen,  with a high enough number to make the name unique.
+ *
+ * Side effects:
+ *     Registration info is saved, thereby allowing the "send" command
+ *     to be used later to invoke commands in the application.  In
+ *     addition, the "send" command is created in the application's
+ *     interpreter.  The registration will be removed automatically
+ *     if the interpreter is deleted or the "send" command is removed.
+ *
+ *--------------------------------------------------------------
+ */
+
+char *
+Tk_SetAppName(tkwin, name)
+    Tk_Window tkwin;           /* Token for any window in the application
+                                * to be named:  it is just used to identify
+                                * the application and the display.  */
+    char *name;                        /* The name that will be used to
+                                * refer to the interpreter in later
+                                * "send" commands.  Must be globally
+                                * unique. */
+{
+    RegisteredInterp *riPtr, *riPtr2;
+    Window w;
+    TkWindow *winPtr = (TkWindow *) tkwin;
+    TkDisplay *dispPtr;
+    NameRegistry *regPtr;
+    Tcl_Interp *interp;
+    char *actualName;
+    Tcl_DString dString;
+    int offset, i;
+
+#ifdef __WIN32__
+    return name;
+#endif /* __WIN32__ */
+
+    dispPtr = winPtr->dispPtr;
+    interp = winPtr->mainPtr->interp;
+    if (dispPtr->commTkwin == NULL) {
+       SendInit(interp, winPtr->dispPtr);
+    }
+
+    /*
+     * See if the application is already registered;  if so, remove its
+     * current name from the registry.
+     */
+
+    regPtr = RegOpen(interp, winPtr->dispPtr, 1);
+    for (riPtr = registry; ; riPtr = riPtr->nextPtr) {
+       if (riPtr == NULL) {
+           /*
+            * This interpreter isn't currently registered;  create
+            * the data structure that will be used to register it locally,
+            * plus add the "send" command to the interpreter.
+            */
+
+           riPtr = (RegisteredInterp *) ckalloc(sizeof(RegisteredInterp));
+           riPtr->interp = interp;
+           riPtr->dispPtr = winPtr->dispPtr;
+           riPtr->nextPtr = registry;
+           registry = riPtr;
+           Tcl_CreateCommand(interp, "send", Tk_SendCmd, (ClientData) riPtr,
+                   DeleteProc);
+           break;
+       }
+       if (riPtr->interp == interp) {
+           /*
+            * The interpreter is currently registered;  remove it from
+            * the name registry.
+            */
+
+           RegDeleteName(regPtr, riPtr->name);
+           ckfree(riPtr->name);
+           break;
+       }
+    }
+
+    /*
+     * Pick a name to use for the application.  Use "name" if it's not
+     * already in use.  Otherwise add a suffix such as " #2", trying
+     * larger and larger numbers until we eventually find one that is
+     * unique.
+     */
+
+    actualName = name;
+    offset = 0;                                /* Needed only to avoid "used before
+                                        * set" compiler warnings. */
+    for (i = 1; ; i++) {
+       if (i > 1) {
+           if (i == 2) {
+               Tcl_DStringInit(&dString);
+               Tcl_DStringAppend(&dString, name, -1);
+               Tcl_DStringAppend(&dString, " #", 2);
+               offset = Tcl_DStringLength(&dString);
+               Tcl_DStringSetLength(&dString, offset+10);
+               actualName = Tcl_DStringValue(&dString);
+           }
+           sprintf(actualName + offset, "%d", i);
+       }
+       w = RegFindName(regPtr, actualName);
+       if (w == None) {
+           break;
+       }
+    
+       /*
+        * The name appears to be in use already, but double-check to
+        * be sure (perhaps the application died without removing its
+        * name from the registry?).
+        */
+
+       if (w == Tk_WindowId(dispPtr->commTkwin)) {
+           for (riPtr2 = registry; riPtr2 != NULL; riPtr2 = riPtr2->nextPtr) {
+               if ((riPtr2->interp != interp) &&
+                       (strcmp(riPtr2->name, actualName) == 0)) {
+                   goto nextSuffix;
+               }
+           }
+           RegDeleteName(regPtr, actualName);
+           break;
+       } else if (!ValidateName(winPtr->dispPtr, actualName, w, 1)) {
+           RegDeleteName(regPtr, actualName);
+           break;
+       }
+       nextSuffix:
+       continue;
+    }
+
+    /*
+     * We've now got a name to use.  Store it in the name registry and
+     * in the local entry for this application, plus put it in a property
+     * on the commWindow.
+     */
+
+    RegAddName(regPtr, actualName, Tk_WindowId(dispPtr->commTkwin));
+    RegClose(regPtr);
+    riPtr->name = (char *) ckalloc((unsigned) (strlen(actualName) + 1));
+    strcpy(riPtr->name, actualName);
+    if (actualName != name) {
+       Tcl_DStringFree(&dString);
+    }
+    UpdateCommWindow(dispPtr);
+
+    return riPtr->name;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * Tk_SendCmd --
+ *
+ *     This procedure is invoked to process the "send" Tcl command.
+ *     See the user documentation for details on what it does.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     See the user documentation.
+ *
+ *--------------------------------------------------------------
+ */
+
+int
+Tk_SendCmd(clientData, interp, argc, argv)
+    ClientData clientData;             /* Information about sender (only
+                                        * dispPtr field is used). */
+    Tcl_Interp *interp;                        /* Current interpreter. */
+    int argc;                          /* Number of arguments. */
+    char **argv;                       /* Argument strings. */
+{
+    TkWindow *winPtr;
+    Window commWindow;
+    PendingCommand pending;
+    register RegisteredInterp *riPtr;
+    char *destName, buffer[30];
+    int result, c, async, i, firstArg;
+    size_t length;
+    Tk_RestrictProc *prevRestrictProc;
+    ClientData prevArg;
+    TkDisplay *dispPtr;
+    NameRegistry *regPtr;
+    Tcl_DString request;
+    Tcl_Interp *localInterp;           /* Used when the interpreter to
+                                         * send the command to is within
+                                         * the same process. */
+
+    /*
+     * Process options, if any.
+     */
+
+    async = 0;
+    winPtr = (TkWindow *) Tk_MainWindow(interp);
+    if (winPtr == NULL) {
+       return TCL_ERROR;
+    }
+    for (i = 1; i < (argc-1); ) {
+       if (argv[i][0] != '-') {
+           break;
+       }
+       c = argv[i][1];
+       length = strlen(argv[i]);
+       if ((c == 'a') && (strncmp(argv[i], "-async", length) == 0)) {
+           async = 1;
+           i++;
+       } else if ((c == 'd') && (strncmp(argv[i], "-displayof",
+               length) == 0)) {
+           winPtr = (TkWindow *) Tk_NameToWindow(interp, argv[i+1],
+                   (Tk_Window) winPtr);
+           if (winPtr == NULL) {
+               return TCL_ERROR;
+           }
+           i += 2;
+       } else if (strcmp(argv[i], "--") == 0) {
+           i++;
+           break;
+       } else {
+           Tcl_AppendResult(interp, "bad option \"", argv[i],
+                   "\": must be -async, -displayof, or --", (char *) NULL);
+           return TCL_ERROR;
+       }
+    }
+
+    if (argc < (i+2)) {
+       Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
+               " ?options? interpName arg ?arg ...?\"", (char *) NULL);
+       return TCL_ERROR;
+    }
+    destName = argv[i];
+    firstArg = i+1;
+
+    dispPtr = winPtr->dispPtr;
+    if (dispPtr->commTkwin == NULL) {
+       SendInit(interp, winPtr->dispPtr);
+    }
+
+    /*
+     * See if the target interpreter is local.  If so, execute
+     * the command directly without going through the X server.
+     * The only tricky thing is passing the result from the target
+     * interpreter to the invoking interpreter.  Watch out:  they
+     * could be the same!
+     */
+
+    for (riPtr = registry; riPtr != NULL; riPtr = riPtr->nextPtr) {
+       if ((riPtr->dispPtr != dispPtr)
+               || (strcmp(riPtr->name, destName) != 0)) {
+           continue;
+       }
+       Tcl_Preserve((ClientData) riPtr);
+        localInterp = riPtr->interp;
+        Tcl_Preserve((ClientData) localInterp);
+       if (firstArg == (argc-1)) {
+           result = Tcl_GlobalEval(localInterp, argv[firstArg]);
+       } else {
+           Tcl_DStringInit(&request);
+           Tcl_DStringAppend(&request, argv[firstArg], -1);
+           for (i = firstArg+1; i < argc; i++) {
+               Tcl_DStringAppend(&request, " ", 1);
+               Tcl_DStringAppend(&request, argv[i], -1);
+           }
+           result = Tcl_GlobalEval(localInterp, Tcl_DStringValue(&request));
+           Tcl_DStringFree(&request);
+       }
+       if (interp != localInterp) {
+           if (result == TCL_ERROR) {
+
+               /*
+                * An error occurred, so transfer error information from the
+                * destination interpreter back to our interpreter.  Must clear
+                * interp's result before calling Tcl_AddErrorInfo, since
+                * Tcl_AddErrorInfo will store the interp's result in errorInfo
+                * before appending riPtr's $errorInfo;  we've already got
+                * everything we need in riPtr's $errorInfo.
+                */
+
+               Tcl_ResetResult(interp);
+               Tcl_AddErrorInfo(interp, Tcl_GetVar2(localInterp,
+                       "errorInfo", (char *) NULL, TCL_GLOBAL_ONLY));
+               Tcl_SetVar2(interp, "errorCode", (char *) NULL,
+                       Tcl_GetVar2(localInterp, "errorCode", (char *) NULL,
+                       TCL_GLOBAL_ONLY), TCL_GLOBAL_ONLY);
+           }
+            if (localInterp->freeProc != TCL_STATIC) {
+                interp->result = localInterp->result;
+                interp->freeProc = localInterp->freeProc;
+                localInterp->freeProc = TCL_STATIC;
+            } else {
+                Tcl_SetResult(interp, localInterp->result, TCL_VOLATILE);
+            }
+            Tcl_ResetResult(localInterp);
+       }
+       Tcl_Release((ClientData) riPtr);
+        Tcl_Release((ClientData) localInterp);
+       return result;
+    }
+
+    /*
+     * Bind the interpreter name to a communication window.
+     */
+
+    regPtr = RegOpen(interp, winPtr->dispPtr, 0);
+    commWindow = RegFindName(regPtr, destName);
+    RegClose(regPtr);
+    if (commWindow == None) {
+       Tcl_AppendResult(interp, "no application named \"",
+               destName, "\"", (char *) NULL);
+       return TCL_ERROR;
+    }
+
+    /*
+     * Send the command to the target interpreter by appending it to the
+     * comm window in the communication window.
+     */
+
+    tkSendSerial++;
+    Tcl_DStringInit(&request);
+    Tcl_DStringAppend(&request, "\0c\0-n ", 6);
+    Tcl_DStringAppend(&request, destName, -1);
+    if (!async) {
+       sprintf(buffer, "%x %d",
+               (unsigned int) Tk_WindowId(dispPtr->commTkwin),
+               tkSendSerial);
+       Tcl_DStringAppend(&request, "\0-r ", 4);
+       Tcl_DStringAppend(&request, buffer, -1);
+    }
+    Tcl_DStringAppend(&request, "\0-s ", 4);
+    Tcl_DStringAppend(&request, argv[firstArg], -1);
+    for (i = firstArg+1; i < argc; i++) {
+       Tcl_DStringAppend(&request, " ", 1);
+       Tcl_DStringAppend(&request, argv[i], -1);
+    }
+    (void) AppendPropCarefully(dispPtr->display, commWindow,
+           dispPtr->commProperty, Tcl_DStringValue(&request),
+           Tcl_DStringLength(&request) + 1,
+           (async) ? (PendingCommand *) NULL : &pending);
+    Tcl_DStringFree(&request);
+    if (async) {
+       /*
+        * This is an asynchronous send:  return immediately without
+        * waiting for a response.
+        */
+
+       return TCL_OK;
+    }
+
+    /*
+     * Register the fact that we're waiting for a command to complete
+     * (this is needed by SendEventProc and by AppendErrorProc to pass
+     * back the command's results).  Set up a timeout handler so that
+     * we can check during long sends to make sure that the destination
+     * application is still alive.
+     */
+
+    pending.serial = tkSendSerial;
+    pending.dispPtr = dispPtr;
+    pending.target = destName;
+    pending.commWindow = commWindow;
+    pending.interp = interp;
+    pending.result = NULL;
+    pending.errorInfo = NULL;
+    pending.errorCode = NULL;
+    pending.gotResponse = 0;
+    pending.nextPtr = pendingCommands;
+    pendingCommands = &pending;
+
+    /*
+     * Enter a loop processing X events until the result comes
+     * in or the target is declared to be dead.  While waiting
+     * for a result, look only at send-related events so that
+     * the send is synchronous with respect to other events in
+     * the application.
+     */
+
+    prevRestrictProc = Tk_RestrictEvents(SendRestrictProc,
+           (ClientData) NULL, &prevArg);
+    Tcl_CreateModalTimeout(1000, TimeoutProc, (ClientData) &pending);
+    while (!pending.gotResponse) {
+       Tcl_DoOneEvent(TCL_WINDOW_EVENTS);
+    }
+    Tcl_DeleteModalTimeout(TimeoutProc, (ClientData) &pending);
+    (void) Tk_RestrictEvents(prevRestrictProc, prevArg, &prevArg);
+
+    /*
+     * Unregister the information about the pending command
+     * and return the result.
+     */
+
+    if (pendingCommands == &pending) {
+       pendingCommands = pending.nextPtr;
+    } else {
+       PendingCommand *pcPtr;
+
+       for (pcPtr = pendingCommands; pcPtr != NULL;
+               pcPtr = pcPtr->nextPtr) {
+           if (pcPtr->nextPtr == &pending) {
+               pcPtr->nextPtr = pending.nextPtr;
+               break;
+           }
+       }
+    }
+    if (pending.errorInfo != NULL) {
+       /*
+        * Special trick: must clear the interp's result before calling
+        * Tcl_AddErrorInfo, since Tcl_AddErrorInfo will store the interp's
+        * result in errorInfo before appending pending.errorInfo;  we've
+        * already got everything we need in pending.errorInfo.
+        */
+
+       Tcl_ResetResult(interp);
+       Tcl_AddErrorInfo(interp, pending.errorInfo);
+       ckfree(pending.errorInfo);
+    }
+    if (pending.errorCode != NULL) {
+       Tcl_SetVar2(interp, "errorCode", (char *) NULL, pending.errorCode,
+               TCL_GLOBAL_ONLY);
+       ckfree(pending.errorCode);
+    }
+    Tcl_SetResult(interp, pending.result, TCL_DYNAMIC);
+    return pending.code;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkGetInterpNames --
+ *
+ *     This procedure is invoked to fetch a list of all the
+ *     interpreter names currently registered for the display
+ *     of a particular window.
+ *
+ * Results:
+ *     A standard Tcl return value.  Interp->result will be set
+ *     to hold a list of all the interpreter names defined for
+ *     tkwin's display.  If an error occurs, then TCL_ERROR
+ *     is returned and interp->result will hold an error message.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TkGetInterpNames(interp, tkwin)
+    Tcl_Interp *interp;                /* Interpreter for returning a result. */
+    Tk_Window tkwin;           /* Window whose display is to be used
+                                * for the lookup. */
+{
+    TkWindow *winPtr = (TkWindow *) tkwin;
+    char *p, *entry, *entryName;
+    NameRegistry *regPtr;
+    Window commWindow;
+    int count;
+
+    /*
+     * Read the registry property, then scan through all of its entries.
+     * Validate each entry to be sure that its application still exists.
+     */
+
+    regPtr = RegOpen(interp, winPtr->dispPtr, 1);
+    for (p = regPtr->property; (p-regPtr->property) < regPtr->propLength; ) {
+       entry = p;
+       if (sscanf(p,  "%x",(unsigned int *) &commWindow) != 1) {
+           commWindow =  None;
+       }
+       while ((*p != 0) && (!isspace(UCHAR(*p)))) {
+           p++;
+       }
+       if (*p != 0) {
+           p++;
+       }
+       entryName = p;
+       while (*p != 0) {
+           p++;
+       }
+       p++;
+       if (ValidateName(winPtr->dispPtr, entryName, commWindow, 1)) {
+           /*
+            * The application still exists; add its name to the result.
+            */
+
+           Tcl_AppendElement(interp, entryName);
+       } else {
+           /*
+            * This name is bogus (perhaps the application died without
+            * cleaning up its entry in the registry?).  Delete the name.
+            */
+
+           count = regPtr->propLength - (p - regPtr->property);
+           if (count > 0)  {
+               memmove((VOID *) entry, (VOID *) p, (size_t) count);
+           }
+           regPtr->propLength -= p - entry;
+           regPtr->modified = 1;
+           p = entry;
+       }
+    }
+    RegClose(regPtr);
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * SendInit --
+ *
+ *     This procedure is called to initialize the
+ *     communication channels for sending commands and
+ *     receiving results.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Sets up various data structures and windows.
+ *
+ *--------------------------------------------------------------
+ */
+
+static int
+SendInit(interp, dispPtr)
+    Tcl_Interp *interp;                /* Interpreter to use for error reporting
+                                * (no errors are ever returned, but the
+                                * interpreter is needed anyway). */
+    TkDisplay *dispPtr;                /* Display to initialize. */
+{
+    XSetWindowAttributes atts;
+
+    /*
+     * Create the window used for communication, and set up an
+     * event handler for it.
+     */
+
+    dispPtr->commTkwin = Tk_CreateWindow(interp, (Tk_Window) NULL,
+           "_comm", DisplayString(dispPtr->display));
+    if (dispPtr->commTkwin == NULL) {
+       panic("Tk_CreateWindow failed in SendInit!");
+    }
+    atts.override_redirect = True;
+    Tk_ChangeWindowAttributes(dispPtr->commTkwin,
+           CWOverrideRedirect, &atts);
+    Tk_CreateEventHandler(dispPtr->commTkwin, PropertyChangeMask,
+           SendEventProc, (ClientData) dispPtr);
+    Tk_MakeWindowExist(dispPtr->commTkwin);
+
+    /*
+     * Get atoms used as property names.
+     */
+
+    dispPtr->commProperty = Tk_InternAtom(dispPtr->commTkwin, "Comm");
+    dispPtr->registryProperty = Tk_InternAtom(dispPtr->commTkwin,
+           "InterpRegistry");
+    dispPtr->appNameProperty = Tk_InternAtom(dispPtr->commTkwin,
+           "TK_APPLICATION");
+
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * SendEventProc --
+ *
+ *     This procedure is invoked automatically by the toolkit
+ *     event manager when a property changes on the communication
+ *     window.  This procedure reads the property and handles
+ *     command requests and responses.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     If there are command requests in the property, they
+ *     are executed.  If there are responses in the property,
+ *     their information is saved for the (ostensibly waiting)
+ *     "send" commands. The property is deleted.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+SendEventProc(clientData, eventPtr)
+    ClientData clientData;     /* Display information. */      
+    XEvent *eventPtr;          /* Information about event. */
+{
+    TkDisplay *dispPtr = (TkDisplay *) clientData;
+    char *propInfo;
+    register char *p;
+    int result, actualFormat;
+    unsigned long numItems, bytesAfter;
+    Atom actualType;
+    Tcl_Interp *remoteInterp;  /* Interp in which to execute the command. */
+
+    if ((eventPtr->xproperty.atom != dispPtr->commProperty)
+           || (eventPtr->xproperty.state != PropertyNewValue)) {
+       return;
+    }
+
+    /*
+     * Read the comm property and delete it.
+     */
+
+    propInfo = NULL;
+    result = XGetWindowProperty(dispPtr->display,
+           Tk_WindowId(dispPtr->commTkwin),
+           dispPtr->commProperty, 0, MAX_PROP_WORDS, True,
+           XA_STRING, &actualType, &actualFormat,
+           &numItems, &bytesAfter, (unsigned char **) &propInfo);
+
+    /*
+     * If the property doesn't exist or is improperly formed
+     * then ignore it.
+     */
+
+    if ((result != Success) || (actualType != XA_STRING)
+           || (actualFormat != 8)) {
+       if (propInfo != NULL) {
+           XFree(propInfo);
+       }
+       return;
+    }
+
+    /*
+     * Several commands and results could arrive in the property at
+     * one time;  each iteration through the outer loop handles a
+     * single command or result.
+     */
+
+    for (p = propInfo; (p-propInfo) < numItems; ) {
+       /*
+        * Ignore leading NULLs; each command or result starts with a
+        * NULL so that no matter how badly formed a preceding command
+        * is, we'll be able to tell that a new command/result is
+        * starting.
+        */
+
+       if (*p == 0) {
+           p++;
+           continue;
+       }
+
+       if ((*p == 'c') && (p[1] == 0)) {
+           Window commWindow;
+           char *interpName, *script, *serial, *end;
+           Tcl_DString reply;
+           RegisteredInterp *riPtr;
+
+           /*
+            *----------------------------------------------------------
+            * This is an incoming command from some other application.
+            * Iterate over all of its options.  Stop when we reach
+            * the end of the property or something that doesn't look
+            * like an option.
+            *----------------------------------------------------------
+            */
+
+           p += 2;
+           interpName = NULL;
+           commWindow = None;
+           serial = "";
+           script = NULL;
+           while (((p-propInfo) < numItems) && (*p == '-')) {
+               switch (p[1]) {
+                   case 'r':
+                       commWindow = (Window) strtoul(p+2, &end, 16);
+                       if ((end == p+2) || (*end != ' ')) {
+                           commWindow = None;
+                       } else {
+                           p = serial = end+1;
+                       }
+                       break;
+                   case 'n':
+                       if (p[2] == ' ') {
+                           interpName = p+3;
+                       }
+                       break;
+                   case 's':
+                       if (p[2] == ' ') {
+                           script = p+3;
+                       }
+                       break;
+               }
+               while (*p != 0) {
+                   p++;
+               }
+               p++;
+           }
+
+           if ((script == NULL) || (interpName == NULL)) {
+               continue;
+           }
+
+           /*
+            * Initialize the result property, so that we're ready at any
+            * time if we need to return an error.
+            */
+
+           if (commWindow != None) {
+               Tcl_DStringInit(&reply);
+               Tcl_DStringAppend(&reply, "\0r\0-s ", 6);
+               Tcl_DStringAppend(&reply, serial, -1);
+               Tcl_DStringAppend(&reply, "\0-r ", 4);
+           }
+
+           if (!ServerSecure(dispPtr)) {
+               if (commWindow != None) {
+                   Tcl_DStringAppend(&reply, "X server insecure (must use xauth-style authorization); command ignored", -1);
+               }
+               result = TCL_ERROR;
+               goto returnResult;
+           }
+
+           /*
+            * Locate the application, then execute the script.
+            */
+
+           for (riPtr = registry; ; riPtr = riPtr->nextPtr) {
+               if (riPtr == NULL) {
+                   if (commWindow != None) {
+                       Tcl_DStringAppend(&reply,
+                               "receiver never heard of interpreter \"", -1);
+                       Tcl_DStringAppend(&reply, interpName, -1);
+                       Tcl_DStringAppend(&reply, "\"", 1);
+                   }
+                   result = TCL_ERROR;
+                   goto returnResult;
+               }
+               if (strcmp(riPtr->name, interpName) == 0) {
+                   break;
+               }
+           }
+           Tcl_Preserve((ClientData) riPtr);
+
+            /*
+             * We must protect the interpreter because the script may
+             * enter another event loop, which might call Tcl_DeleteInterp.
+             */
+
+            remoteInterp = riPtr->interp;
+            Tcl_Preserve((ClientData) remoteInterp);
+
+            result = Tcl_GlobalEval(remoteInterp, script);
+
+            /*
+             * The call to Tcl_Release may have released the interpreter
+             * which will cause the "send" command for that interpreter
+             * to be deleted. The command deletion callback will set the
+             * riPtr->interp field to NULL, hence the check below for NULL.
+             */
+
+           if (commWindow != None) {
+               Tcl_DStringAppend(&reply, remoteInterp->result, -1);
+               if (result == TCL_ERROR) {
+                   char *varValue;
+    
+                   varValue = Tcl_GetVar2(remoteInterp, "errorInfo",
+                           (char *) NULL, TCL_GLOBAL_ONLY);
+                   if (varValue != NULL) {
+                       Tcl_DStringAppend(&reply, "\0-i ", 4);
+                       Tcl_DStringAppend(&reply, varValue, -1);
+                   }
+                   varValue = Tcl_GetVar2(remoteInterp, "errorCode",
+                           (char *) NULL, TCL_GLOBAL_ONLY);
+                   if (varValue != NULL) {
+                       Tcl_DStringAppend(&reply, "\0-e ", 4);
+                       Tcl_DStringAppend(&reply, varValue, -1);
+                   }
+               }
+           }
+            Tcl_Release((ClientData) remoteInterp);
+           Tcl_Release((ClientData) riPtr);
+
+           /*
+            * Return the result to the sender if a commWindow was
+            * specified (if none was specified then this is an asynchronous
+            * call).  Right now reply has everything but the completion
+            * code, but it needs the NULL to terminate the current option.
+            */
+
+           returnResult:
+           if (commWindow != None) {
+               if (result != TCL_OK) {
+                   char buffer[20];
+    
+                   sprintf(buffer, "%d", result);
+                   Tcl_DStringAppend(&reply, "\0-c ", 4);
+                   Tcl_DStringAppend(&reply, buffer, -1);
+               }
+               (void) AppendPropCarefully(dispPtr->display, commWindow,
+                       dispPtr->commProperty, Tcl_DStringValue(&reply),
+                       Tcl_DStringLength(&reply) + 1,
+                       (PendingCommand *) NULL);
+               XFlush(dispPtr->display);
+               Tcl_DStringFree(&reply);
+           }
+       } else if ((*p == 'r') && (p[1] == 0)) {
+           int serial, code, gotSerial;
+           char *errorInfo, *errorCode, *resultString;
+           PendingCommand *pcPtr;
+
+           /*
+            *----------------------------------------------------------
+            * This is a reply to some command that we sent out.  Iterate
+            * over all of its options.  Stop when we reach the end of the
+            * property or something that doesn't look like an option.
+            *----------------------------------------------------------
+            */
+
+           p += 2;
+           code = TCL_OK;
+           gotSerial = 0;
+           errorInfo = NULL;
+           errorCode = NULL;
+           resultString = "";
+           while (((p-propInfo) < numItems) && (*p == '-')) {
+               switch (p[1]) {
+                   case 'c':
+                       if (sscanf(p+2, " %d", &code) != 1) {
+                           code = TCL_OK;
+                       }
+                       break;
+                   case 'e':
+                       if (p[2] == ' ') {
+                           errorCode = p+3;
+                       }
+                       break;
+                   case 'i':
+                       if (p[2] == ' ') {
+                           errorInfo = p+3;
+                       }
+                       break;
+                   case 'r':
+                       if (p[2] == ' ') {
+                           resultString = p+3;
+                       }
+                       break;
+                   case 's':
+                       if (sscanf(p+2, " %d", &serial) == 1) {
+                           gotSerial = 1;
+                       }
+                       break;
+               }
+               while (*p != 0) {
+                   p++;
+               }
+               p++;
+           }
+
+           if (!gotSerial) {
+               continue;
+           }
+
+           /*
+            * Give the result information to anyone who's
+            * waiting for it.
+            */
+
+           for (pcPtr = pendingCommands; pcPtr != NULL;
+                   pcPtr = pcPtr->nextPtr) {
+               if ((serial != pcPtr->serial) || (pcPtr->result != NULL)) {
+                   continue;
+               }
+               pcPtr->code = code;
+               if (resultString != NULL) {
+                   pcPtr->result = (char *) ckalloc((unsigned)
+                           (strlen(resultString) + 1));
+                   strcpy(pcPtr->result, resultString);
+               }
+               if (code == TCL_ERROR) {
+                   if (errorInfo != NULL) {
+                       pcPtr->errorInfo = (char *) ckalloc((unsigned)
+                               (strlen(errorInfo) + 1));
+                       strcpy(pcPtr->errorInfo, errorInfo);
+                   }
+                   if (errorCode != NULL) {
+                       pcPtr->errorCode = (char *) ckalloc((unsigned)
+                               (strlen(errorCode) + 1));
+                       strcpy(pcPtr->errorCode, errorCode);
+                   }
+               }
+               pcPtr->gotResponse = 1;
+               break;
+           }
+       } else {
+           /*
+            * Didn't recognize this thing.  Just skip through the next
+            * null character and try again.
+            */
+
+           while (*p != 0) {
+               p++;
+           }
+           p++;
+       }
+    }
+    XFree(propInfo);
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * AppendPropCarefully --
+ *
+ *     Append a given property to a given window, but set up
+ *     an X error handler so that if the append fails this
+ *     procedure can return an error code rather than having
+ *     Xlib panic.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The given property on the given window is appended to.
+ *     If this operation fails and if pendingPtr is non-NULL,
+ *     then the pending operation is marked as complete with
+ *     an error.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+AppendPropCarefully(display, window, property, value, length, pendingPtr)
+    Display *display;          /* Display on which to operate. */
+    Window window;             /* Window whose property is to
+                                * be modified. */
+    Atom property;             /* Name of property. */
+    char *value;               /* Characters to append to property. */
+    int length;                        /* Number of bytes to append. */
+    PendingCommand *pendingPtr;        /* Pending command to mark complete
+                                * if an error occurs during the
+                                * property op.  NULL means just
+                                * ignore the error. */
+{
+    Tk_ErrorHandler handler;
+
+    handler = Tk_CreateErrorHandler(display, -1, -1, -1, AppendErrorProc,
+       (ClientData) pendingPtr);
+    XChangeProperty(display, window, property, XA_STRING, 8,
+           PropModeAppend, (unsigned char *) value, length);
+    Tk_DeleteErrorHandler(handler);
+}
+
+/*
+ * The procedure below is invoked if an error occurs during
+ * the XChangeProperty operation above.
+ */
+
+       /* ARGSUSED */
+static int
+AppendErrorProc(clientData, errorPtr)
+    ClientData clientData;     /* Command to mark complete, or NULL. */
+    XErrorEvent *errorPtr;     /* Information about error. */
+{
+    PendingCommand *pendingPtr = (PendingCommand *) clientData;
+    register PendingCommand *pcPtr;
+
+    if (pendingPtr == NULL) {
+       return 0;
+    }
+
+    /*
+     * Make sure this command is still pending.
+     */
+
+    for (pcPtr = pendingCommands; pcPtr != NULL;
+           pcPtr = pcPtr->nextPtr) {
+       if ((pcPtr == pendingPtr) && (pcPtr->result == NULL)) {
+           pcPtr->result = (char *) ckalloc((unsigned)
+                   (strlen(pcPtr->target) + 50));
+           sprintf(pcPtr->result, "no application named \"%s\"",
+                   pcPtr->target);
+           pcPtr->code = TCL_ERROR;
+           pcPtr->gotResponse = 1;
+           break;
+       }
+    }
+    return 0;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * TimeoutProc --
+ *
+ *     This procedure is invoked when an unusually long amout of
+ *     time has elapsed during the processing of a sent command.
+ *     It checks to make sure that the target application still
+ *     exists, and reschedules itself to check again later.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     If the target application has gone away abort the send
+ *     operation with an error.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+TimeoutProc(clientData)
+    ClientData clientData;     /* Information about command that
+                                * has been sent but not yet
+                                * responded to. */
+{
+    PendingCommand *pcPtr = (PendingCommand *) clientData;
+    register PendingCommand *pcPtr2;
+
+    /*
+     * Make sure that the command is still in the pending list
+     * and that it hasn't already completed.  Then validate the
+     * existence of the target application.
+     */
+
+    for (pcPtr2 = pendingCommands; pcPtr2 != NULL;
+           pcPtr2 = pcPtr2->nextPtr) {
+       char *msg;
+       if ((pcPtr2 != pcPtr) || (pcPtr2->result != NULL)) {
+           continue;
+       }
+       if (!ValidateName(pcPtr2->dispPtr, pcPtr2->target,
+               pcPtr2->commWindow, 0)) {
+           if (ValidateName(pcPtr2->dispPtr, pcPtr2->target,
+                   pcPtr2->commWindow, 1)) {
+               msg =
+                    "target application died or uses a Tk version before 4.0";
+           } else {
+               msg = "target application died";
+           }
+           pcPtr2->code = TCL_ERROR;
+           pcPtr2->result = (char *) ckalloc((unsigned) (strlen(msg) + 1));
+           strcpy(pcPtr2->result, msg);
+           pcPtr2->gotResponse = 1;
+       } else {
+           Tcl_DeleteModalTimeout(TimeoutProc, clientData);
+           Tcl_CreateModalTimeout(2000, TimeoutProc, clientData);
+       }
+    }
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * DeleteProc --
+ *
+ *     This procedure is invoked by Tcl when the "send" command
+ *     is deleted in an interpreter.  It unregisters the interpreter.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The interpreter given by riPtr is unregistered.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+DeleteProc(clientData)
+    ClientData clientData;     /* Info about registration, passed
+                                * as ClientData. */
+{
+    RegisteredInterp *riPtr = (RegisteredInterp *) clientData;
+    register RegisteredInterp *riPtr2;
+    NameRegistry *regPtr;
+
+    regPtr = RegOpen(riPtr->interp, riPtr->dispPtr, 1);
+    RegDeleteName(regPtr, riPtr->name);
+    RegClose(regPtr);
+
+    if (registry == riPtr) {
+       registry = riPtr->nextPtr;
+    } else {
+       for (riPtr2 = registry; riPtr2 != NULL;
+               riPtr2 = riPtr2->nextPtr) {
+           if (riPtr2->nextPtr == riPtr) {
+               riPtr2->nextPtr = riPtr->nextPtr;
+               break;
+           }
+       }
+    }
+    ckfree((char *) riPtr->name);
+    riPtr->interp = NULL;
+    UpdateCommWindow(riPtr->dispPtr);
+    Tcl_EventuallyFree((ClientData) riPtr, TCL_DYNAMIC);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * SendRestrictProc --
+ *
+ *     This procedure filters incoming events when a "send" command
+ *     is outstanding.  It defers all events except those containing
+ *     send commands and results.
+ *
+ * Results:
+ *     False is returned except for property-change events on a
+ *     commWindow.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+    /* ARGSUSED */
+static Tk_RestrictAction
+SendRestrictProc(clientData, eventPtr)
+    ClientData clientData;             /* Not used. */
+    register XEvent *eventPtr;         /* Event that just arrived. */
+{
+    TkDisplay *dispPtr;
+
+    if (eventPtr->type != PropertyNotify) {
+       return TK_DEFER_EVENT;
+    }
+    for (dispPtr = tkDisplayList; dispPtr != NULL; dispPtr = dispPtr->nextPtr) {
+       if ((eventPtr->xany.display == dispPtr->display)
+               && (eventPtr->xproperty.window
+               == Tk_WindowId(dispPtr->commTkwin))) {
+           return TK_PROCESS_EVENT;
+       }
+    }
+    return TK_DEFER_EVENT;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * UpdateCommWindow --
+ *
+ *     This procedure updates the list of application names stored
+ *     on our commWindow.  It is typically called when interpreters
+ *     are registered and unregistered.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The TK_APPLICATION property on the comm window is updated.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+UpdateCommWindow(dispPtr)
+    TkDisplay *dispPtr;                /* Display whose commWindow is to be
+                                * updated. */
+{
+    Tcl_DString names;
+    RegisteredInterp *riPtr;
+
+    Tcl_DStringInit(&names);
+    for (riPtr = registry; riPtr != NULL; riPtr = riPtr->nextPtr) {
+       Tcl_DStringAppendElement(&names, riPtr->name);
+    }
+    XChangeProperty(dispPtr->display, Tk_WindowId(dispPtr->commTkwin),
+           dispPtr->appNameProperty, XA_STRING, 8, PropModeReplace,
+           (unsigned char *) Tcl_DStringValue(&names),
+           Tcl_DStringLength(&names));
+    Tcl_DStringFree(&names);
+}
diff --git a/tk/generic/tkStubImg.c b/tk/generic/tkStubImg.c
new file mode 100644 (file)
index 0000000..024e581
--- /dev/null
@@ -0,0 +1,75 @@
+/* 
+ * tkStubImg.c --
+ *
+ *     Stub object that will be statically linked into extensions that wish
+ *     to access Tk.
+ *
+ * Copyright (c) 1999 Jan Nijtmans.
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tcl.h"
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_InitImageArgs --
+ *
+ *     Performs the necessary conversion from Tcl_Obj's to strings
+ *      in the createProc for Tcl_CreateImageType. If running under
+ *      Tk 8.2 or earlier without the Img-patch, this function has
+ *      no effect.
+ *
+ * Results:
+ *     argvPtr will point to an argument list which is guaranteed to
+ *     contain strings, no matter what Tk version is running.
+ *
+ * Side effects:
+ *     None
+ *
+ *----------------------------------------------------------------------
+ */
+
+#ifdef Tk_InitImageArgs
+#undef Tk_InitImageArgs
+#endif
+
+void
+Tk_InitImageArgs(interp, argc, argvPtr)
+    Tcl_Interp *interp;
+    int argc;
+    char ***argvPtr;
+{
+    static useNewImage = -1;
+    static char **argv = NULL;
+
+    if (argv) {
+       tclStubsPtr->tcl_Free((char *) argv);
+       argv = NULL;
+    }
+
+    if (useNewImage < 0) {
+       Tcl_CmdInfo cmdInfo;
+       if (!tclStubsPtr->tcl_GetCommandInfo(interp,"image", &cmdInfo)) {
+           tclStubsPtr->tcl_Panic("cannot find the \"image\" command");
+       }
+       if (cmdInfo.isNativeObjectProc == 1) {
+           useNewImage = 1; /* Tk uses the new image interface */
+       }
+    }
+    if (useNewImage && (argc > 0)) {
+       int i;
+       argv = (char **) tclStubsPtr->tcl_Alloc(argc * sizeof(char *));
+       for (i = 0; i < argc; i++) {
+           argv[i] = tclStubsPtr->tcl_GetString((Tcl_Obj *)(*argvPtr)[i]);
+       }
+       *argvPtr = (char **) argv;
+    }
+}
+
diff --git a/tk/generic/tkStubInit.c b/tk/generic/tkStubInit.c
new file mode 100644 (file)
index 0000000..5dc7b43
--- /dev/null
@@ -0,0 +1,954 @@
+/* 
+ * tkStubInit.c --
+ *
+ *     This file contains the initializers for the Tk stub vectors.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tkInt.h"
+#include "tkPort.h"
+
+#ifdef __WIN32__
+#include "tkWinInt.h"
+#endif
+#ifdef MAC_TCL
+#include "tkMacInt.h"
+#endif
+
+#include "tkDecls.h"
+#include "tkPlatDecls.h"
+#include "tkIntDecls.h"
+#include "tkIntPlatDecls.h"
+#include "tkIntXlibDecls.h"
+
+/*
+ * Remove macros that will interfere with the definitions below.
+ */
+
+#define Tk_CreateCanvasVisitor ((void (*) _ANSI_ARGS_((Tcl_Interp * interp, \
+                       VOID * typePtr))) NULL)
+#define Tk_GetCanvasVisitor ((VOID * (*) _ANSI_ARGS_((Tcl_Interp * interp, \
+                       CONST char * name))) NULL)
+
+/*
+ * WARNING: The contents of this file is automatically generated by the
+ * tools/genStubs.tcl script. Any modifications to the function declarations
+ * below should be made in the generic/tk.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+TkIntStubs tkIntStubs = {
+    TCL_STUB_MAGIC,
+    NULL,
+    TkAllocWindow, /* 0 */
+    TkBezierPoints, /* 1 */
+    TkBezierScreenPoints, /* 2 */
+    TkBindDeadWindow, /* 3 */
+    TkBindEventProc, /* 4 */
+    TkBindFree, /* 5 */
+    TkBindInit, /* 6 */
+    TkChangeEventWindow, /* 7 */
+    TkClipInit, /* 8 */
+    TkComputeAnchor, /* 9 */
+    TkCopyAndGlobalEval, /* 10 */
+    TkCreateBindingProcedure, /* 11 */
+    TkCreateCursorFromData, /* 12 */
+    TkCreateFrame, /* 13 */
+    TkCreateMainWindow, /* 14 */
+    TkCurrentTime, /* 15 */
+    TkDeleteAllImages, /* 16 */
+    TkDoConfigureNotify, /* 17 */
+    TkDrawInsetFocusHighlight, /* 18 */
+    TkEventDeadWindow, /* 19 */
+    TkFillPolygon, /* 20 */
+    TkFindStateNum, /* 21 */
+    TkFindStateString, /* 22 */
+    TkFocusDeadWindow, /* 23 */
+    TkFocusFilterEvent, /* 24 */
+    TkFocusKeyEvent, /* 25 */
+    TkFontPkgInit, /* 26 */
+    TkFontPkgFree, /* 27 */
+    TkFreeBindingTags, /* 28 */
+    TkpFreeCursor, /* 29 */
+    TkGetBitmapData, /* 30 */
+    TkGetButtPoints, /* 31 */
+    TkGetCursorByName, /* 32 */
+    TkGetDefaultScreenName, /* 33 */
+    TkGetDisplay, /* 34 */
+    TkGetDisplayOf, /* 35 */
+    TkGetFocusWin, /* 36 */
+    TkGetInterpNames, /* 37 */
+    TkGetMiterPoints, /* 38 */
+    TkGetPointerCoords, /* 39 */
+    TkGetServerInfo, /* 40 */
+    TkGrabDeadWindow, /* 41 */
+    TkGrabState, /* 42 */
+    TkIncludePoint, /* 43 */
+    TkInOutEvents, /* 44 */
+    TkInstallFrameMenu, /* 45 */
+    TkKeysymToString, /* 46 */
+    TkLineToArea, /* 47 */
+    TkLineToPoint, /* 48 */
+    TkMakeBezierCurve, /* 49 */
+    TkMakeBezierPostscript, /* 50 */
+    TkOptionClassChanged, /* 51 */
+    TkOptionDeadWindow, /* 52 */
+    TkOvalToArea, /* 53 */
+    TkOvalToPoint, /* 54 */
+    TkpChangeFocus, /* 55 */
+    TkpCloseDisplay, /* 56 */
+    TkpClaimFocus, /* 57 */
+    TkpDisplayWarning, /* 58 */
+    TkpGetAppName, /* 59 */
+    TkpGetOtherWindow, /* 60 */
+    TkpGetWrapperWindow, /* 61 */
+    TkpInit, /* 62 */
+    TkpInitializeMenuBindings, /* 63 */
+    TkpMakeContainer, /* 64 */
+    TkpMakeMenuWindow, /* 65 */
+    TkpMakeWindow, /* 66 */
+    TkpMenuNotifyToplevelCreate, /* 67 */
+    TkpOpenDisplay, /* 68 */
+    TkPointerEvent, /* 69 */
+    TkPolygonToArea, /* 70 */
+    TkPolygonToPoint, /* 71 */
+    TkPositionInTree, /* 72 */
+    TkpRedirectKeyEvent, /* 73 */
+    TkpSetMainMenubar, /* 74 */
+    TkpUseWindow, /* 75 */
+    TkpWindowWasRecentlyDeleted, /* 76 */
+    TkQueueEventForAllChildren, /* 77 */
+    TkReadBitmapFile, /* 78 */
+    TkScrollWindow, /* 79 */
+    TkSelDeadWindow, /* 80 */
+    TkSelEventProc, /* 81 */
+    TkSelInit, /* 82 */
+    TkSelPropProc, /* 83 */
+    TkSetClassProcs, /* 84 */
+    TkSetWindowMenuBar, /* 85 */
+    TkStringToKeysym, /* 86 */
+    TkThickPolyLineToArea, /* 87 */
+    TkWmAddToColormapWindows, /* 88 */
+    TkWmDeadWindow, /* 89 */
+    TkWmFocusToplevel, /* 90 */
+    TkWmMapWindow, /* 91 */
+    TkWmNewWindow, /* 92 */
+    TkWmProtocolEventProc, /* 93 */
+    TkWmRemoveFromColormapWindows, /* 94 */
+    TkWmRestackToplevel, /* 95 */
+    TkWmSetClass, /* 96 */
+    TkWmUnmapWindow, /* 97 */
+    TkDebugBitmap, /* 98 */
+    TkDebugBorder, /* 99 */
+    TkDebugCursor, /* 100 */
+    TkDebugColor, /* 101 */
+    TkDebugConfig, /* 102 */
+    TkDebugFont, /* 103 */
+    TkFindStateNumObj, /* 104 */
+    TkGetBitmapPredefTable, /* 105 */
+    TkGetDisplayList, /* 106 */
+    TkGetMainInfoList, /* 107 */
+    TkGetWindowFromObj, /* 108 */
+    TkpGetString, /* 109 */
+    TkpGetSubFonts, /* 110 */
+    TkpGetSystemDefault, /* 111 */
+    TkpMenuThreadInit, /* 112 */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 113 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkClipBox, /* 113 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkClipBox, /* 113 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 114 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkCreateRegion, /* 114 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkCreateRegion, /* 114 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 115 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkDestroyRegion, /* 115 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkDestroyRegion, /* 115 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 116 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkIntersectRegion, /* 116 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkIntersectRegion, /* 116 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 117 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkRectInRegion, /* 117 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkRectInRegion, /* 117 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 118 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkSetRegion, /* 118 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkSetRegion, /* 118 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 119 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkUnionRectWithRegion, /* 119 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkUnionRectWithRegion, /* 119 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 120 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 120 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGenerateActivateEvents, /* 120 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 121 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 121 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpCreateNativeBitmap, /* 121 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 122 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 122 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpDefineNativeBitmaps, /* 122 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 123 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 123 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpGetMS, /* 123 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 124 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 124 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpGetNativeAppBitmap, /* 124 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 125 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 125 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkPointerDeadWindow, /* 125 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 126 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 126 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpSetCapture, /* 126 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 127 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 127 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpSetCursor, /* 127 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 128 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 128 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkpWmSetState, /* 128 */
+#endif /* MAC_TCL */
+    NULL, /* 129 */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 130 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 130 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGetTransientMaster, /* 130 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 131 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 131 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGenerateButtonEvent, /* 131 */
+#endif /* MAC_TCL */
+    NULL, /* 132 */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 133 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 133 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGenWMDestroyEvent, /* 133 */
+#endif /* MAC_TCL */
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    NULL, /* 134 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    NULL, /* 134 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGenWMConfigureEvent, /* 134 */
+#endif /* MAC_TCL */
+    TkpDrawHighlightBorder, /* 135 */
+    TkSetFocusWin, /* 136 */
+    TkpSetKeycodeAndState, /* 137 */
+    TkpGetKeySym, /* 138 */
+    TkpInitKeymapInfo, /* 139 */
+};
+
+TkIntPlatStubs tkIntPlatStubs = {
+    TCL_STUB_MAGIC,
+    NULL,
+#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+    TkCreateXEventSource, /* 0 */
+    TkFreeWindowId, /* 1 */
+    TkInitXId, /* 2 */
+    TkpCmapStressed, /* 3 */
+    TkpSync, /* 4 */
+    TkUnixContainerId, /* 5 */
+    TkUnixDoOneXEvent, /* 6 */
+    TkUnixSetMenubar, /* 7 */
+#endif /* UNIX */
+#ifdef __WIN32__
+    TkAlignImageData, /* 0 */
+    NULL, /* 1 */
+    TkGenerateActivateEvents, /* 2 */
+    TkpGetMS, /* 3 */
+    TkPointerDeadWindow, /* 4 */
+    TkpPrintWindowId, /* 5 */
+    TkpScanWindowId, /* 6 */
+    TkpSetCapture, /* 7 */
+    TkpSetCursor, /* 8 */
+    TkpWmSetState, /* 9 */
+    TkSetPixmapColormap, /* 10 */
+    TkWinCancelMouseTimer, /* 11 */
+    TkWinClipboardRender, /* 12 */
+    TkWinEmbeddedEventProc, /* 13 */
+    TkWinFillRect, /* 14 */
+    TkWinGetBorderPixels, /* 15 */
+    TkWinGetDrawableDC, /* 16 */
+    TkWinGetModifierState, /* 17 */
+    TkWinGetSystemPalette, /* 18 */
+    TkWinGetWrapperWindow, /* 19 */
+    TkWinHandleMenuEvent, /* 20 */
+    TkWinIndexOfColor, /* 21 */
+    TkWinReleaseDrawableDC, /* 22 */
+    TkWinResendEvent, /* 23 */
+    TkWinSelectPalette, /* 24 */
+    TkWinSetMenu, /* 25 */
+    TkWinSetWindowPos, /* 26 */
+    TkWinWmCleanup, /* 27 */
+    TkWinXCleanup, /* 28 */
+    TkWinXInit, /* 29 */
+    TkWinSetForegroundWindow, /* 30 */
+    TkWinDialogDebug, /* 31 */
+    TkWinGetMenuSystemDefault, /* 32 */
+    TkWinGetPlatformId, /* 33 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    TkGenerateActivateEvents, /* 0 */
+    TkpCreateNativeBitmap, /* 1 */
+    TkpDefineNativeBitmaps, /* 2 */
+    TkpGetMS, /* 3 */
+    NULL, /* 4 */
+    TkPointerDeadWindow, /* 5 */
+    TkpSetCapture, /* 6 */
+    TkpSetCursor, /* 7 */
+    TkpWmSetState, /* 8 */
+    NULL, /* 9 */
+    TkAboutDlg, /* 10 */
+    NULL, /* 11 */
+    NULL, /* 12 */
+    TkGetTransientMaster, /* 13 */
+    TkGenerateButtonEvent, /* 14 */
+    NULL, /* 15 */
+    TkGenWMDestroyEvent, /* 16 */
+    TkGenWMConfigureEvent, /* 17 */
+    TkMacButtonKeyState, /* 18 */
+    TkMacClearMenubarActive, /* 19 */
+    TkMacConvertEvent, /* 20 */
+    TkMacDispatchMenuEvent, /* 21 */
+    TkMacInstallCursor, /* 22 */
+    TkMacConvertTkEvent, /* 23 */
+    TkMacHandleTearoffMenu, /* 24 */
+    NULL, /* 25 */
+    TkMacInvalClipRgns, /* 26 */
+    TkMacDoHLEvent, /* 27 */
+    NULL, /* 28 */
+    TkMacGenerateTime, /* 29 */
+    TkMacGetDrawablePort, /* 30 */
+    TkMacGetScrollbarGrowWindow, /* 31 */
+    TkMacGetXWindow, /* 32 */
+    TkMacGrowToplevel, /* 33 */
+    TkMacHandleMenuSelect, /* 34 */
+    TkMacHaveAppearance, /* 35 */
+    TkMacInitAppleEvents, /* 36 */
+    TkMacInitMenus, /* 37 */
+    TkMacInvalidateWindow, /* 38 */
+    TkMacIsCharacterMissing, /* 39 */
+    TkMacMakeRealWindowExist, /* 40 */
+    TkMacMakeStippleMap, /* 41 */
+    TkMacMenuClick, /* 42 */
+    TkMacRegisterOffScreenWindow, /* 43 */
+    TkMacResizable, /* 44 */
+    NULL, /* 45 */
+    TkMacSetHelpMenuItemCount, /* 46 */
+    TkMacSetScrollbarGrow, /* 47 */
+    TkMacSetUpClippingRgn, /* 48 */
+    TkMacSetUpGraphicsPort, /* 49 */
+    TkMacUpdateClipRgn, /* 50 */
+    TkMacUnregisterMacWindow, /* 51 */
+    TkMacUseMenuID, /* 52 */
+    TkMacVisableClipRgn, /* 53 */
+    TkMacWinBounds, /* 54 */
+    TkMacWindowOffset, /* 55 */
+    NULL, /* 56 */
+    TkSetMacColor, /* 57 */
+    TkSetWMName, /* 58 */
+    TkSuspendClipboard, /* 59 */
+    NULL, /* 60 */
+    TkMacZoomToplevel, /* 61 */
+    Tk_TopCoordsToWindow, /* 62 */
+    TkMacContainerId, /* 63 */
+    TkMacGetHostToplevel, /* 64 */
+    TkMacPreprocessMenu, /* 65 */
+#endif /* MAC_TCL */
+};
+
+TkIntXlibStubs tkIntXlibStubs = {
+    TCL_STUB_MAGIC,
+    NULL,
+#ifdef __WIN32__
+    XSetDashes, /* 0 */
+    XGetModifierMapping, /* 1 */
+    XCreateImage, /* 2 */
+    XGetImage, /* 3 */
+    XGetAtomName, /* 4 */
+    XKeysymToString, /* 5 */
+    XCreateColormap, /* 6 */
+    XCreatePixmapCursor, /* 7 */
+    XCreateGlyphCursor, /* 8 */
+    XGContextFromGC, /* 9 */
+    XListHosts, /* 10 */
+    XKeycodeToKeysym, /* 11 */
+    XStringToKeysym, /* 12 */
+    XRootWindow, /* 13 */
+    XSetErrorHandler, /* 14 */
+    XIconifyWindow, /* 15 */
+    XWithdrawWindow, /* 16 */
+    XGetWMColormapWindows, /* 17 */
+    XAllocColor, /* 18 */
+    XBell, /* 19 */
+    XChangeProperty, /* 20 */
+    XChangeWindowAttributes, /* 21 */
+    XClearWindow, /* 22 */
+    XConfigureWindow, /* 23 */
+    XCopyArea, /* 24 */
+    XCopyPlane, /* 25 */
+    XCreateBitmapFromData, /* 26 */
+    XDefineCursor, /* 27 */
+    XDeleteProperty, /* 28 */
+    XDestroyWindow, /* 29 */
+    XDrawArc, /* 30 */
+    XDrawLines, /* 31 */
+    XDrawRectangle, /* 32 */
+    XFillArc, /* 33 */
+    XFillPolygon, /* 34 */
+    XFillRectangles, /* 35 */
+    XForceScreenSaver, /* 36 */
+    XFreeColormap, /* 37 */
+    XFreeColors, /* 38 */
+    XFreeCursor, /* 39 */
+    XFreeModifiermap, /* 40 */
+    XGetGeometry, /* 41 */
+    XGetInputFocus, /* 42 */
+    XGetWindowProperty, /* 43 */
+    XGetWindowAttributes, /* 44 */
+    XGrabKeyboard, /* 45 */
+    XGrabPointer, /* 46 */
+    XKeysymToKeycode, /* 47 */
+    XLookupColor, /* 48 */
+    XMapWindow, /* 49 */
+    XMoveResizeWindow, /* 50 */
+    XMoveWindow, /* 51 */
+    XNextEvent, /* 52 */
+    XPutBackEvent, /* 53 */
+    XQueryColors, /* 54 */
+    XQueryPointer, /* 55 */
+    XQueryTree, /* 56 */
+    XRaiseWindow, /* 57 */
+    XRefreshKeyboardMapping, /* 58 */
+    XResizeWindow, /* 59 */
+    XSelectInput, /* 60 */
+    XSendEvent, /* 61 */
+    XSetCommand, /* 62 */
+    XSetIconName, /* 63 */
+    XSetInputFocus, /* 64 */
+    XSetSelectionOwner, /* 65 */
+    XSetWindowBackground, /* 66 */
+    XSetWindowBackgroundPixmap, /* 67 */
+    XSetWindowBorder, /* 68 */
+    XSetWindowBorderPixmap, /* 69 */
+    XSetWindowBorderWidth, /* 70 */
+    XSetWindowColormap, /* 71 */
+    XTranslateCoordinates, /* 72 */
+    XUngrabKeyboard, /* 73 */
+    XUngrabPointer, /* 74 */
+    XUnmapWindow, /* 75 */
+    XWindowEvent, /* 76 */
+    XDestroyIC, /* 77 */
+    XFilterEvent, /* 78 */
+    XmbLookupString, /* 79 */
+    TkPutImage, /* 80 */
+    NULL, /* 81 */
+    XParseColor, /* 82 */
+    XCreateGC, /* 83 */
+    XFreeGC, /* 84 */
+    XInternAtom, /* 85 */
+    XSetBackground, /* 86 */
+    XSetForeground, /* 87 */
+    XSetClipMask, /* 88 */
+    XSetClipOrigin, /* 89 */
+    XSetTSOrigin, /* 90 */
+    XChangeGC, /* 91 */
+    XSetFont, /* 92 */
+    XSetArcMode, /* 93 */
+    XSetStipple, /* 94 */
+    XSetFillRule, /* 95 */
+    XSetFillStyle, /* 96 */
+    XSetFunction, /* 97 */
+    XSetLineAttributes, /* 98 */
+    _XInitImageFuncPtrs, /* 99 */
+    XCreateIC, /* 100 */
+    XGetVisualInfo, /* 101 */
+    XSetWMClientMachine, /* 102 */
+    XStringListToTextProperty, /* 103 */
+    XDrawLine, /* 104 */
+    XWarpPointer, /* 105 */
+    XFillRectangle, /* 106 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    XSetDashes, /* 0 */
+    XGetModifierMapping, /* 1 */
+    XCreateImage, /* 2 */
+    XGetImage, /* 3 */
+    XGetAtomName, /* 4 */
+    XKeysymToString, /* 5 */
+    XCreateColormap, /* 6 */
+    XGContextFromGC, /* 7 */
+    XKeycodeToKeysym, /* 8 */
+    XStringToKeysym, /* 9 */
+    XRootWindow, /* 10 */
+    XSetErrorHandler, /* 11 */
+    XAllocColor, /* 12 */
+    XBell, /* 13 */
+    XChangeProperty, /* 14 */
+    XChangeWindowAttributes, /* 15 */
+    XConfigureWindow, /* 16 */
+    XCopyArea, /* 17 */
+    XCopyPlane, /* 18 */
+    XCreateBitmapFromData, /* 19 */
+    XDefineCursor, /* 20 */
+    XDestroyWindow, /* 21 */
+    XDrawArc, /* 22 */
+    XDrawLines, /* 23 */
+    XDrawRectangle, /* 24 */
+    XFillArc, /* 25 */
+    XFillPolygon, /* 26 */
+    XFillRectangles, /* 27 */
+    XFreeColormap, /* 28 */
+    XFreeColors, /* 29 */
+    XFreeModifiermap, /* 30 */
+    XGetGeometry, /* 31 */
+    XGetWindowProperty, /* 32 */
+    XGrabKeyboard, /* 33 */
+    XGrabPointer, /* 34 */
+    XKeysymToKeycode, /* 35 */
+    XMapWindow, /* 36 */
+    XMoveResizeWindow, /* 37 */
+    XMoveWindow, /* 38 */
+    XQueryPointer, /* 39 */
+    XRaiseWindow, /* 40 */
+    XRefreshKeyboardMapping, /* 41 */
+    XResizeWindow, /* 42 */
+    XSelectInput, /* 43 */
+    XSendEvent, /* 44 */
+    XSetIconName, /* 45 */
+    XSetInputFocus, /* 46 */
+    XSetSelectionOwner, /* 47 */
+    XSetWindowBackground, /* 48 */
+    XSetWindowBackgroundPixmap, /* 49 */
+    XSetWindowBorder, /* 50 */
+    XSetWindowBorderPixmap, /* 51 */
+    XSetWindowBorderWidth, /* 52 */
+    XSetWindowColormap, /* 53 */
+    XUngrabKeyboard, /* 54 */
+    XUngrabPointer, /* 55 */
+    XUnmapWindow, /* 56 */
+    TkPutImage, /* 57 */
+    XParseColor, /* 58 */
+    XCreateGC, /* 59 */
+    XFreeGC, /* 60 */
+    XInternAtom, /* 61 */
+    XSetBackground, /* 62 */
+    XSetForeground, /* 63 */
+    XSetClipMask, /* 64 */
+    XSetClipOrigin, /* 65 */
+    XSetTSOrigin, /* 66 */
+    XChangeGC, /* 67 */
+    XSetFont, /* 68 */
+    XSetArcMode, /* 69 */
+    XSetStipple, /* 70 */
+    XSetFillRule, /* 71 */
+    XSetFillStyle, /* 72 */
+    XSetFunction, /* 73 */
+    XSetLineAttributes, /* 74 */
+    _XInitImageFuncPtrs, /* 75 */
+    XCreateIC, /* 76 */
+    XGetVisualInfo, /* 77 */
+    XSetWMClientMachine, /* 78 */
+    XStringListToTextProperty, /* 79 */
+    XDrawSegments, /* 80 */
+    XForceScreenSaver, /* 81 */
+    XDrawLine, /* 82 */
+    XFillRectangle, /* 83 */
+    XClearWindow, /* 84 */
+    XDrawPoint, /* 85 */
+    XDrawPoints, /* 86 */
+    XWarpPointer, /* 87 */
+    XQueryColor, /* 88 */
+    XQueryColors, /* 89 */
+#endif /* MAC_TCL */
+};
+
+TkPlatStubs tkPlatStubs = {
+    TCL_STUB_MAGIC,
+    NULL,
+#ifdef __WIN32__
+    Tk_AttachHWND, /* 0 */
+    Tk_GetHINSTANCE, /* 1 */
+    Tk_GetHWND, /* 2 */
+    Tk_HWNDToWindow, /* 3 */
+    Tk_PointerEvent, /* 4 */
+    Tk_TranslateWinEvent, /* 5 */
+#endif /* __WIN32__ */
+#ifdef MAC_TCL
+    Tk_MacSetEmbedHandler, /* 0 */
+    Tk_MacTurnOffMenus, /* 1 */
+    Tk_MacTkOwnsCursor, /* 2 */
+    TkMacInitMenus, /* 3 */
+    TkMacInitAppleEvents, /* 4 */
+    TkMacConvertEvent, /* 5 */
+    TkMacConvertTkEvent, /* 6 */
+    TkGenWMConfigureEvent, /* 7 */
+    TkMacInvalClipRgns, /* 8 */
+    TkMacHaveAppearance, /* 9 */
+    TkMacGetDrawablePort, /* 10 */
+#endif /* MAC_TCL */
+};
+
+static TkStubHooks tkStubHooks = {
+    &tkPlatStubs,
+    &tkIntStubs,
+    &tkIntPlatStubs,
+    &tkIntXlibStubs
+};
+
+TkStubs tkStubs = {
+    TCL_STUB_MAGIC,
+    &tkStubHooks,
+    Tk_MainLoop, /* 0 */
+    Tk_3DBorderColor, /* 1 */
+    Tk_3DBorderGC, /* 2 */
+    Tk_3DHorizontalBevel, /* 3 */
+    Tk_3DVerticalBevel, /* 4 */
+    Tk_AddOption, /* 5 */
+    Tk_BindEvent, /* 6 */
+    Tk_CanvasDrawableCoords, /* 7 */
+    Tk_CanvasEventuallyRedraw, /* 8 */
+    Tk_CanvasGetCoord, /* 9 */
+    Tk_CanvasGetTextInfo, /* 10 */
+    Tk_CanvasPsBitmap, /* 11 */
+    Tk_CanvasPsColor, /* 12 */
+    Tk_CanvasPsFont, /* 13 */
+    Tk_CanvasPsPath, /* 14 */
+    Tk_CanvasPsStipple, /* 15 */
+    Tk_CanvasPsY, /* 16 */
+    Tk_CanvasSetStippleOrigin, /* 17 */
+    Tk_CanvasTagsParseProc, /* 18 */
+    Tk_CanvasTagsPrintProc, /* 19 */
+    Tk_CanvasTkwin, /* 20 */
+    Tk_CanvasWindowCoords, /* 21 */
+    Tk_ChangeWindowAttributes, /* 22 */
+    Tk_CharBbox, /* 23 */
+    Tk_ClearSelection, /* 24 */
+    Tk_ClipboardAppend, /* 25 */
+    Tk_ClipboardClear, /* 26 */
+    Tk_ConfigureInfo, /* 27 */
+    Tk_ConfigureValue, /* 28 */
+    Tk_ConfigureWidget, /* 29 */
+    Tk_ConfigureWindow, /* 30 */
+    Tk_ComputeTextLayout, /* 31 */
+    Tk_CoordsToWindow, /* 32 */
+    Tk_CreateBinding, /* 33 */
+    Tk_CreateBindingTable, /* 34 */
+    Tk_CreateErrorHandler, /* 35 */
+    Tk_CreateEventHandler, /* 36 */
+    Tk_CreateGenericHandler, /* 37 */
+    Tk_CreateImageType, /* 38 */
+    Tk_CreateItemType, /* 39 */
+    Tk_CreatePhotoImageFormat, /* 40 */
+    Tk_CreateSelHandler, /* 41 */
+    Tk_CreateWindow, /* 42 */
+    Tk_CreateWindowFromPath, /* 43 */
+    Tk_DefineBitmap, /* 44 */
+    Tk_DefineCursor, /* 45 */
+    Tk_DeleteAllBindings, /* 46 */
+    Tk_DeleteBinding, /* 47 */
+    Tk_DeleteBindingTable, /* 48 */
+    Tk_DeleteErrorHandler, /* 49 */
+    Tk_DeleteEventHandler, /* 50 */
+    Tk_DeleteGenericHandler, /* 51 */
+    Tk_DeleteImage, /* 52 */
+    Tk_DeleteSelHandler, /* 53 */
+    Tk_DestroyWindow, /* 54 */
+    Tk_DisplayName, /* 55 */
+    Tk_DistanceToTextLayout, /* 56 */
+    Tk_Draw3DPolygon, /* 57 */
+    Tk_Draw3DRectangle, /* 58 */
+    Tk_DrawChars, /* 59 */
+    Tk_DrawFocusHighlight, /* 60 */
+    Tk_DrawTextLayout, /* 61 */
+    Tk_Fill3DPolygon, /* 62 */
+    Tk_Fill3DRectangle, /* 63 */
+    Tk_FindPhoto, /* 64 */
+    Tk_FontId, /* 65 */
+    Tk_Free3DBorder, /* 66 */
+    Tk_FreeBitmap, /* 67 */
+    Tk_FreeColor, /* 68 */
+    Tk_FreeColormap, /* 69 */
+    Tk_FreeCursor, /* 70 */
+    Tk_FreeFont, /* 71 */
+    Tk_FreeGC, /* 72 */
+    Tk_FreeImage, /* 73 */
+    Tk_FreeOptions, /* 74 */
+    Tk_FreePixmap, /* 75 */
+    Tk_FreeTextLayout, /* 76 */
+    Tk_FreeXId, /* 77 */
+    Tk_GCForColor, /* 78 */
+    Tk_GeometryRequest, /* 79 */
+    Tk_Get3DBorder, /* 80 */
+    Tk_GetAllBindings, /* 81 */
+    Tk_GetAnchor, /* 82 */
+    Tk_GetAtomName, /* 83 */
+    Tk_GetBinding, /* 84 */
+    Tk_GetBitmap, /* 85 */
+    Tk_GetBitmapFromData, /* 86 */
+    Tk_GetCapStyle, /* 87 */
+    Tk_GetColor, /* 88 */
+    Tk_GetColorByValue, /* 89 */
+    Tk_GetColormap, /* 90 */
+    Tk_GetCursor, /* 91 */
+    Tk_GetCursorFromData, /* 92 */
+    Tk_GetFont, /* 93 */
+    Tk_GetFontFromObj, /* 94 */
+    Tk_GetFontMetrics, /* 95 */
+    Tk_GetGC, /* 96 */
+    Tk_GetImage, /* 97 */
+    Tk_GetImageMasterData, /* 98 */
+    Tk_GetItemTypes, /* 99 */
+    Tk_GetJoinStyle, /* 100 */
+    Tk_GetJustify, /* 101 */
+    Tk_GetNumMainWindows, /* 102 */
+    Tk_GetOption, /* 103 */
+    Tk_GetPixels, /* 104 */
+    Tk_GetPixmap, /* 105 */
+    Tk_GetRelief, /* 106 */
+    Tk_GetRootCoords, /* 107 */
+    Tk_GetScrollInfo, /* 108 */
+    Tk_GetScreenMM, /* 109 */
+    Tk_GetSelection, /* 110 */
+    Tk_GetUid, /* 111 */
+    Tk_GetVisual, /* 112 */
+    Tk_GetVRootGeometry, /* 113 */
+    Tk_Grab, /* 114 */
+    Tk_HandleEvent, /* 115 */
+    Tk_IdToWindow, /* 116 */
+    Tk_ImageChanged, /* 117 */
+    Tk_Init, /* 118 */
+    Tk_InternAtom, /* 119 */
+    Tk_IntersectTextLayout, /* 120 */
+    Tk_MaintainGeometry, /* 121 */
+    Tk_MainWindow, /* 122 */
+    Tk_MakeWindowExist, /* 123 */
+    Tk_ManageGeometry, /* 124 */
+    Tk_MapWindow, /* 125 */
+    Tk_MeasureChars, /* 126 */
+    Tk_MoveResizeWindow, /* 127 */
+    Tk_MoveWindow, /* 128 */
+    Tk_MoveToplevelWindow, /* 129 */
+    Tk_NameOf3DBorder, /* 130 */
+    Tk_NameOfAnchor, /* 131 */
+    Tk_NameOfBitmap, /* 132 */
+    Tk_NameOfCapStyle, /* 133 */
+    Tk_NameOfColor, /* 134 */
+    Tk_NameOfCursor, /* 135 */
+    Tk_NameOfFont, /* 136 */
+    Tk_NameOfImage, /* 137 */
+    Tk_NameOfJoinStyle, /* 138 */
+    Tk_NameOfJustify, /* 139 */
+    Tk_NameOfRelief, /* 140 */
+    Tk_NameToWindow, /* 141 */
+    Tk_OwnSelection, /* 142 */
+    Tk_ParseArgv, /* 143 */
+    Tk_PhotoPutBlock, /* 144 */
+    Tk_PhotoPutZoomedBlock, /* 145 */
+    Tk_PhotoGetImage, /* 146 */
+    Tk_PhotoBlank, /* 147 */
+    Tk_PhotoExpand, /* 148 */
+    Tk_PhotoGetSize, /* 149 */
+    Tk_PhotoSetSize, /* 150 */
+    Tk_PointToChar, /* 151 */
+    Tk_PostscriptFontName, /* 152 */
+    Tk_PreserveColormap, /* 153 */
+    Tk_QueueWindowEvent, /* 154 */
+    Tk_RedrawImage, /* 155 */
+    Tk_ResizeWindow, /* 156 */
+    Tk_RestackWindow, /* 157 */
+    Tk_RestrictEvents, /* 158 */
+    Tk_SafeInit, /* 159 */
+    Tk_SetAppName, /* 160 */
+    Tk_SetBackgroundFromBorder, /* 161 */
+    Tk_SetClass, /* 162 */
+    Tk_SetGrid, /* 163 */
+    Tk_SetInternalBorder, /* 164 */
+    Tk_SetWindowBackground, /* 165 */
+    Tk_SetWindowBackgroundPixmap, /* 166 */
+    Tk_SetWindowBorder, /* 167 */
+    Tk_SetWindowBorderWidth, /* 168 */
+    Tk_SetWindowBorderPixmap, /* 169 */
+    Tk_SetWindowColormap, /* 170 */
+    Tk_SetWindowVisual, /* 171 */
+    Tk_SizeOfBitmap, /* 172 */
+    Tk_SizeOfImage, /* 173 */
+    Tk_StrictMotif, /* 174 */
+    Tk_TextLayoutToPostscript, /* 175 */
+    Tk_TextWidth, /* 176 */
+    Tk_UndefineCursor, /* 177 */
+    Tk_UnderlineChars, /* 178 */
+    Tk_UnderlineTextLayout, /* 179 */
+    Tk_Ungrab, /* 180 */
+    Tk_UnmaintainGeometry, /* 181 */
+    Tk_UnmapWindow, /* 182 */
+    Tk_UnsetGrid, /* 183 */
+    Tk_UpdatePointer, /* 184 */
+    Tk_AllocBitmapFromObj, /* 185 */
+    Tk_Alloc3DBorderFromObj, /* 186 */
+    Tk_AllocColorFromObj, /* 187 */
+    Tk_AllocCursorFromObj, /* 188 */
+    Tk_AllocFontFromObj, /* 189 */
+    Tk_CreateOptionTable, /* 190 */
+    Tk_DeleteOptionTable, /* 191 */
+    Tk_Free3DBorderFromObj, /* 192 */
+    Tk_FreeBitmapFromObj, /* 193 */
+    Tk_FreeColorFromObj, /* 194 */
+    Tk_FreeConfigOptions, /* 195 */
+    Tk_FreeSavedOptions, /* 196 */
+    Tk_FreeCursorFromObj, /* 197 */
+    Tk_FreeFontFromObj, /* 198 */
+    Tk_Get3DBorderFromObj, /* 199 */
+    Tk_GetAnchorFromObj, /* 200 */
+    Tk_GetBitmapFromObj, /* 201 */
+    Tk_GetColorFromObj, /* 202 */
+    Tk_GetCursorFromObj, /* 203 */
+    Tk_GetOptionInfo, /* 204 */
+    Tk_GetOptionValue, /* 205 */
+    Tk_GetJustifyFromObj, /* 206 */
+    Tk_GetMMFromObj, /* 207 */
+    Tk_GetPixelsFromObj, /* 208 */
+    Tk_GetReliefFromObj, /* 209 */
+    Tk_GetScrollInfoObj, /* 210 */
+    Tk_InitOptions, /* 211 */
+    Tk_MainEx, /* 212 */
+    Tk_RestoreSavedOptions, /* 213 */
+    Tk_SetOptions, /* 214 */
+    Tk_InitConsoleChannels, /* 215 */
+    Tk_CreateConsoleWindow, /* 216 */
+    Tk_CreateSmoothMethod, /* 217 */
+    NULL, /* 218 */
+    NULL, /* 219 */
+    Tk_GetDash, /* 220 */
+    Tk_CreateOutline, /* 221 */
+    Tk_DeleteOutline, /* 222 */
+    Tk_ConfigOutlineGC, /* 223 */
+    Tk_ChangeOutlineGC, /* 224 */
+    Tk_ResetOutlineGC, /* 225 */
+    Tk_CanvasPsOutline, /* 226 */
+    Tk_SetTSOrigin, /* 227 */
+    Tk_CanvasGetCoordFromObj, /* 228 */
+    Tk_CanvasSetOffset, /* 229 */
+    Tk_DitherPhoto, /* 230 */
+    Tk_PostscriptBitmap, /* 231 */
+    Tk_PostscriptColor, /* 232 */
+    Tk_PostscriptFont, /* 233 */
+    Tk_PostscriptImage, /* 234 */
+    Tk_PostscriptPath, /* 235 */
+    Tk_PostscriptStipple, /* 236 */
+    Tk_PostscriptY, /* 237 */
+    Tk_PostscriptPhoto, /* 238 */
+};
+
+/* !END!: Do not edit above this line. */
diff --git a/tk/generic/tkStubLib.c b/tk/generic/tkStubLib.c
new file mode 100644 (file)
index 0000000..7a9e7bd
--- /dev/null
@@ -0,0 +1,110 @@
+/* 
+ * tkStubLib.c --
+ *
+ *     Stub object that will be statically linked into extensions that wish
+ *     to access Tk.
+ *
+ * Copyright (c) 1998 Paul Duffin.
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+/*
+ * We need to ensure that we use the stub macros so that this file contains
+ * no references to any of the stub functions.  This will make it possible
+ * to build an extension that references Tk_InitStubs but doesn't end up
+ * including the rest of the stub functions.
+ */
+
+
+#ifndef USE_TCL_STUBS
+#define USE_TCL_STUBS
+#endif
+#undef USE_TCL_STUB_PROCS
+
+#ifndef USE_TK_STUBS
+#define USE_TK_STUBS
+#endif
+#undef USE_TK_STUB_PROCS
+
+#include "tkPort.h"
+#include "tkInt.h"
+
+#ifdef __WIN32__
+#include "tkWinInt.h"
+#endif
+#ifdef MAC_TCL
+#include "tkMacInt.h"
+#endif
+
+#include "tkDecls.h"
+#include "tkIntDecls.h"
+#include "tkPlatDecls.h"
+#include "tkIntPlatDecls.h"
+#include "tkIntXlibDecls.h"
+
+/*
+ * Ensure that Tk_InitStubs is built as an exported symbol.  The other stub
+ * functions should be built as non-exported symbols.
+ */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+
+TkStubs *tkStubsPtr;
+TkPlatStubs *tkPlatStubsPtr;
+TkIntStubs *tkIntStubsPtr;
+TkIntPlatStubs *tkIntPlatStubsPtr;
+TkIntXlibStubs *tkIntXlibStubsPtr;
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_InitStubs --
+ *
+ *     Checks that the correct version of Tk is loaded and that it
+ *     supports stubs. It then initialises the stub table pointers.
+ *
+ * Results:
+ *     The actual version of Tk that satisfies the request, or
+ *     NULL to indicate that an error occurred.
+ *
+ * Side effects:
+ *     Sets the stub table pointers.
+ *
+ *----------------------------------------------------------------------
+ */
+
+char *
+Tk_InitStubs(interp, version, exact)
+    Tcl_Interp *interp;
+    char *version;
+    int exact;
+{
+    char *actualVersion;
+
+    actualVersion = Tcl_PkgRequireEx(interp, "Tk", version, exact,
+               (ClientData *) &tkStubsPtr);
+    if (!actualVersion) {
+       return NULL;
+    }
+
+    if (!tkStubsPtr) {
+       Tcl_SetResult(interp,
+               "This implementation of Tk does not support stubs",
+               TCL_STATIC);
+       return NULL;
+    }
+    
+    tkPlatStubsPtr = tkStubsPtr->hooks->tkPlatStubs;
+    tkIntStubsPtr = tkStubsPtr->hooks->tkIntStubs;
+    tkIntPlatStubsPtr = tkStubsPtr->hooks->tkIntPlatStubs;
+    tkIntXlibStubsPtr = tkStubsPtr->hooks->tkIntXlibStubs;
+    
+    return actualVersion;
+}
diff --git a/tk/generic/tkXId.c b/tk/generic/tkXId.c
new file mode 100644 (file)
index 0000000..8cf397d
--- /dev/null
@@ -0,0 +1,495 @@
+/* 
+ * tkXId.c --
+ *
+ *     This file provides a replacement function for the default X
+ *     resource allocator (_XAllocID).  The problem with the default
+ *     allocator is that it never re-uses ids, which causes long-lived
+ *     applications to crash when X resource identifiers wrap around.
+ *     The replacement functions in this file re-use old identifiers
+ *     to prevent this problem.
+ *
+ *     The code in this file is based on similar implementations by
+ *     George C. Kaplan and Michael Hoegeman.
+ *
+ * Copyright (c) 1993 The Regents of the University of California.
+ * Copyright (c) 1994-1995 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) tkXId.c 1.16 96/02/28 21:56:40
+ */
+
+/*
+ * The definition below is needed on some systems so that we can access
+ * the resource_alloc field of Display structures in order to replace
+ * the resource allocator.
+ */
+
+#define XLIB_ILLEGAL_ACCESS 1
+
+#include "tkInt.h"
+#include "tkPort.h"
+
+/*
+ * A structure of the following type is used to hold one or more
+ * available resource identifiers.  There is a list of these structures
+ * for each display.
+ */
+
+#define IDS_PER_STACK 10
+typedef struct TkIdStack {
+    XID ids[IDS_PER_STACK];            /* Array of free identifiers. */
+    int numUsed;                       /* Indicates how many of the entries
+                                        * in ids are currently in use. */
+    TkDisplay *dispPtr;                        /* Display to which ids belong. */
+    struct TkIdStack *nextPtr;         /* Next bunch of free identifiers
+                                        * for the same display. */
+} TkIdStack;
+
+/*
+ * Forward declarations for procedures defined in this file:
+ */
+
+static XID             AllocXId _ANSI_ARGS_((Display *display));
+static Tk_RestrictAction CheckRestrictProc _ANSI_ARGS_((
+                           ClientData clientData, XEvent *eventPtr));
+static void            WindowIdCleanup _ANSI_ARGS_((ClientData clientData));
+static void            WindowIdCleanup2 _ANSI_ARGS_((ClientData clientData));
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkInitXId --
+ *
+ *     This procedure is called to initialize the id allocator for
+ *     a given display.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The official allocator for the display is set up to be Tk_AllocXID.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TkInitXId(dispPtr)
+    TkDisplay *dispPtr;                        /* Tk's information about the
+                                        * display. */
+{
+    dispPtr->idStackPtr = NULL;
+    dispPtr->defaultAllocProc = dispPtr->display->resource_alloc;
+    dispPtr->display->resource_alloc = AllocXId;
+    dispPtr->windowStackPtr = NULL;
+    dispPtr->idCleanupScheduled = 0;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * AllocXId --
+ *
+ *     This procedure is invoked by Xlib as the resource allocator
+ *     for a display.
+ *
+ * Results:
+ *     The return value is an X resource identifier that isn't currently
+ *     in use.
+ *
+ * Side effects:
+ *     The identifier is removed from the stack of free identifiers,
+ *     if it was previously on the stack.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static XID
+AllocXId(display)
+    Display *display;                  /* Display for which to allocate. */
+{
+    TkDisplay *dispPtr;
+    TkIdStack *stackPtr;
+
+    /*
+     * Find Tk's information about the display.
+     */
+
+    dispPtr = TkGetDisplay(display);
+    
+    /*
+     * If the topmost chunk on the stack is empty then free it.  Then
+     * check for a free id on the stack and return it if it exists.
+     */
+
+    stackPtr = dispPtr->idStackPtr;
+    if (stackPtr != NULL) {
+       while (stackPtr->numUsed == 0) {
+           dispPtr->idStackPtr = stackPtr->nextPtr;
+           ckfree((char *) stackPtr);
+           stackPtr = dispPtr->idStackPtr;
+           if (stackPtr == NULL) {
+               goto defAlloc;
+           }
+       }
+       stackPtr->numUsed--;
+       return stackPtr->ids[stackPtr->numUsed];
+    }
+
+    /*
+     * No free ids in the stack:  just get one from the default
+     * allocator.
+     */
+
+    defAlloc:
+    return (*dispPtr->defaultAllocProc)(display);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_FreeXId --
+ *
+ *     This procedure is called to indicate that an X resource identifier
+ *     is now free.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The identifier is added to the stack of free identifiers for its
+ *     display, so that it can be re-used.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tk_FreeXId(display, xid)
+    Display *display;                  /* Display for which xid was
+                                        * allocated. */
+    XID xid;                           /* Identifier that is no longer
+                                        * in use. */
+{
+    TkDisplay *dispPtr;
+    TkIdStack *stackPtr;
+
+    /*
+     * Find Tk's information about the display.
+     */
+
+    dispPtr = TkGetDisplay(display);
+
+    /*
+     * Add a new chunk to the stack if the current chunk is full.
+     */
+    
+    stackPtr = dispPtr->idStackPtr;
+    if ((stackPtr == NULL) || (stackPtr->numUsed >= IDS_PER_STACK)) {
+       stackPtr = (TkIdStack *) ckalloc(sizeof(TkIdStack));
+       stackPtr->numUsed = 0;
+       stackPtr->dispPtr = dispPtr;
+       stackPtr->nextPtr = dispPtr->idStackPtr;
+       dispPtr->idStackPtr = stackPtr;
+    }
+
+    /*
+     * Add the id to the current chunk.
+     */
+
+    stackPtr->ids[stackPtr->numUsed] = xid;
+    stackPtr->numUsed++;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkFreeWindowId --
+ *
+ *     This procedure is invoked instead of TkFreeXId for window ids.
+ *     See below for the reason why.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The id given by w will eventually be freed, so that it can be
+ *     reused for other resources.
+ *
+ * Design:
+ *     Freeing window ids is very tricky because there could still be
+ *     events pending for a window in the event queue (or even in the
+ *     server) at the time the window is destroyed.  If the window
+ *     id were to get reused immediately for another window, old
+ *     events could "drop in" on the new window, causing unexpected
+ *     behavior.
+ *
+ *     Thus we have to wait to re-use a window id until we know that
+ *     there are no events left for it.  Right now this is done in
+ *     two steps.  First, we wait until we know that the server
+ *     has seen the XDestroyWindow request, so we can be sure that
+ *     it won't generate more events for the window and that any
+ *     existing events are in our queue.  Second, we make sure that
+ *     there are no events whatsoever in our queue (this is conservative
+ *     but safe).
+ *
+ *     The first step is done by remembering the request id of the
+ *     XDestroyWindow request and using LastKnownRequestProcessed to
+ *     see what events the server has processed.  If multiple windows
+ *     get destroyed at about the same time, we just remember the
+ *     most recent request number for any of them (again, conservative
+ *     but safe).
+ *
+ *     There are a few other complications as well.  When Tk destroys a
+ *     sub-tree of windows, it only issues a single XDestroyWindow call,
+ *     at the very end for the root of the subtree.  We can't free any of
+ *     the window ids until the final XDestroyWindow call.  To make sure
+ *     that this happens, we have to keep track of deletions in progress,
+ *     hence the need for the "destroyCount" field of the display.
+ *
+ *     One final problem.  Some servers, like Sun X11/News servers still
+ *     seem to have problems with ids getting reused too quickly.  I'm
+ *     not completely sure why this is a problem, but delaying the
+ *     recycling of ids appears to eliminate it.  Therefore, we wait
+ *     an additional few seconds, even after "the coast is clear"
+ *     before reusing the ids.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TkFreeWindowId(dispPtr, w)
+    TkDisplay *dispPtr;                /* Display that w belongs to. */
+    Window w;                  /* X identifier for window on dispPtr. */
+{
+    TkIdStack *stackPtr;
+
+    /*
+     * Put the window id on a separate stack of window ids, rather
+     * than the main stack, so it won't get reused right away.  Add
+     * a new chunk to the stack if the current chunk is full.
+     */
+
+    stackPtr = dispPtr->windowStackPtr;
+    if ((stackPtr == NULL) || (stackPtr->numUsed >= IDS_PER_STACK)) {
+       stackPtr = (TkIdStack *) ckalloc(sizeof(TkIdStack));
+       stackPtr->numUsed = 0;
+       stackPtr->dispPtr = dispPtr;
+       stackPtr->nextPtr = dispPtr->windowStackPtr;
+       dispPtr->windowStackPtr = stackPtr;
+    }
+
+    /*
+     * Add the id to the current chunk.
+     */
+
+    stackPtr->ids[stackPtr->numUsed] = w;
+    stackPtr->numUsed++;
+
+    /*
+     * Schedule a call to WindowIdCleanup if one isn't already
+     * scheduled.
+     */
+
+    if (!dispPtr->idCleanupScheduled) {
+       dispPtr->idCleanupScheduled = 1;
+       Tcl_CreateTimerHandler(100, WindowIdCleanup, (ClientData *) dispPtr);
+    }
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * WindowIdCleanup --
+ *
+ *     See if we can now free up all the accumulated ids of
+ *     deleted windows.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     If it's safe to move the window ids back to the main free
+ *     list, we schedule this to happen after a few mores seconds
+ *     of delay.  If it's not safe to move them yet, a timer handler
+ *     gets invoked to try again later.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+WindowIdCleanup(clientData)
+    ClientData clientData;     /* Pointer to TkDisplay for display */
+{
+    TkDisplay *dispPtr = (TkDisplay *) clientData;
+    int anyEvents, delta;
+    Tk_RestrictProc *oldProc;
+    ClientData oldData;
+
+    dispPtr->idCleanupScheduled = 0;
+
+    /*
+     * See if it's safe to recycle the window ids.  It's safe if:
+     * (a) no deletions are in progress.
+     * (b) the server has seen all of the requests up to the last
+     *     XDestroyWindow request.
+     * (c) there are no events in the event queue; the only way to
+     *     test for this right now is to create a restrict proc that
+     *     will filter the events, then call Tcl_DoOneEvent to see if
+     *    the procedure gets invoked.
+     */
+
+    if (dispPtr->destroyCount > 0) {
+       goto tryAgain;
+    }
+    delta = LastKnownRequestProcessed(dispPtr->display)
+           - dispPtr->lastDestroyRequest;
+    if (delta < 0) {
+       XSync(dispPtr->display, False);
+    }
+    anyEvents = 0;
+    oldProc = Tk_RestrictEvents(CheckRestrictProc, (ClientData) &anyEvents,
+           &oldData);
+    Tcl_DoOneEvent(TCL_DONT_WAIT|TCL_WINDOW_EVENTS);
+    Tk_RestrictEvents(oldProc, oldData, &oldData);
+    if (anyEvents) {
+       goto tryAgain;
+    }
+
+    /*
+     * These ids look safe to recycle, but we still need to delay a bit
+     * more (see comments for TkFreeWindowId).  Schedule the final freeing.
+     */
+
+    if (dispPtr->windowStackPtr != NULL) {
+       Tcl_CreateTimerHandler(5000, WindowIdCleanup2,
+               (ClientData) dispPtr->windowStackPtr);
+       dispPtr->windowStackPtr = NULL;
+    }
+    return;
+
+    /*
+     * It's still not safe to free up the ids.  Try again a bit later.
+     */
+
+    tryAgain:
+    dispPtr->idCleanupScheduled = 1;
+    Tcl_CreateTimerHandler(500, WindowIdCleanup, (ClientData *) dispPtr);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * WindowIdCleanup2 --
+ *
+ *     This procedure is the last one in the chain that recycles
+ *     window ids.  It takes all of the ids indicated by its
+ *     argument and adds them back to the main id free list.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Window ids get added to the main free list for their display.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+WindowIdCleanup2(clientData)
+    ClientData clientData;     /* Pointer to TkIdStack list. */
+{
+    TkIdStack *stackPtr = (TkIdStack *) clientData;
+    TkIdStack *lastPtr;
+
+    lastPtr = stackPtr;
+    while (lastPtr->nextPtr != NULL) {
+       lastPtr = lastPtr->nextPtr;
+    }
+    lastPtr->nextPtr = stackPtr->dispPtr->idStackPtr;
+    stackPtr->dispPtr->idStackPtr = stackPtr;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * CheckRestrictProc --
+ *
+ *     This procedure is a restrict procedure, called by Tcl_DoOneEvent
+ *     to filter X events.  All it does is to set a flag to indicate
+ *     that there are X events present.
+ *
+ * Results:
+ *     Sets the integer pointed to by the argument, then returns
+ *     TK_DEFER_EVENT.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static Tk_RestrictAction
+CheckRestrictProc(clientData, eventPtr)
+    ClientData clientData;     /* Pointer to flag to set. */
+    XEvent *eventPtr;          /* Event to filter;  not used. */
+{
+    int *flag = (int *) clientData;
+    *flag = 1;
+    return TK_DEFER_EVENT;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_GetPixmap --
+ *
+ *     Same as the XCreatePixmap procedure except that it manages
+ *     resource identifiers better.
+ *
+ * Results:
+ *     Returns a new pixmap.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+Pixmap
+Tk_GetPixmap(display, d, width, height, depth)
+    Display *display;          /* Display for new pixmap. */
+    Drawable d;                        /* Drawable where pixmap will be used. */
+    int width, height;         /* Dimensions of pixmap. */
+    int depth;                 /* Bits per pixel for pixmap. */
+{
+    return XCreatePixmap(display, d, (unsigned) width, (unsigned) height,
+           (unsigned) depth);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_FreePixmap --
+ *
+ *     Same as the XFreePixmap procedure except that it also marks
+ *     the resource identifier as free.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The pixmap is freed in the X server and its resource identifier
+ *     is saved for re-use.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tk_FreePixmap(display, pixmap)
+    Display *display;          /* Display for which pixmap was allocated. */
+    Pixmap pixmap;             /* Identifier for pixmap. */
+{
+    XFreePixmap(display, pixmap);
+    Tk_FreeXId(display, (XID) pixmap);
+}
diff --git a/tk/library/choosedir.tcl b/tk/library/choosedir.tcl
new file mode 100644 (file)
index 0000000..0d0972e
--- /dev/null
@@ -0,0 +1,264 @@
+# choosedir.tcl --
+#
+#      Choose directory dialog implementation for Unix/Mac.
+#
+# Copyright (c) 1998-2000 by Scriptics Corporation.
+# All rights reserved.
+# 
+# RCS: @(#) $Id$
+
+# Make sure the tk::dialog namespace, in which all dialogs should live, exists
+namespace eval ::tk::dialog {}
+namespace eval ::tk::dialog::file {}
+
+# Make the chooseDir namespace inside the dialog namespace
+namespace eval ::tk::dialog::file::chooseDir {
+}
+
+# ::tk::dialog::file::tkChooseDirectory --
+#
+#      Implements the TK directory selection dialog.
+#
+# Arguments:
+#      args            Options parsed by the procedure.
+#
+proc ::tk::dialog::file::chooseDir::tkChooseDirectory {args} {
+    global tkPriv
+    set dataName __tk_choosedir
+    upvar ::tk::dialog::file::$dataName data
+    ::tk::dialog::file::chooseDir::Config $dataName $args
+
+    if {[string equal $data(-parent) .]} {
+        set w .$dataName
+    } else {
+        set w $data(-parent).$dataName
+    }
+
+    # (re)create the dialog box if necessary
+    #
+    if {![winfo exists $w]} {
+       ::tk::dialog::file::Create $w TkChooseDir
+    } elseif {[string compare [winfo class $w] TkChooseDir]} {
+       destroy $w
+       ::tk::dialog::file::Create $w TkChooseDir
+    } else {
+       set data(dirMenuBtn) $w.f1.menu
+       set data(dirMenu) $w.f1.menu.menu
+       set data(upBtn) $w.f1.up
+       set data(icons) $w.icons
+       set data(ent) $w.f2.ent
+       set data(okBtn) $w.f2.ok
+       set data(cancelBtn) $w.f3.cancel
+    }
+    wm transient $w $data(-parent)
+
+    trace variable data(selectPath) w [list ::tk::dialog::file::SetPath $w]
+    $data(dirMenuBtn) configure \
+           -textvariable ::tk::dialog::file::${dataName}(selectPath)
+
+    set data(filter) "*"
+    set data(previousEntryText) ""
+    ::tk::dialog::file::UpdateWhenIdle $w
+
+    # Withdraw the window, then update all the geometry information
+    # so we know how big it wants to be, then center the window in the
+    # display and de-iconify it.
+
+    ::tk::PlaceWindow $w widget $data(-parent)
+    wm title $w $data(-title)
+
+    # Set a grab and claim the focus too.
+
+    ::tk::SetFocusGrab $w $data(ent)
+    $data(ent) delete 0 end
+    $data(ent) insert 0 $data(selectPath)
+    $data(ent) selection range 0 end
+    $data(ent) icursor end
+
+    # Wait for the user to respond, then restore the focus and
+    # return the index of the selected button.  Restore the focus
+    # before deleting the window, since otherwise the window manager
+    # may take the focus away so we can't redirect it.  Finally,
+    # restore any grab that was in effect.
+
+    tkwait variable tkPriv(selectFilePath)
+
+    ::tk::RestoreFocusGrab $w $data(ent) withdraw
+
+    # Cleanup traces on selectPath variable
+    #
+
+    foreach trace [trace vinfo data(selectPath)] {
+       trace vdelete data(selectPath) [lindex $trace 0] [lindex $trace 1]
+    }
+    $data(dirMenuBtn) configure -textvariable {}
+
+    # Return value to user
+    #
+    
+    return $tkPriv(selectFilePath)
+}
+
+# ::tk::dialog::file::chooseDir::Config --
+#
+#      Configures the Tk choosedir dialog according to the argument list
+#
+proc ::tk::dialog::file::chooseDir::Config {dataName argList} {
+    upvar ::tk::dialog::file::$dataName data
+
+    # 0: Delete all variable that were set on data(selectPath) the
+    # last time the file dialog is used. The traces may cause troubles
+    # if the dialog is now used with a different -parent option.
+    #
+    foreach trace [trace vinfo data(selectPath)] {
+       trace vdelete data(selectPath) [lindex $trace 0] [lindex $trace 1]
+    }
+
+    # 1: the configuration specs
+    #
+    set specs {
+       {-mustexist "" "" 0}
+       {-initialdir "" "" ""}
+       {-parent "" "" "."}
+       {-title "" "" ""}
+    }
+
+    # 2: default values depending on the type of the dialog
+    #
+    if {![info exists data(selectPath)]} {
+       # first time the dialog has been popped up
+       set data(selectPath) [pwd]
+    }
+
+    # 3: parse the arguments
+    #
+    tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList
+
+    if {$data(-title) == ""} {
+       set data(-title) "Choose Directory"
+    }
+
+    # 4: set the default directory and selection according to the -initial
+    #    settings
+    #
+    if {$data(-initialdir) != ""} {
+       # Ensure that initialdir is an absolute path name.
+       if {[file isdirectory $data(-initialdir)]} {
+           set old [pwd]
+           cd $data(-initialdir)
+           set data(selectPath) [pwd]
+           cd $old
+       } else {
+           set data(selectPath) [pwd]
+       }
+    }
+
+    if {![winfo exists $data(-parent)]} {
+       error "bad window path name \"$data(-parent)\""
+    }
+}
+
+# Gets called when user presses Return in the "Selection" entry or presses OK.
+#
+proc ::tk::dialog::file::chooseDir::OkCmd {w} {
+    upvar ::tk::dialog::file::[winfo name $w] data
+
+    # This is the brains behind selecting non-existant directories.  Here's
+    # the flowchart:
+    # 1.  If the icon list has a selection, join it with the current dir,
+    #     and return that value.
+    # 1a.  If the icon list does not have a selection ...
+    # 2.  If the entry is empty, do nothing.
+    # 3.  If the entry contains an invalid directory, then...
+    # 3a.   If the value is the same as last time through here, end dialog.
+    # 3b.   If the value is different than last time, save it and return.
+    # 4.  If entry contains a valid directory, then...
+    # 4a.   If the value is the same as the current directory, end dialog.
+    # 4b.   If the value is different from the current directory, change to
+    #       that directory.
+
+    set iconText [tkIconList_Get $data(icons)]
+    if { ![string equal $iconText ""] } {
+       set iconText [file join $data(selectPath) $iconText]
+       ::tk::dialog::file::chooseDir::Done $w $iconText
+    } else {
+       set text [$data(ent) get]
+       if { [string equal $text ""] } {
+           return
+       }
+       set text [eval file join [file split [string trim $text]]]
+       if { ![file exists $text] || ![file isdirectory $text] } {
+           # Entry contains an invalid directory.  If it's the same as the
+           # last time they came through here, reset the saved value and end
+           # the dialog.  Otherwise, save the value (so we can do this test
+           # next time).
+           if { [string equal $text $data(previousEntryText)] } {
+               set data(previousEntryText) ""
+               ::tk::dialog::file::chooseDir::Done $w $text
+           } else {
+               set data(previousEntryText) $text
+           }
+       } else {
+           # Entry contains a valid directory.  If it is the same as the
+           # current directory, end the dialog.  Otherwise, change to that
+           # directory.
+           if { [string equal $text $data(selectPath)] } {
+               ::tk::dialog::file::chooseDir::Done $w $text
+           } else {
+               set data(selectPath) $text
+           }
+       }
+    }
+    return
+}
+
+proc ::tk::dialog::file::chooseDir::DblClick {w} {
+    upvar ::tk::dialog::file::[winfo name $w] data
+    set text [tkIconList_Get $data(icons)]
+    if {[string compare $text ""]} {
+       set file $data(selectPath)
+       if {[file isdirectory $file]} {
+           ::tk::dialog::file::ListInvoke $w $text
+           return
+       }
+    }
+}    
+
+# Gets called when user browses the IconList widget (dragging mouse, arrow
+# keys, etc)
+#
+proc ::tk::dialog::file::chooseDir::ListBrowse {w text} {
+    upvar ::tk::dialog::file::[winfo name $w] data
+
+    if {[string equal $text ""]} {
+       return
+    }
+
+    set file [::tk::dialog::file::JoinFile $data(selectPath) $text]
+    $data(ent) delete 0 end
+    $data(ent) insert 0 $file
+}
+
+# ::tk::dialog::file::chooseDir::Done --
+#
+#      Gets called when user has input a valid filename.  Pops up a
+#      dialog box to confirm selection when necessary. Sets the
+#      tkPriv(selectFilePath) variable, which will break the "tkwait"
+#      loop in tk_chooseDirectory and return the selected filename to the
+#      script that calls tk_getOpenFile or tk_getSaveFile
+#
+proc ::tk::dialog::file::chooseDir::Done {w {selectFilePath ""}} {
+    upvar ::tk::dialog::file::[winfo name $w] data
+    global tkPriv
+
+    if {[string equal $selectFilePath ""]} {
+       set selectFilePath $data(selectPath)
+    }
+    if { $data(-mustexist) } {
+       if { ![file exists $selectFilePath] || \
+               ![file isdir $selectFilePath] } {
+           return
+       }
+    }
+    set tkPriv(selectFilePath) $selectFilePath
+}
diff --git a/tk/library/demos/images/mickey.gif b/tk/library/demos/images/mickey.gif
new file mode 100644 (file)
index 0000000..91baba9
Binary files /dev/null and b/tk/library/demos/images/mickey.gif differ
diff --git a/tk/library/folder.gif b/tk/library/folder.gif
new file mode 100644 (file)
index 0000000..112bce7
Binary files /dev/null and b/tk/library/folder.gif differ
diff --git a/tk/library/images/logo.eps b/tk/library/images/logo.eps
new file mode 100644 (file)
index 0000000..0d05d34
--- /dev/null
@@ -0,0 +1,2091 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(TM) 5.5
+%%For: (Bud Northern) (Mark Anderson Design)
+%%Title: (TCL/TK LOGO.ILLUS)
+%%CreationDate: (8/1/96) (4:58 PM)
+%%BoundingBox: 251 331 371 512
+%%HiResBoundingBox: 251.3386 331.5616 370.5213 511.775
+%%DocumentProcessColors: Cyan Magenta Yellow
+%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0
+%%+ procset Adobe_IllustratorA_AI5 1.0 0
+%AI5_FileFormat 1.2
+%AI3_ColorUsage: Color
+%%DocumentCustomColors: (TCL RED)
+%%CMYKCustomColor: 0 0.45 1 0 (Orange)
+%%+ 0 0.25 1 0 (Orange Yellow)
+%%+ 0 0.79 0.91 0 (TCL RED)
+%AI3_TemplateBox: 306 396 306 396
+%AI3_TileBox: 12 12 600 780
+%AI3_DocumentPreview: Macintosh_ColorPic
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 0
+%AI5_ArtFlags: 1 0 0 1 0 0 1 1 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI5_OpenToView: 90 576 2 938 673 18 1 1 2 40
+%AI5_OpenViewLayers: 7
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset Adobe_level2_AI5 1.0 0
+%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation)
+%%Version: 1.0 
+%%CreationDate: (04/10/93) ()
+%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved)
+userdict /Adobe_level2_AI5 21 dict dup begin
+       put
+       /packedarray where not
+       {
+               userdict begin
+               /packedarray
+               {
+                       array astore readonly
+               } bind def
+               /setpacking /pop load def
+               /currentpacking false def
+        end
+               0
+       } if
+       pop
+       userdict /defaultpacking currentpacking put true setpacking
+       /initialize
+       {
+               Adobe_level2_AI5 begin
+       } bind def
+       /terminate
+       {
+               currentdict Adobe_level2_AI5 eq
+               {
+                end
+               } if
+       } bind def
+       mark
+       /setcustomcolor where not
+       {
+               /findcmykcustomcolor
+               {
+                       5 packedarray
+               } bind def
+               /setcustomcolor
+               {
+                       exch aload pop pop
+                       4
+                       {
+                               4 index mul 4 1 roll
+                       } repeat
+                       5 -1 roll pop
+                       setcmykcolor
+               }
+               def
+       } if
+       
+       /gt38? mark {version cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def
+       userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put
+       userdict /level2?
+       systemdict /languagelevel known dup
+       {
+               pop systemdict /languagelevel get 2 ge
+       } if
+       put
+       level2? not
+       {
+               /setcmykcolor where not
+               {
+                       /setcmykcolor
+                       {
+                               exch .11 mul add exch .59 mul add exch .3 mul add
+                               1 exch sub setgray
+                       } def
+               } if
+               /currentcmykcolor where not
+               {
+                       /currentcmykcolor
+                       {
+                               0 0 0 1 currentgray sub
+                       } def
+               } if
+               /setoverprint where not
+               {
+                       /setoverprint /pop load def
+               } if
+               /selectfont where not
+               {
+                       /selectfont
+                       {
+                               exch findfont exch
+                               dup type /arraytype eq
+                               {
+                                       makefont
+                               }
+                               {
+                                       scalefont
+                               } ifelse
+                               setfont
+                       } bind def
+               } if
+               /cshow where not
+               {
+                       /cshow
+                       {
+                               [
+                               0 0 5 -1 roll aload pop
+                               ] cvx bind forall
+                       } bind def
+               } if
+       } if
+       cleartomark
+       /anyColor?
+       {
+               add add add 0 ne
+       } bind def
+       /testColor
+       {
+               gsave
+               setcmykcolor currentcmykcolor
+               grestore
+       } bind def
+       /testCMYKColorThrough
+       {
+               testColor anyColor?
+       } bind def
+       userdict /composite?
+       level2?
+       {
+               gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
+               add add add 4 eq
+       }
+       {
+               1 0 0 0 testCMYKColorThrough
+               0 1 0 0 testCMYKColorThrough
+               0 0 1 0 testCMYKColorThrough
+               0 0 0 1 testCMYKColorThrough
+               and and and
+       } ifelse
+       put
+       composite? not
+       {
+               userdict begin
+               gsave
+               /cyan? 1 0 0 0 testCMYKColorThrough def
+               /magenta? 0 1 0 0 testCMYKColorThrough def
+               /yellow? 0 0 1 0 testCMYKColorThrough def
+               /black? 0 0 0 1 testCMYKColorThrough def
+               grestore
+               /isCMYKSep? cyan? magenta? yellow? black? or or or def
+               /customColor? isCMYKSep? not def
+        end
+       } if
+ end defaultpacking setpacking
+%%EndResource
+%%BeginResource: procset Adobe_IllustratorA_AI5 1.1 0
+%%Title: (Adobe Illustrator (R) Version 5.0 Abbreviated Prolog)
+%%Version: 1.1 
+%%CreationDate: (3/7/1994) ()
+%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved)
+currentpacking true setpacking
+userdict /Adobe_IllustratorA_AI5_vars 70 dict dup begin
+put
+/_lp /none def
+/_pf
+{
+} def
+/_ps
+{
+} def
+/_psf
+{
+} def
+/_pss
+{
+} def
+/_pjsf
+{
+} def
+/_pjss
+{
+} def
+/_pola 0 def
+/_doClip 0 def
+/cf currentflat def
+/_tm matrix def
+/_renderStart
+[
+/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0
+] def
+/_renderEnd
+[
+null null null null /i1 /i1 /i1 /i1
+] def
+/_render -1 def
+/_rise 0 def
+/_ax 0 def
+/_ay 0 def
+/_cx 0 def
+/_cy 0 def
+/_leading
+[
+0 0
+] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fScl 0 def
+/_cnt 0 def
+/_hs 1 def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+/_wv 0 def
+/Tx
+{
+} def
+/Tj
+{
+} def
+/CRender
+{
+} def
+/_AI3_savepage
+{
+} def
+/_gf null def
+/_cf 4 array def
+/_if null def
+/_of false def
+/_fc
+{
+} def
+/_gs null def
+/_cs 4 array def
+/_is null def
+/_os false def
+/_sc
+{
+} def
+/discardSave null def
+/buffer 256 string def
+/beginString null def
+/endString null def
+/endStringLength null def
+/layerCnt 1 def
+/layerCount 1 def
+/perCent (%) 0 get def
+/perCentSeen? false def
+/newBuff null def
+/newBuffButFirst null def
+/newBuffLast null def
+/clipForward? false def
+end
+userdict /Adobe_IllustratorA_AI5 74 dict dup begin
+put
+/initialize
+{
+       Adobe_IllustratorA_AI5 dup begin
+       Adobe_IllustratorA_AI5_vars begin
+       discardDict
+       {
+               bind pop pop
+       } forall
+       dup /nc get begin
+       {
+               dup xcheck 1 index type /operatortype ne and
+               {
+                       bind
+               } if
+               pop pop
+       } forall
+ end
+       newpath
+} def
+/terminate
+{
+ end
+ end
+} def
+/_
+null def
+/ddef
+{
+       Adobe_IllustratorA_AI5_vars 3 1 roll put
+} def
+/xput
+{
+       dup load dup length exch maxlength eq
+       {
+               dup dup load dup
+               length 2 mul dict copy def
+       } if
+       load begin
+       def
+ end
+} def
+/npop
+{
+       {
+               pop
+       } repeat
+} def
+/sw
+{
+       dup length exch stringwidth
+       exch 5 -1 roll 3 index mul add
+       4 1 roll 3 1 roll mul add
+} def
+/swj
+{
+       dup 4 1 roll
+       dup length exch stringwidth
+       exch 5 -1 roll 3 index mul add
+       4 1 roll 3 1 roll mul add
+       6 2 roll /_cnt 0 ddef
+       {
+               1 index eq
+               {
+                       /_cnt _cnt 1 add ddef
+               } if
+       } forall
+       pop
+       exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+} def
+/ss
+{
+       4 1 roll
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put pop
+               gsave
+               false charpath currentpoint
+               4 index setmatrix
+               stroke
+               grestore
+               moveto
+               2 copy rmoveto
+       } exch cshow
+       3 npop
+} def
+/jss
+{
+       4 1 roll
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put
+               gsave
+               _sp eq
+               {
+                       exch 6 index 6 index 6 index 5 -1 roll widthshow
+                       currentpoint
+               }
+               {
+                       false charpath currentpoint
+                       4 index setmatrix stroke
+               } ifelse
+               grestore
+               moveto
+               2 copy rmoveto
+       } exch cshow
+       6 npop
+} def
+/sp
+{
+       {
+               2 npop (0) exch
+               2 copy 0 exch put pop
+               false charpath
+               2 copy rmoveto
+       } exch cshow
+       2 npop
+} def
+/jsp
+{
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put
+               _sp eq
+               {
+                       exch 5 index 5 index 5 index 5 -1 roll widthshow
+               }
+               {
+                       false charpath
+               } ifelse
+               2 copy rmoveto
+       } exch cshow
+       5 npop
+} def
+/pl
+{
+       transform
+       0.25 sub round 0.25 add exch
+       0.25 sub round 0.25 add exch
+       itransform
+} def
+/setstrokeadjust where
+{
+       pop true setstrokeadjust
+       /c
+       {
+               curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               moveto
+       } def
+}
+{
+       /c
+       {
+               pl curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll pl curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               pl 2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               pl lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               pl moveto
+       } def
+} ifelse
+/d
+{
+       setdash
+} def
+/cf
+{
+} def
+/i
+{
+       dup 0 eq
+       {
+               pop cf
+       } if
+       setflat
+} def
+/j
+{
+       setlinejoin
+} def
+/J
+{
+       setlinecap
+} def
+/M
+{
+       setmiterlimit
+} def
+/w
+{
+       setlinewidth
+} def
+/H
+{
+} def
+/h
+{
+       closepath
+} def
+/N
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       clip /_doClip 0 ddef
+               } if
+               newpath
+       }
+       {
+               /CRender
+               {
+                       N
+               } ddef
+       } ifelse
+} def
+/n
+{
+       N
+} def
+/F
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _pf grestore clip newpath /_lp /none ddef _fc
+                       /_doClip 0 ddef
+               }
+               {
+                       _pf
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       F
+               } ddef
+       } ifelse
+} def
+/f
+{
+       closepath
+       F
+} def
+/S
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _ps grestore clip newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       _ps
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       S
+               } ddef
+       } ifelse
+} def
+/s
+{
+       closepath
+       S
+} def
+/B
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               gsave F grestore
+               {
+                       gsave S grestore clip newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       S
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       B
+               } ddef
+       } ifelse
+} def
+/b
+{
+       closepath
+       B
+} def
+/W
+{
+       /_doClip 1 ddef
+} def
+/*
+{
+       count 0 ne
+       {
+               dup type /stringtype eq
+               {
+                       pop
+               } if
+       } if
+       newpath
+} def
+/u
+{
+} def
+/U
+{
+} def
+/q
+{
+       _pola 0 eq
+       {
+               gsave
+       } if
+} def
+/Q
+{
+       _pola 0 eq
+       {
+               grestore
+       } if
+} def
+/*u
+{
+       _pola 1 add /_pola exch ddef
+} def
+/*U
+{
+       _pola 1 sub /_pola exch ddef
+       _pola 0 eq
+       {
+               CRender
+       } if
+} def
+/D
+{
+       pop
+} def
+/*w
+{
+} def
+/*W
+{
+} def
+/`
+{
+       /_i save ddef
+       clipForward?
+       {
+               nulldevice
+       } if
+       6 1 roll 4 npop
+       concat pop
+       userdict begin
+       /showpage
+       {
+       } def
+       0 setgray
+       0 setlinecap
+       1 setlinewidth
+       0 setlinejoin
+       10 setmiterlimit
+       [] 0 setdash
+       /setstrokeadjust where {pop false setstrokeadjust} if
+       newpath
+       0 setgray
+       false setoverprint
+} def
+/~
+{
+ end
+       _i restore
+} def
+/O
+{
+       0 ne
+       /_of exch ddef
+       /_lp /none ddef
+} def
+/R
+{
+       0 ne
+       /_os exch ddef
+       /_lp /none ddef
+} def
+/g
+{
+       /_gf exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _gf setgray
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/G
+{
+       /_gs exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _gs setgray
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/k
+{
+       _cf astore pop
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _cf aload pop setcmykcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/K
+{
+       _cs astore pop
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _cs aload pop setcmykcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/x
+{
+       /_gf exch ddef
+       findcmykcustomcolor
+       /_if exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _if _gf 1 exch sub setcustomcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/X
+{
+       /_gs exch ddef
+       findcmykcustomcolor
+       /_is exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _is _gs 1 exch sub setcustomcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/A
+{
+       pop
+} def
+/annotatepage
+{
+userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse
+} def
+/discard
+{
+       save /discardSave exch store
+       discardDict begin
+       /endString exch store
+       gt38?
+       {
+               2 add
+       } if
+       load
+       stopped
+       pop
+ end
+       discardSave restore
+} bind def
+userdict /discardDict 7 dict dup begin
+put
+/pre38Initialize
+{
+       /endStringLength endString length store
+       /newBuff buffer 0 endStringLength getinterval store
+       /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store
+       /newBuffLast newBuff endStringLength 1 sub 1 getinterval store
+} def
+/shiftBuffer
+{
+       newBuff 0 newBuffButFirst putinterval
+       newBuffLast 0
+       currentfile read not
+       {
+       stop
+       } if
+       put
+} def
+0
+{
+       pre38Initialize
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff endString eq
+                       {
+                               cleartomark stop
+                       } if
+                       shiftBuffer
+               } loop
+       }
+       {
+       stop
+       } ifelse
+} def
+1
+{
+       pre38Initialize
+       /beginString exch store
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff beginString eq
+                       {
+                               /layerCount dup load 1 add store
+                       }
+                       {
+                               newBuff endString eq
+                               {
+                                       /layerCount dup load 1 sub store
+                                       layerCount 0 eq
+                                       {
+                                               cleartomark stop
+                                       } if
+                               } if
+                       } ifelse
+                       shiftBuffer
+               } loop
+       }
+       {
+       stop
+       } ifelse
+} def
+2
+{
+       mark
+       {
+               currentfile buffer readline not
+               {
+               stop
+               } if
+               endString eq
+               {
+                       cleartomark stop
+               } if
+       } loop
+} def
+3
+{
+       /beginString exch store
+       /layerCnt 1 store
+       mark
+       {
+               currentfile buffer readline not
+               {
+               stop
+               } if
+               dup beginString eq
+               {
+                       pop /layerCnt dup load 1 add store
+               }
+               {
+                       endString eq
+                       {
+                               layerCnt 1 eq
+                               {
+                                       cleartomark stop
+                               }
+                               {
+                                       /layerCnt dup load 1 sub store
+                               } ifelse
+                       } if
+               } ifelse
+       } loop
+} def
+end
+userdict /clipRenderOff 15 dict dup begin
+put
+{
+       /n /N /s /S /f /F /b /B
+}
+{
+       {
+               _doClip 1 eq
+               {
+                       /_doClip 0 ddef clip
+               } if
+               newpath
+       } def
+} forall
+/Tr /pop load def
+/Bb {} def
+/BB /pop load def
+/Bg {12 npop} def
+/Bm {6 npop} def
+/Bc /Bm load def
+/Bh {4 npop} def
+end
+/Lb
+{
+       4 npop
+       6 1 roll
+       pop
+       4 1 roll
+       pop pop pop
+       0 eq
+       {
+               0 eq
+               {
+                       (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard
+               }
+               {
+                       /clipForward? true def
+                       
+                       /Tx /pop load def
+                       /Tj /pop load def
+                       currentdict end clipRenderOff begin begin
+               } ifelse
+       }
+       {
+               0 eq
+               {
+                       save /discardSave exch store
+               } if
+       } ifelse
+} bind def
+/LB
+{
+       discardSave dup null ne
+       {
+               restore
+       }
+       {
+               pop
+               clipForward?
+               {
+                       currentdict
+                end
+                end
+                begin
+                       
+                       /clipForward? false ddef
+               } if
+       } ifelse
+} bind def
+/Pb
+{
+       pop pop
+       0 (%AI5_EndPalette) discard
+} bind def
+/Np
+{
+       0 (%AI5_End_NonPrinting--) discard
+} bind def
+/Ln /pop load def
+/Ap
+/pop load def
+/Ar
+{
+       72 exch div
+       0 dtransform dup mul exch dup mul add sqrt
+       dup 1 lt
+       {
+               pop 1
+       } if
+       setflat
+} def
+/Mb
+{
+       q
+} def
+/Md
+{
+} def
+/MB
+{
+       Q
+} def
+/nc 3 dict def
+nc begin
+/setgray
+{
+       pop
+} bind def
+/setcmykcolor
+{
+       4 npop
+} bind def
+/setcustomcolor
+{
+       2 npop
+} bind def
+currentdict readonly pop
+end
+currentdict readonly pop
+end
+setpacking
+%%EndResource
+%%EndProlog
+%%BeginSetup
+Adobe_level2_AI5 /initialize get exec
+Adobe_IllustratorA_AI5 /initialize get exec
+%AI5_Begin_NonPrinting
+Np
+%AI3_BeginPattern: (Yellow Stripe)
+(Yellow Stripe) 8.4499 4.6 80.4499 76.6 [
+%AI3_Tile
+(0 O 0 R 0 0.4 1 0 k 0 0.4 1 0 K) @
+(
+800 Ar
+0 J 0 j 3.6 w 4 M []0 d
+%AI3_Note:
+0 D
+8.1999 8.1999 m
+80.6999 8.1999 L
+S
+8.1999 22.6 m
+80.6999 22.6 L
+S
+8.1999 37.0001 m
+80.6999 37.0001 L
+S
+8.1999 51.3999 m
+80.6999 51.3999 L
+S
+8.1999 65.8 m
+80.6999 65.8 L
+S
+8.1999 15.3999 m
+80.6999 15.3999 L
+S
+8.1999 29.8 m
+80.6999 29.8 L
+S
+8.1999 44.1999 m
+80.6999 44.1999 L
+S
+8.1999 58.6 m
+80.6999 58.6 L
+S
+8.1999 73.0001 m
+80.6999 73.0001 L
+S
+) &
+] E
+%AI3_EndPattern
+%AI5_End_NonPrinting--
+%AI5_Begin_NonPrinting
+Np
+3 Bn
+%AI5_BeginGradient: (Black & White)
+(Black & White) 0 2 Bd
+[
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+0 %_Br
+[
+0 0 50 100 %_Bs
+1 0 50 0 %_Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Red & Yellow)
+(Red & Yellow) 0 2 Bd
+[
+0
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+<
+FFFFFEFEFDFDFDFCFCFBFBFBFAFAF9F9F9F8F8F7F7F7F6F6F5F5F5F4F4F3F3F3F2F2F1F1F1F0F0EF
+EFEFEEEEEDEDEDECECEBEBEBEAEAE9E9E9E8E8E7E7E7E6E6E5E5E5E4E4E3E3E3E2E2E1E1E1E0E0DF
+DFDFDEDEDDDDDDDCDCDBDBDBDADAD9D9D9D8D8D7D7D7D6D6D5D5D5D4D4D3D3D3D2D2D1D1D1D0D0CF
+CFCFCECECDCDCDCCCCCBCBCBCACAC9C9C9C8C8C7C7C7C6C6C5C5C5C4C4C3C3C3C2C2C1C1C1C0C0BF
+BFBFBEBEBDBDBDBCBCBBBBBBBABAB9B9B9B8B8B7B7B7B6B6B5B5B5B4B4B3B3B3B2B2B1B1B1B0B0AF
+AFAFAEAEADADADACACABABABAAAAA9A9A9A8A8A7A7A7A6A6A5A5A5A4A4A3A3A3A2A2A1A1A1A0A09F
+9F9F9E9E9D9D9D9C9C9B9B9B9A9A9999
+>
+0
+1 %_Br
+[
+0 1 0.6 0 1 50 100 %_Bs
+0 0 1 0 1 50 0 %_Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Yellow & Blue Radial)
+(Yellow & Blue Radial) 1 2 Bd
+[
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+<
+1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738
+393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D
+5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182
+83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7
+A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB
+CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0
+F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF
+>
+<
+ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191
+908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776
+7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B
+5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140
+403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626
+25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B
+0A090908070706050504030302010100
+>
+0
+1 %_Br
+[
+0 0.08 0.67 0 1 50 14 %_Bs
+1 1 0 0 1 50 100 %_Bs
+BD
+%AI5_EndGradient
+%AI5_End_NonPrinting--
+%AI5_BeginPalette
+144 170 Pb
+Pn
+Pc
+1 g
+Pc
+0 g
+Pc
+0 0 0 0 k
+Pc
+0.75 g
+Pc
+0.5 g
+Pc
+0.25 g
+Pc
+0 g
+Pc
+Bb
+2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0.25 0 0 0 k
+Pc
+0.5 0 0 0 k
+Pc
+0.75 0 0 0 k
+Pc
+1 0 0 0 k
+Pc
+0.25 0.25 0 0 k
+Pc
+0.5 0.5 0 0 k
+Pc
+0.75 0.75 0 0 k
+Pc
+1 1 0 0 k
+Pc
+Bb
+2 (Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0 0.25 0 0 k
+Pc
+0 0.5 0 0 k
+Pc
+0 0.75 0 0 k
+Pc
+0 1 0 0 k
+Pc
+0 0.25 0.25 0 k
+Pc
+0 0.5 0.5 0 k
+Pc
+0 0.75 0.75 0 k
+Pc
+0 1 1 0 k
+Pc
+Bb
+0 0 0 0 Bh
+2 (Yellow & Blue Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0 0 0.25 0 k
+Pc
+0 0 0.5 0 k
+Pc
+0 0 0.75 0 k
+Pc
+0 0 1 0 k
+Pc
+0.25 0 0.25 0 k
+Pc
+0.5 0 0.5 0 k
+Pc
+0.75 0 0.75 0 k
+Pc
+1 0 1 0 k
+Pc
+(Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+Pc
+0.25 0.125 0 0 k
+Pc
+0.5 0.25 0 0 k
+Pc
+0.75 0.375 0 0 k
+Pc
+1 0.5 0 0 k
+Pc
+0.125 0.25 0 0 k
+Pc
+0.25 0.5 0 0 k
+Pc
+0.375 0.75 0 0 k
+Pc
+0.5 1 0 0 k
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0 0.25 0.125 0 k
+Pc
+0 0.5 0.25 0 k
+Pc
+0 0.75 0.375 0 k
+Pc
+0 1 0.5 0 k
+Pc
+0 0.125 0.25 0 k
+Pc
+0 0.25 0.5 0 k
+Pc
+0 0.375 0.75 0 k
+Pc
+0 0.5 1 0 k
+Pc
+0 0.79 0.91 0 (TCL RED) 0 x
+Pc
+0.125 0 0.25 0 k
+Pc
+0.25 0 0.5 0 k
+Pc
+0.375 0 0.75 0 k
+Pc
+0.5 0 1 0 k
+Pc
+0.25 0 0.125 0 k
+Pc
+0.5 0 0.25 0 k
+Pc
+0.75 0 0.375 0 k
+Pc
+1 0 0.5 0 k
+Pc
+0.5 1 0 0 k
+Pc
+0.25 0.125 0.125 0 k
+Pc
+0.5 0.25 0.25 0 k
+Pc
+0.75 0.375 0.375 0 k
+Pc
+1 0.5 0.5 0 k
+Pc
+0.25 0.25 0.125 0 k
+Pc
+0.5 0.5 0.25 0 k
+Pc
+0.75 0.75 0.375 0 k
+Pc
+1 1 0.5 0 k
+Pc
+0 1 0.5 0 k
+Pc
+0.125 0.25 0.125 0 k
+Pc
+0.25 0.5 0.25 0 k
+Pc
+0.375 0.75 0.375 0 k
+Pc
+0.5 1 0.5 0 k
+Pc
+0.125 0.25 0.25 0 k
+Pc
+0.25 0.5 0.5 0 k
+Pc
+0.375 0.75 0.75 0 k
+Pc
+0.5 1 1 0 k
+Pc
+0.75 0.75 0.375 0 k
+Pc
+0.125 0.125 0.25 0 k
+Pc
+0.25 0.25 0.5 0 k
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0.5 0.5 1 0 k
+Pc
+0.25 0.125 0.25 0 k
+Pc
+0.5 0.25 0.5 0 k
+Pc
+0.75 0.375 0.75 0 k
+Pc
+1 0.5 1 0 k
+Pc
+0 0.79 0.91 0 (TCL RED) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0.5 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.25 1 0 (Orange Yellow) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 1 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.45 1 0 (Orange) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.79 0.91 0 (TCL RED) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0.65 0 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0 1 0 k
+Pc
+PB
+%AI5_EndPalette
+%%EndSetup
+%AI5_BeginLayer
+1 1 1 1 0 0 0 79 128 255 Lb
+(Layer 1) Ln
+0 A
+u
+1 Ap
+0 O
+0 0.79 0.91 0 (TCL RED) 0 x
+800 Ar
+0 J 0 j 1.25 w 4 M []0 d
+%AI3_Note:
+0 D
+294.5207 335.3041 m
+368.2181 333.001 L
+363.6121 423.9713 L
+370.5213 507.1689 L
+336.5513 505.4417 L
+320.7179 511.775 L
+251.3386 508.0325 L
+254.7931 425.9866 L
+251.3386 331.5616 L
+294.5207 335.3041 L
+f
+u
+0 Ap
+1 0.65 0 0 k
+1 w
+318.1366 400.9627 m
+311.8663 399.2526 l
+315.2864 407.5177 l
+318.7064 430.6032 l
+314.4314 431.4581 l
+319.5616 438.5832 l
+325.9526 462.6014 l
+314.7164 460.2436 l
+320.6412 471.0911 326.9284 478.1557 v
+318.7064 484.469 l
+292.2183 472.8011 299.3434 434.8954 v
+293.8679 435.8542 l
+299.1189 396.1175 l
+294.6797 394.9775 l
+299.2277 385.6974 305.5963 381.2973 v
+306.1744 380.8979 297.6162 412.3629 306.7363 443.7133 c
+307.5914 441.7183 l
+300.3238 408.3015 307.5914 381.2973 v
+307.9261 380.656 311.5598 381.0836 v
+318.1366 393.4813 318.1366 400.9627 v
+f
+u
+*u
+1 g
+271.4311 372.5074 m
+272.7184 372.5074 L
+272.7184 375.1913 L
+273.2858 375.1913 273.8313 375.1913 274.3768 375.2786 c
+274.3768 372.5074 L
+276.2969 372.5074 L
+276.2969 372.0056 L
+274.3768 372.0056 L
+274.3768 365.3286 L
+274.3768 364.9359 274.3768 364.3467 275.2059 364.3467 c
+275.7733 364.3467 276.0787 364.7395 276.4279 365.1541 c
+276.777 364.9141 L
+276.3624 364.0849 275.2932 363.583 274.4204 363.583 c
+272.8494 363.583 272.6748 364.434 272.6748 365.4814 c
+272.6748 372.0056 L
+271.4311 372.0056 L
+271.4311 372.5074 l
+f
+*U
+*u
+290.5617 366.5724 m
+290.0598 365.0232 289.187 363.6703 286.9178 363.583 c
+283.5356 363.583 282.5101 366.3978 282.5101 367.9034 c
+282.5101 371.7874 285.6304 372.7256 286.8741 372.7256 c
+288.2924 372.7256 290.2999 372.071 290.2999 370.3909 c
+290.2999 369.8018 289.9289 369.2344 289.318 369.2344 c
+288.7288 369.2344 288.2924 369.6272 288.2924 370.26 c
+288.2924 371.111 288.9907 371.2201 288.9907 371.4601 c
+288.9907 372.0492 287.616 372.2892 287.136 372.2892 c
+285.0412 372.2892 284.4957 370.7618 284.4957 367.9034 c
+284.4957 366.5942 284.823 365.5905 284.9539 365.285 c
+285.2812 364.5649 285.9577 364.1067 287.0923 364.0413 c
+288.3579 363.9758 289.5798 365.0013 290.1035 366.5724 C
+290.5617 366.5724 l
+f
+*U
+*u
+296.6 363.8667 m
+296.6 364.3686 L
+298.2802 364.3686 L
+298.2802 378.3989 L
+296.6 378.3989 L
+296.6 378.9007 L
+297.5383 378.9007 L
+298.3457 378.9007 299.1966 378.9444 299.9822 379.0971 c
+299.9822 364.3686 L
+301.6623 364.3686 L
+301.6623 363.8667 L
+296.6 363.8667 l
+f
+*U
+*u
+317.4527 372.5074 m
+318.7401 372.5074 L
+318.7401 375.1913 L
+319.3074 375.1913 319.8529 375.1913 320.3984 375.2786 c
+320.3984 372.5074 L
+322.3186 372.5074 L
+322.3186 372.0056 L
+320.3984 372.0056 L
+320.3984 365.3286 L
+320.3984 364.9359 320.3984 364.3467 321.2276 364.3467 c
+321.7949 364.3467 322.1004 364.7395 322.4495 365.1541 c
+322.7986 364.9141 L
+322.384 364.0849 321.3148 363.583 320.442 363.583 c
+318.871 363.583 318.6964 364.434 318.6964 365.4814 c
+318.6964 372.0056 L
+317.4527 372.0056 L
+317.4527 372.5074 l
+f
+*U
+*u
+333.7467 372.0056 m
+333.7467 372.5074 L
+337.3252 372.5074 L
+337.3252 372.0056 L
+335.9942 372.0056 L
+332.983 369.3872 L
+337.1288 364.3686 L
+338.0453 364.3686 L
+338.0453 363.8667 L
+333.8995 363.8667 L
+333.8995 364.3686 L
+334.9905 364.3686 L
+331.3465 368.798 L
+335.0341 371.9401 L
+335.0341 372.0056 L
+333.7467 372.0056 l
+f
+328.4881 363.8667 m
+328.4881 364.3686 L
+329.6227 364.3686 L
+329.6227 378.3989 L
+328.4881 378.3989 L
+328.4881 378.9007 L
+328.8809 378.9007 L
+329.6882 378.9007 330.5392 378.9444 331.3247 379.0971 c
+331.3247 364.3686 L
+332.6339 364.3686 L
+332.6339 363.8667 L
+328.4881 363.8667 l
+f
+*U
+u
+309.5341 446.5364 m
+305.6878 429.3874 306.7947 401.5837 v
+307.1266 393.2441 308.0387 385.5779 309.1527 378.9301 C
+309.1587 378.9297 L
+309.8832 373.0923 310.3679 370.9791 312.2568 363.9454 C
+312.1466 359.4091 L
+297.0216 407.7015 309.5341 446.5364 V
+f
+318.8187 461.4058 m
+322.2203 463.1 327.0966 463.7165 v
+332.427 453.9463 319.3087 437.2655 v
+327.1346 454.735 325.2889 460.2079 v
+323.225 461.4903 318.8187 461.4058 v
+f
+317.2065 432.0795 m
+320.2613 431.3723 321.7279 432.5601 v
+318.8383 421.2839 319.5958 415.0813 v
+320.3533 408.8787 314.8881 404.9079 y
+319.5435 410.7982 318.0802 415.5959 v
+317.0657 418.9214 318.2006 427.4326 319.4809 430.1349 c
+318.2853 430.3025 317.2065 432.0795 v
+f
+314.1861 402.3703 m
+319.2343 402.9744 319.7646 405.5244 v
+320.3824 390.2725 313.3689 383.9873 v
+318.7204 392.3347 317.8807 400.9697 v
+314.1861 402.3703 l
+f
+299.9864 396.0219 m
+298.3586 394.1986 293.4739 398.2203 v
+295.0301 387.9694 304.6978 383.2767 v
+298.0444 388.2897 296.2519 393.7045 v
+298.6029 394.3966 299.9864 396.0219 v
+f
+298.4281 399.9096 m
+291.8229 416.6749 293.2382 439.3286 v
+294.7808 435.2261 299.738 433.7875 v
+297.4026 433.3101 296.0372 433.517 v
+292.5816 423.9535 298.4281 399.9096 v
+f
+326.1736 477.812 m
+323.6983 496.0028 308.2122 477.6066 v
+295.8813 462.9582 297.3508 450.5217 298.1072 443.5831 c
+298.3007 441.8079 295.8131 462.1138 309.3231 475.4768 c
+322.8328 488.8398 325.8846 478.5879 326.1736 477.812 c
+f
+U
+0 0 1 0 k
+303.3623 493.3274 m
+291.211 496.7978 287.3437 456.5222 v
+284.3599 468.9535 292.0777 486.5353 v
+299.7955 504.1172 303.3623 493.3274 y
+f
+288.2873 496.2718 m
+282.0897 486.9502 283.4958 477.0213 v
+278.7953 495.712 288.2873 496.2718 v
+f
+333.8987 470.1328 m
+341.2276 472.8361 330.7334 445.5571 v
+336.1654 453.5292 339.5844 466.0531 v
+341.7789 474.0903 333.8987 470.1328 y
+f
+345.752 472.2583 m
+350.9334 467.5681 347.2615 461.3636 v
+356.4779 471.0481 345.752 472.2583 v
+f
+U
+*u
+273.1765 354.3318 m
+273.1765 353.7507 273.1305 353.2908 272.5159 353.2908 c
+271.8846 353.2908 271.8554 353.7674 271.8554 354.3318 c
+271.8554 356.485 L
+272.148 356.485 L
+272.148 354.3486 L
+272.148 353.8259 272.1773 353.5751 272.5159 353.5751 c
+272.8504 353.5751 272.8839 353.8259 272.8839 354.3486 c
+272.8839 356.485 L
+273.1765 356.485 L
+273.1765 354.3318 l
+f
+*U
+*u
+277.1612 356.485 m
+276.9062 356.485 L
+276.9062 354.3862 l
+276.9062 354.2482 276.9271 354.1061 276.9355 353.9681 C
+276.9229 353.9681 l
+276.8937 354.0768 276.8644 354.1855 276.8268 354.2942 C
+276.1035 356.485 L
+275.8484 356.485 L
+275.8484 353.3326 L
+276.1035 353.3326 L
+276.1035 355.2474 l
+276.1035 355.4523 276.0826 355.653 276.07 355.8579 C
+276.0867 355.8579 l
+276.1244 355.7241 276.1495 355.5819 276.1954 355.4523 C
+276.9062 353.3326 L
+277.1612 353.3326 l
+277.1612 356.485 L
+f
+*U
+*u
+280.1421 353.3326 m
+279.8494 353.3326 L
+279.8494 356.485 L
+280.1421 356.485 L
+280.1421 353.3326 l
+f
+*U
+*u
+283.5141 353.3326 m
+283.2549 353.3326 L
+282.6194 356.485 L
+282.9205 356.485 L
+283.3344 354.1897 L
+283.3511 354.1102 283.3678 353.9054 283.3845 353.7632 c
+283.4013 353.7632 L
+283.4138 353.9054 283.4305 354.1144 283.4431 354.1897 c
+283.8528 356.485 L
+284.1496 356.485 L
+283.5141 353.3326 l
+f
+*U
+*u
+287.6238 356.2174 m
+286.9256 356.2174 L
+286.9256 355.1053 L
+287.6029 355.1053 L
+287.6029 354.8377 L
+286.9256 354.8377 L
+286.9256 353.6002 L
+287.6238 353.6002 L
+287.6238 353.3326 L
+286.6329 353.3326 L
+286.6329 356.485 L
+287.6238 356.485 L
+287.6238 356.2174 l
+f
+*U
+*u
+290.2278 353.3326 m
+290.2278 356.485 L
+290.5414 356.485 L
+290.9804 356.485 291.4026 356.4515 291.4026 355.6823 c
+291.4026 355.2809 291.3148 354.8879 290.8089 354.8712 c
+291.5072 353.3326 L
+291.1978 353.3326 L
+290.5288 354.8753 L
+290.5205 354.8753 L
+290.5205 353.3326 L
+290.2278 353.3326 l
+f
+290.5205 355.1137 m
+290.625 355.1137 L
+291.0347 355.1137 291.1016 355.2558 291.1016 355.6697 c
+291.1016 356.1672 290.9511 356.2174 290.579 356.2174 c
+290.5205 356.2174 L
+290.5205 355.1137 l
+f
+*U
+*u
+295.0981 355.9875 m
+294.9727 356.1296 294.8347 356.2425 294.634 356.2425 c
+294.3414 356.2425 294.1783 356 294.1783 355.7324 c
+294.1783 355.3645 294.4459 355.1931 294.7176 355.0091 c
+294.9852 354.821 295.2528 354.6203 295.2528 354.1855 c
+295.2528 353.7256 294.9559 353.2908 294.4626 353.2908 c
+294.287 353.2908 294.1072 353.341 293.9651 353.4497 c
+293.9651 353.8301 L
+294.0989 353.688 294.2745 353.5751 294.4751 353.5751 c
+294.7845 353.5751 294.9559 353.8468 294.9518 354.1311 c
+294.9559 354.4991 294.6842 354.6621 294.4166 354.8503 c
+294.149 355.0342 293.8773 355.2391 293.8773 355.6906 c
+293.8773 356.1129 294.1365 356.5268 294.6006 356.5268 c
+294.7887 356.5268 294.9476 356.4641 295.0981 356.3596 C
+295.0981 355.9875 l
+f
+*U
+*u
+299.0865 353.3326 m
+298.773 353.3326 L
+298.6559 353.9806 L
+297.9869 353.9806 L
+297.8741 353.3326 L
+297.5605 353.3326 L
+298.1793 356.485 L
+298.4552 356.485 L
+299.0865 353.3326 l
+f
+298.6099 354.2357 m
+298.4009 355.444 L
+298.3632 355.6572 298.3465 355.8746 298.3214 356.0878 c
+298.3047 356.0878 L
+298.2754 355.8746 298.2545 355.6572 298.2211 355.444 c
+298.0371 354.2357 L
+298.6099 354.2357 l
+f
+*U
+*u
+301.8124 353.6002 m
+302.4981 353.6002 L
+302.4981 353.3326 L
+301.5198 353.3326 L
+301.5198 356.485 L
+301.8124 356.485 L
+301.8124 353.6002 l
+f
+*U
+*u
+309.0754 355.9875 m
+308.95 356.1296 308.812 356.2425 308.6114 356.2425 c
+308.3187 356.2425 308.1556 356 308.1556 355.7324 c
+308.1556 355.3645 308.4232 355.1931 308.695 355.0091 c
+308.9626 354.821 309.2301 354.6203 309.2301 354.1855 c
+309.2301 353.7256 308.9333 353.2908 308.4399 353.2908 c
+308.2643 353.2908 308.0846 353.341 307.9424 353.4497 c
+307.9424 353.8301 L
+308.0762 353.688 308.2518 353.5751 308.4525 353.5751 c
+308.7619 353.5751 308.9333 353.8468 308.9291 354.1311 c
+308.9333 354.4991 308.6615 354.6621 308.3939 354.8503 c
+308.1264 355.0342 307.8546 355.2391 307.8546 355.6906 c
+307.8546 356.1129 308.1138 356.5268 308.5779 356.5268 c
+308.766 356.5268 308.9249 356.4641 309.0754 356.3596 C
+309.0754 355.9875 l
+f
+*U
+*u
+312.9468 353.7172 m
+312.8339 353.6378 312.7001 353.5751 312.558 353.5751 c
+311.9977 353.5751 311.9977 354.5492 311.9977 354.9172 c
+311.9977 355.5025 312.0688 356.2425 312.5789 356.2425 c
+312.7252 356.2425 312.8297 356.184 312.9468 356.1045 C
+312.9468 356.4265 l
+312.8506 356.4975 312.6918 356.5268 312.5747 356.5268 c
+311.7134 356.5268 311.6967 355.306 311.6967 354.7959 c
+311.6967 354.2566 311.8054 353.2908 312.5454 353.2908 c
+312.6834 353.2908 312.8381 353.3451 312.9468 353.4204 c
+312.9468 353.7172 L
+f
+*U
+*u
+315.5053 353.3326 m
+315.5053 356.485 L
+315.8188 356.485 L
+316.2578 356.485 316.6801 356.4515 316.6801 355.6823 c
+316.6801 355.2809 316.5923 354.8879 316.0864 354.8712 c
+316.7846 353.3326 L
+316.4752 353.3326 L
+315.8063 354.8753 L
+315.7979 354.8753 L
+315.7979 353.3326 L
+315.5053 353.3326 l
+f
+315.7979 355.1137 m
+315.9025 355.1137 L
+316.3122 355.1137 316.3791 355.2558 316.3791 355.6697 c
+316.3791 356.1672 316.2286 356.2174 315.8565 356.2174 c
+315.7979 356.2174 L
+315.7979 355.1137 l
+f
+*U
+*u
+319.5728 353.3326 m
+319.2802 353.3326 L
+319.2802 356.485 L
+319.5728 356.485 L
+319.5728 353.3326 l
+f
+*U
+*u
+322.2551 353.3326 m
+322.2551 356.485 L
+322.5812 356.485 L
+323.0327 356.485 323.4341 356.4432 323.4341 355.6655 c
+323.4341 355.0551 323.2209 354.8419 322.623 354.8419 c
+322.5477 354.8419 L
+322.5477 353.3326 L
+322.2551 353.3326 l
+f
+322.5477 355.1095 m
+322.6606 355.1095 L
+323.0703 355.1095 323.1205 355.26 323.1331 355.6655 c
+323.1331 356.1004 323.016 356.2174 322.6063 356.2174 c
+322.5477 356.2174 L
+322.5477 355.1095 l
+f
+*U
+*u
+326.9539 356.485 m
+325.7164 356.485 L
+325.7164 356.2174 L
+326.1888 356.2174 L
+326.1888 353.3326 L
+326.4815 353.3326 L
+326.4815 356.2174 L
+326.9539 356.2174 l
+326.9539 356.485 L
+f
+*U
+*u
+329.7077 353.3326 m
+329.4151 353.3326 L
+329.4151 356.485 L
+329.7077 356.485 L
+329.7077 353.3326 l
+f
+*U
+*u
+333.7028 353.3326 m
+333.4477 353.3326 L
+332.737 355.4523 L
+332.691 355.5819 332.6659 355.7241 332.6283 355.8579 c
+332.6116 355.8579 L
+332.6241 355.653 332.645 355.4523 332.645 355.2474 c
+332.645 353.3326 L
+332.39 353.3326 L
+332.39 356.485 L
+332.645 356.485 L
+333.3683 354.2942 L
+333.4059 354.1855 333.4352 354.0768 333.4645 353.9681 c
+333.477 353.9681 L
+333.4686 354.1061 333.4477 354.2482 333.4477 354.3862 c
+333.4477 356.485 L
+333.7028 356.485 L
+333.7028 353.3326 l
+f
+*U
+*u
+336.9846 354.9966 m
+337.7037 354.9966 L
+337.7037 354.4154 L
+337.7037 353.9179 337.6787 353.2908 337.0264 353.2908 c
+336.3617 353.2908 336.299 353.989 336.299 354.9841 c
+336.299 355.7283 336.3868 356.5268 337.0557 356.5268 c
+337.432 356.5268 337.6201 356.276 337.6996 355.9331 c
+337.4111 355.8202 L
+337.3776 356.0084 337.2982 356.2425 337.0682 356.2425 c
+336.6334 356.2383 336.6 355.5652 336.6 355.0091 c
+336.6 353.8427 336.7463 353.5751 337.0515 353.5751 c
+337.3818 353.5751 337.4111 353.8176 337.4111 354.4907 c
+337.4111 354.729 L
+336.9846 354.729 L
+336.9846 354.9966 l
+f
+*U
+U
+U
+337.6667 -3924 m
+(N) *
+337.6667 4716 m
+(N) *
+LB
+%AI5_EndLayer--
+%%PageTrailer
+gsave annotatepage grestore showpage
+%%Trailer
+Adobe_IllustratorA_AI5 /terminate get exec
+Adobe_level2_AI5 /terminate get exec
+%%EOF
diff --git a/tk/library/images/pspbrwse.jbf b/tk/library/images/pspbrwse.jbf
new file mode 100755 (executable)
index 0000000..4b57f31
Binary files /dev/null and b/tk/library/images/pspbrwse.jbf differ
diff --git a/tk/library/images/pwrdLogo.eps b/tk/library/images/pwrdLogo.eps
new file mode 100644 (file)
index 0000000..e11d9e9
--- /dev/null
@@ -0,0 +1,1897 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Adobe Illustrator(TM) 5.5
+%%For: (Bud Northern) (Mark Anderson Design)
+%%Title: (TCL PWRD LOGO.ILLUS)
+%%CreationDate: (8/1/96) (4:59 PM)
+%%BoundingBox: 242 302 377 513
+%%HiResBoundingBox: 242.0523 302.5199 376.3322 512.5323
+%%DocumentProcessColors: Cyan Magenta Yellow
+%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0
+%%+ procset Adobe_IllustratorA_AI5 1.0 0
+%AI5_FileFormat 1.2
+%AI3_ColorUsage: Color
+%%CMYKCustomColor: 0 0.45 1 0 (Orange)
+%%+ 0 0.25 1 0 (Orange Yellow)
+%%+ 0 0.79 0.91 0 (PANTONE Warm Red CV)
+%%+ 0 0.79 0.91 0 (TCL RED)
+%AI3_TemplateBox: 306 396 306 396
+%AI3_TileBox: 12 12 600 780
+%AI3_DocumentPreview: Macintosh_ColorPic
+%AI5_ArtSize: 612 792
+%AI5_RulerUnits: 0
+%AI5_ArtFlags: 1 0 0 1 0 0 1 1 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI5_OpenToView: 102 564 2 938 673 18 1 1 2 40
+%AI5_OpenViewLayers: 7
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset Adobe_level2_AI5 1.0 0
+%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation)
+%%Version: 1.0 
+%%CreationDate: (04/10/93) ()
+%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved)
+userdict /Adobe_level2_AI5 21 dict dup begin
+       put
+       /packedarray where not
+       {
+               userdict begin
+               /packedarray
+               {
+                       array astore readonly
+               } bind def
+               /setpacking /pop load def
+               /currentpacking false def
+        end
+               0
+       } if
+       pop
+       userdict /defaultpacking currentpacking put true setpacking
+       /initialize
+       {
+               Adobe_level2_AI5 begin
+       } bind def
+       /terminate
+       {
+               currentdict Adobe_level2_AI5 eq
+               {
+                end
+               } if
+       } bind def
+       mark
+       /setcustomcolor where not
+       {
+               /findcmykcustomcolor
+               {
+                       5 packedarray
+               } bind def
+               /setcustomcolor
+               {
+                       exch aload pop pop
+                       4
+                       {
+                               4 index mul 4 1 roll
+                       } repeat
+                       5 -1 roll pop
+                       setcmykcolor
+               }
+               def
+       } if
+       
+       /gt38? mark {version cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def
+       userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put
+       userdict /level2?
+       systemdict /languagelevel known dup
+       {
+               pop systemdict /languagelevel get 2 ge
+       } if
+       put
+       level2? not
+       {
+               /setcmykcolor where not
+               {
+                       /setcmykcolor
+                       {
+                               exch .11 mul add exch .59 mul add exch .3 mul add
+                               1 exch sub setgray
+                       } def
+               } if
+               /currentcmykcolor where not
+               {
+                       /currentcmykcolor
+                       {
+                               0 0 0 1 currentgray sub
+                       } def
+               } if
+               /setoverprint where not
+               {
+                       /setoverprint /pop load def
+               } if
+               /selectfont where not
+               {
+                       /selectfont
+                       {
+                               exch findfont exch
+                               dup type /arraytype eq
+                               {
+                                       makefont
+                               }
+                               {
+                                       scalefont
+                               } ifelse
+                               setfont
+                       } bind def
+               } if
+               /cshow where not
+               {
+                       /cshow
+                       {
+                               [
+                               0 0 5 -1 roll aload pop
+                               ] cvx bind forall
+                       } bind def
+               } if
+       } if
+       cleartomark
+       /anyColor?
+       {
+               add add add 0 ne
+       } bind def
+       /testColor
+       {
+               gsave
+               setcmykcolor currentcmykcolor
+               grestore
+       } bind def
+       /testCMYKColorThrough
+       {
+               testColor anyColor?
+       } bind def
+       userdict /composite?
+       level2?
+       {
+               gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
+               add add add 4 eq
+       }
+       {
+               1 0 0 0 testCMYKColorThrough
+               0 1 0 0 testCMYKColorThrough
+               0 0 1 0 testCMYKColorThrough
+               0 0 0 1 testCMYKColorThrough
+               and and and
+       } ifelse
+       put
+       composite? not
+       {
+               userdict begin
+               gsave
+               /cyan? 1 0 0 0 testCMYKColorThrough def
+               /magenta? 0 1 0 0 testCMYKColorThrough def
+               /yellow? 0 0 1 0 testCMYKColorThrough def
+               /black? 0 0 0 1 testCMYKColorThrough def
+               grestore
+               /isCMYKSep? cyan? magenta? yellow? black? or or or def
+               /customColor? isCMYKSep? not def
+        end
+       } if
+ end defaultpacking setpacking
+%%EndResource
+%%BeginResource: procset Adobe_IllustratorA_AI5 1.1 0
+%%Title: (Adobe Illustrator (R) Version 5.0 Abbreviated Prolog)
+%%Version: 1.1 
+%%CreationDate: (3/7/1994) ()
+%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved)
+currentpacking true setpacking
+userdict /Adobe_IllustratorA_AI5_vars 70 dict dup begin
+put
+/_lp /none def
+/_pf
+{
+} def
+/_ps
+{
+} def
+/_psf
+{
+} def
+/_pss
+{
+} def
+/_pjsf
+{
+} def
+/_pjss
+{
+} def
+/_pola 0 def
+/_doClip 0 def
+/cf currentflat def
+/_tm matrix def
+/_renderStart
+[
+/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0
+] def
+/_renderEnd
+[
+null null null null /i1 /i1 /i1 /i1
+] def
+/_render -1 def
+/_rise 0 def
+/_ax 0 def
+/_ay 0 def
+/_cx 0 def
+/_cy 0 def
+/_leading
+[
+0 0
+] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fScl 0 def
+/_cnt 0 def
+/_hs 1 def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+/_wv 0 def
+/Tx
+{
+} def
+/Tj
+{
+} def
+/CRender
+{
+} def
+/_AI3_savepage
+{
+} def
+/_gf null def
+/_cf 4 array def
+/_if null def
+/_of false def
+/_fc
+{
+} def
+/_gs null def
+/_cs 4 array def
+/_is null def
+/_os false def
+/_sc
+{
+} def
+/discardSave null def
+/buffer 256 string def
+/beginString null def
+/endString null def
+/endStringLength null def
+/layerCnt 1 def
+/layerCount 1 def
+/perCent (%) 0 get def
+/perCentSeen? false def
+/newBuff null def
+/newBuffButFirst null def
+/newBuffLast null def
+/clipForward? false def
+end
+userdict /Adobe_IllustratorA_AI5 74 dict dup begin
+put
+/initialize
+{
+       Adobe_IllustratorA_AI5 dup begin
+       Adobe_IllustratorA_AI5_vars begin
+       discardDict
+       {
+               bind pop pop
+       } forall
+       dup /nc get begin
+       {
+               dup xcheck 1 index type /operatortype ne and
+               {
+                       bind
+               } if
+               pop pop
+       } forall
+ end
+       newpath
+} def
+/terminate
+{
+ end
+ end
+} def
+/_
+null def
+/ddef
+{
+       Adobe_IllustratorA_AI5_vars 3 1 roll put
+} def
+/xput
+{
+       dup load dup length exch maxlength eq
+       {
+               dup dup load dup
+               length 2 mul dict copy def
+       } if
+       load begin
+       def
+ end
+} def
+/npop
+{
+       {
+               pop
+       } repeat
+} def
+/sw
+{
+       dup length exch stringwidth
+       exch 5 -1 roll 3 index mul add
+       4 1 roll 3 1 roll mul add
+} def
+/swj
+{
+       dup 4 1 roll
+       dup length exch stringwidth
+       exch 5 -1 roll 3 index mul add
+       4 1 roll 3 1 roll mul add
+       6 2 roll /_cnt 0 ddef
+       {
+               1 index eq
+               {
+                       /_cnt _cnt 1 add ddef
+               } if
+       } forall
+       pop
+       exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+} def
+/ss
+{
+       4 1 roll
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put pop
+               gsave
+               false charpath currentpoint
+               4 index setmatrix
+               stroke
+               grestore
+               moveto
+               2 copy rmoveto
+       } exch cshow
+       3 npop
+} def
+/jss
+{
+       4 1 roll
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put
+               gsave
+               _sp eq
+               {
+                       exch 6 index 6 index 6 index 5 -1 roll widthshow
+                       currentpoint
+               }
+               {
+                       false charpath currentpoint
+                       4 index setmatrix stroke
+               } ifelse
+               grestore
+               moveto
+               2 copy rmoveto
+       } exch cshow
+       6 npop
+} def
+/sp
+{
+       {
+               2 npop (0) exch
+               2 copy 0 exch put pop
+               false charpath
+               2 copy rmoveto
+       } exch cshow
+       2 npop
+} def
+/jsp
+{
+       {
+               2 npop
+               (0) exch 2 copy 0 exch put
+               _sp eq
+               {
+                       exch 5 index 5 index 5 index 5 -1 roll widthshow
+               }
+               {
+                       false charpath
+               } ifelse
+               2 copy rmoveto
+       } exch cshow
+       5 npop
+} def
+/pl
+{
+       transform
+       0.25 sub round 0.25 add exch
+       0.25 sub round 0.25 add exch
+       itransform
+} def
+/setstrokeadjust where
+{
+       pop true setstrokeadjust
+       /c
+       {
+               curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               moveto
+       } def
+}
+{
+       /c
+       {
+               pl curveto
+       } def
+       /C
+       /c load def
+       /v
+       {
+               currentpoint 6 2 roll pl curveto
+       } def
+       /V
+       /v load def
+       /y
+       {
+               pl 2 copy curveto
+       } def
+       /Y
+       /y load def
+       /l
+       {
+               pl lineto
+       } def
+       /L
+       /l load def
+       /m
+       {
+               pl moveto
+       } def
+} ifelse
+/d
+{
+       setdash
+} def
+/cf
+{
+} def
+/i
+{
+       dup 0 eq
+       {
+               pop cf
+       } if
+       setflat
+} def
+/j
+{
+       setlinejoin
+} def
+/J
+{
+       setlinecap
+} def
+/M
+{
+       setmiterlimit
+} def
+/w
+{
+       setlinewidth
+} def
+/H
+{
+} def
+/h
+{
+       closepath
+} def
+/N
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       clip /_doClip 0 ddef
+               } if
+               newpath
+       }
+       {
+               /CRender
+               {
+                       N
+               } ddef
+       } ifelse
+} def
+/n
+{
+       N
+} def
+/F
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _pf grestore clip newpath /_lp /none ddef _fc
+                       /_doClip 0 ddef
+               }
+               {
+                       _pf
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       F
+               } ddef
+       } ifelse
+} def
+/f
+{
+       closepath
+       F
+} def
+/S
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               {
+                       gsave _ps grestore clip newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       _ps
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       S
+               } ddef
+       } ifelse
+} def
+/s
+{
+       closepath
+       S
+} def
+/B
+{
+       _pola 0 eq
+       {
+               _doClip 1 eq
+               gsave F grestore
+               {
+                       gsave S grestore clip newpath /_lp /none ddef _sc
+                       /_doClip 0 ddef
+               }
+               {
+                       S
+               } ifelse
+       }
+       {
+               /CRender
+               {
+                       B
+               } ddef
+       } ifelse
+} def
+/b
+{
+       closepath
+       B
+} def
+/W
+{
+       /_doClip 1 ddef
+} def
+/*
+{
+       count 0 ne
+       {
+               dup type /stringtype eq
+               {
+                       pop
+               } if
+       } if
+       newpath
+} def
+/u
+{
+} def
+/U
+{
+} def
+/q
+{
+       _pola 0 eq
+       {
+               gsave
+       } if
+} def
+/Q
+{
+       _pola 0 eq
+       {
+               grestore
+       } if
+} def
+/*u
+{
+       _pola 1 add /_pola exch ddef
+} def
+/*U
+{
+       _pola 1 sub /_pola exch ddef
+       _pola 0 eq
+       {
+               CRender
+       } if
+} def
+/D
+{
+       pop
+} def
+/*w
+{
+} def
+/*W
+{
+} def
+/`
+{
+       /_i save ddef
+       clipForward?
+       {
+               nulldevice
+       } if
+       6 1 roll 4 npop
+       concat pop
+       userdict begin
+       /showpage
+       {
+       } def
+       0 setgray
+       0 setlinecap
+       1 setlinewidth
+       0 setlinejoin
+       10 setmiterlimit
+       [] 0 setdash
+       /setstrokeadjust where {pop false setstrokeadjust} if
+       newpath
+       0 setgray
+       false setoverprint
+} def
+/~
+{
+ end
+       _i restore
+} def
+/O
+{
+       0 ne
+       /_of exch ddef
+       /_lp /none ddef
+} def
+/R
+{
+       0 ne
+       /_os exch ddef
+       /_lp /none ddef
+} def
+/g
+{
+       /_gf exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _gf setgray
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/G
+{
+       /_gs exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _gs setgray
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/k
+{
+       _cf astore pop
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _cf aload pop setcmykcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/K
+{
+       _cs astore pop
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _cs aload pop setcmykcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/x
+{
+       /_gf exch ddef
+       findcmykcustomcolor
+       /_if exch ddef
+       /_fc
+       {
+               _lp /fill ne
+               {
+                       _of setoverprint
+                       _if _gf 1 exch sub setcustomcolor
+                       /_lp /fill ddef
+               } if
+       } ddef
+       /_pf
+       {
+               _fc
+               fill
+       } ddef
+       /_psf
+       {
+               _fc
+               ashow
+       } ddef
+       /_pjsf
+       {
+               _fc
+               awidthshow
+       } ddef
+       /_lp /none ddef
+} def
+/X
+{
+       /_gs exch ddef
+       findcmykcustomcolor
+       /_is exch ddef
+       /_sc
+       {
+               _lp /stroke ne
+               {
+                       _os setoverprint
+                       _is _gs 1 exch sub setcustomcolor
+                       /_lp /stroke ddef
+               } if
+       } ddef
+       /_ps
+       {
+               _sc
+               stroke
+       } ddef
+       /_pss
+       {
+               _sc
+               ss
+       } ddef
+       /_pjss
+       {
+               _sc
+               jss
+       } ddef
+       /_lp /none ddef
+} def
+/A
+{
+       pop
+} def
+/annotatepage
+{
+userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse
+} def
+/discard
+{
+       save /discardSave exch store
+       discardDict begin
+       /endString exch store
+       gt38?
+       {
+               2 add
+       } if
+       load
+       stopped
+       pop
+ end
+       discardSave restore
+} bind def
+userdict /discardDict 7 dict dup begin
+put
+/pre38Initialize
+{
+       /endStringLength endString length store
+       /newBuff buffer 0 endStringLength getinterval store
+       /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store
+       /newBuffLast newBuff endStringLength 1 sub 1 getinterval store
+} def
+/shiftBuffer
+{
+       newBuff 0 newBuffButFirst putinterval
+       newBuffLast 0
+       currentfile read not
+       {
+       stop
+       } if
+       put
+} def
+0
+{
+       pre38Initialize
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff endString eq
+                       {
+                               cleartomark stop
+                       } if
+                       shiftBuffer
+               } loop
+       }
+       {
+       stop
+       } ifelse
+} def
+1
+{
+       pre38Initialize
+       /beginString exch store
+       mark
+       currentfile newBuff readstring exch pop
+       {
+               {
+                       newBuff beginString eq
+                       {
+                               /layerCount dup load 1 add store
+                       }
+                       {
+                               newBuff endString eq
+                               {
+                                       /layerCount dup load 1 sub store
+                                       layerCount 0 eq
+                                       {
+                                               cleartomark stop
+                                       } if
+                               } if
+                       } ifelse
+                       shiftBuffer
+               } loop
+       }
+       {
+       stop
+       } ifelse
+} def
+2
+{
+       mark
+       {
+               currentfile buffer readline not
+               {
+               stop
+               } if
+               endString eq
+               {
+                       cleartomark stop
+               } if
+       } loop
+} def
+3
+{
+       /beginString exch store
+       /layerCnt 1 store
+       mark
+       {
+               currentfile buffer readline not
+               {
+               stop
+               } if
+               dup beginString eq
+               {
+                       pop /layerCnt dup load 1 add store
+               }
+               {
+                       endString eq
+                       {
+                               layerCnt 1 eq
+                               {
+                                       cleartomark stop
+                               }
+                               {
+                                       /layerCnt dup load 1 sub store
+                               } ifelse
+                       } if
+               } ifelse
+       } loop
+} def
+end
+userdict /clipRenderOff 15 dict dup begin
+put
+{
+       /n /N /s /S /f /F /b /B
+}
+{
+       {
+               _doClip 1 eq
+               {
+                       /_doClip 0 ddef clip
+               } if
+               newpath
+       } def
+} forall
+/Tr /pop load def
+/Bb {} def
+/BB /pop load def
+/Bg {12 npop} def
+/Bm {6 npop} def
+/Bc /Bm load def
+/Bh {4 npop} def
+end
+/Lb
+{
+       4 npop
+       6 1 roll
+       pop
+       4 1 roll
+       pop pop pop
+       0 eq
+       {
+               0 eq
+               {
+                       (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard
+               }
+               {
+                       /clipForward? true def
+                       
+                       /Tx /pop load def
+                       /Tj /pop load def
+                       currentdict end clipRenderOff begin begin
+               } ifelse
+       }
+       {
+               0 eq
+               {
+                       save /discardSave exch store
+               } if
+       } ifelse
+} bind def
+/LB
+{
+       discardSave dup null ne
+       {
+               restore
+       }
+       {
+               pop
+               clipForward?
+               {
+                       currentdict
+                end
+                end
+                begin
+                       
+                       /clipForward? false ddef
+               } if
+       } ifelse
+} bind def
+/Pb
+{
+       pop pop
+       0 (%AI5_EndPalette) discard
+} bind def
+/Np
+{
+       0 (%AI5_End_NonPrinting--) discard
+} bind def
+/Ln /pop load def
+/Ap
+/pop load def
+/Ar
+{
+       72 exch div
+       0 dtransform dup mul exch dup mul add sqrt
+       dup 1 lt
+       {
+               pop 1
+       } if
+       setflat
+} def
+/Mb
+{
+       q
+} def
+/Md
+{
+} def
+/MB
+{
+       Q
+} def
+/nc 3 dict def
+nc begin
+/setgray
+{
+       pop
+} bind def
+/setcmykcolor
+{
+       4 npop
+} bind def
+/setcustomcolor
+{
+       2 npop
+} bind def
+currentdict readonly pop
+end
+currentdict readonly pop
+end
+setpacking
+%%EndResource
+%%EndProlog
+%%BeginSetup
+Adobe_level2_AI5 /initialize get exec
+Adobe_IllustratorA_AI5 /initialize get exec
+%AI5_Begin_NonPrinting
+Np
+%AI3_BeginPattern: (Yellow Stripe)
+(Yellow Stripe) 8.4499 4.6 80.4499 76.6 [
+%AI3_Tile
+(0 O 0 R 0 0.4 1 0 k 0 0.4 1 0 K) @
+(
+800 Ar
+0 J 0 j 3.6 w 4 M []0 d
+%AI3_Note:
+0 D
+8.1999 8.1999 m
+80.6999 8.1999 L
+S
+8.1999 22.6 m
+80.6999 22.6 L
+S
+8.1999 37.0001 m
+80.6999 37.0001 L
+S
+8.1999 51.3999 m
+80.6999 51.3999 L
+S
+8.1999 65.8 m
+80.6999 65.8 L
+S
+8.1999 15.3999 m
+80.6999 15.3999 L
+S
+8.1999 29.8 m
+80.6999 29.8 L
+S
+8.1999 44.1999 m
+80.6999 44.1999 L
+S
+8.1999 58.6 m
+80.6999 58.6 L
+S
+8.1999 73.0001 m
+80.6999 73.0001 L
+S
+) &
+] E
+%AI3_EndPattern
+%AI5_End_NonPrinting--
+%AI5_Begin_NonPrinting
+Np
+3 Bn
+%AI5_BeginGradient: (Black & White)
+(Black & White) 0 2 Bd
+[
+<
+FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8
+D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0
+AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988
+87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160
+5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938
+37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110
+0F0E0D0C0B0A09080706050403020100
+>
+0 %_Br
+[
+0 0 50 100 %_Bs
+1 0 50 0 %_Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Red & Yellow)
+(Red & Yellow) 0 2 Bd
+[
+0
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+<
+FFFFFEFEFDFDFDFCFCFBFBFBFAFAF9F9F9F8F8F7F7F7F6F6F5F5F5F4F4F3F3F3F2F2F1F1F1F0F0EF
+EFEFEEEEEDEDEDECECEBEBEBEAEAE9E9E9E8E8E7E7E7E6E6E5E5E5E4E4E3E3E3E2E2E1E1E1E0E0DF
+DFDFDEDEDDDDDDDCDCDBDBDBDADAD9D9D9D8D8D7D7D7D6D6D5D5D5D4D4D3D3D3D2D2D1D1D1D0D0CF
+CFCFCECECDCDCDCCCCCBCBCBCACAC9C9C9C8C8C7C7C7C6C6C5C5C5C4C4C3C3C3C2C2C1C1C1C0C0BF
+BFBFBEBEBDBDBDBCBCBBBBBBBABAB9B9B9B8B8B7B7B7B6B6B5B5B5B4B4B3B3B3B2B2B1B1B1B0B0AF
+AFAFAEAEADADADACACABABABAAAAA9A9A9A8A8A7A7A7A6A6A5A5A5A4A4A3A3A3A2A2A1A1A1A0A09F
+9F9F9E9E9D9D9D9C9C9B9B9B9A9A9999
+>
+0
+1 %_Br
+[
+0 1 0.6 0 1 50 100 %_Bs
+0 0 1 0 1 50 0 %_Bs
+BD
+%AI5_EndGradient
+%AI5_BeginGradient: (Yellow & Blue Radial)
+(Yellow & Blue Radial) 1 2 Bd
+[
+<
+000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627
+28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F
+505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677
+78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
+A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
+C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF
+F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
+>
+<
+1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738
+393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D
+5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182
+83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7
+A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB
+CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0
+F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF
+>
+<
+ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191
+908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776
+7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B
+5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140
+403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626
+25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B
+0A090908070706050504030302010100
+>
+0
+1 %_Br
+[
+0 0.08 0.67 0 1 50 14 %_Bs
+1 1 0 0 1 50 100 %_Bs
+BD
+%AI5_EndGradient
+%AI5_End_NonPrinting--
+%AI5_BeginPalette
+144 161 Pb
+Pn
+Pc
+1 g
+Pc
+0 g
+Pc
+0 0 0 0 k
+Pc
+0.75 g
+Pc
+0.5 g
+Pc
+0.25 g
+Pc
+0 g
+Pc
+Bb
+2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0.25 0 0 0 k
+Pc
+0.5 0 0 0 k
+Pc
+0.75 0 0 0 k
+Pc
+1 0 0 0 k
+Pc
+0.25 0.25 0 0 k
+Pc
+0.5 0.5 0 0 k
+Pc
+0.75 0.75 0 0 k
+Pc
+1 1 0 0 k
+Pc
+Bb
+2 (Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0 0.25 0 0 k
+Pc
+0 0.5 0 0 k
+Pc
+0 0.75 0 0 k
+Pc
+0 1 0 0 k
+Pc
+0 0.25 0.25 0 k
+Pc
+0 0.5 0.5 0 k
+Pc
+0 0.75 0.75 0 k
+Pc
+0 1 1 0 k
+Pc
+Bb
+0 0 0 0 Bh
+2 (Yellow & Blue Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg
+0 BB
+Pc
+0 0 0.25 0 k
+Pc
+0 0 0.5 0 k
+Pc
+0 0 0.75 0 k
+Pc
+0 0 1 0 k
+Pc
+0.25 0 0.25 0 k
+Pc
+0.5 0 0.5 0 k
+Pc
+0.75 0 0.75 0 k
+Pc
+1 0 1 0 k
+Pc
+(Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p
+Pc
+0.25 0.125 0 0 k
+Pc
+0.5 0.25 0 0 k
+Pc
+0.75 0.375 0 0 k
+Pc
+1 0.5 0 0 k
+Pc
+0.125 0.25 0 0 k
+Pc
+0.25 0.5 0 0 k
+Pc
+0.375 0.75 0 0 k
+Pc
+0.5 1 0 0 k
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0 0.25 0.125 0 k
+Pc
+0 0.5 0.25 0 k
+Pc
+0 0.75 0.375 0 k
+Pc
+0 1 0.5 0 k
+Pc
+0 0.125 0.25 0 k
+Pc
+0 0.25 0.5 0 k
+Pc
+0 0.375 0.75 0 k
+Pc
+0 0.5 1 0 k
+Pc
+0 0.79 0.91 0 (PANTONE Warm Red CV) 0 x
+Pc
+0.125 0 0.25 0 k
+Pc
+0.25 0 0.5 0 k
+Pc
+0.375 0 0.75 0 k
+Pc
+0.5 0 1 0 k
+Pc
+0.25 0 0.125 0 k
+Pc
+0.5 0 0.25 0 k
+Pc
+0.75 0 0.375 0 k
+Pc
+1 0 0.5 0 k
+Pc
+0.5 1 0 0 k
+Pc
+0.25 0.125 0.125 0 k
+Pc
+0.5 0.25 0.25 0 k
+Pc
+0.75 0.375 0.375 0 k
+Pc
+1 0.5 0.5 0 k
+Pc
+0.25 0.25 0.125 0 k
+Pc
+0.5 0.5 0.25 0 k
+Pc
+0.75 0.75 0.375 0 k
+Pc
+1 1 0.5 0 k
+Pc
+0 1 0.5 0 k
+Pc
+0.125 0.25 0.125 0 k
+Pc
+0.25 0.5 0.25 0 k
+Pc
+0.375 0.75 0.375 0 k
+Pc
+0.5 1 0.5 0 k
+Pc
+0.125 0.25 0.25 0 k
+Pc
+0.25 0.5 0.5 0 k
+Pc
+0.375 0.75 0.75 0 k
+Pc
+0.5 1 1 0 k
+Pc
+0.75 0.75 0.375 0 k
+Pc
+0.125 0.125 0.25 0 k
+Pc
+0.25 0.25 0.5 0 k
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0.5 0.5 1 0 k
+Pc
+0.25 0.125 0.25 0 k
+Pc
+0.5 0.25 0.5 0 k
+Pc
+0.75 0.375 0.75 0 k
+Pc
+1 0.5 1 0 k
+Pc
+0 0.79 0.91 0 (PANTONE Warm Red CV) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0.5 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.25 1 0 (Orange Yellow) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 1 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0 0.5 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.45 1 0 (Orange) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0.375 0.375 0.75 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0.79 0.91 0 (PANTONE Warm Red CV) 0 x
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+1 0.65 0 0 k
+Pc
+0 0 0 0 k
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+Pc
+0 0 1 0 k
+Pc
+PB
+%AI5_EndPalette
+%%EndSetup
+%AI5_BeginLayer
+1 1 1 1 0 0 0 79 128 255 Lb
+(Layer 1) Ln
+0 A
+1 Ap
+0 O
+1 0.65 0 0 k
+800 Ar
+0 J 0 j 1 w 4 M []0 d
+%AI3_Note:
+0 D
+285.0121 311.7976 m
+357.5043 302.5199 L
+361.6071 392.7105 L
+376.3322 474.1377 L
+342.6527 475.6628 L
+327.6333 483.4165 L
+258.8269 486.3189 L
+254.4361 405.0427 L
+242.0523 312.2099 L
+285.0121 311.7976 L
+f
+0 0.79 0.91 0 k
+1.25 w
+295.4466 337.6172 m
+368.4943 335.3343 L
+363.9288 425.5026 L
+370.7771 507.9667 L
+337.1066 506.2547 L
+321.4128 512.5323 L
+252.6452 508.8228 L
+256.0692 427.5002 L
+252.6452 333.9077 L
+295.4466 337.6172 L
+f
+u
+0 Ap
+1 0.65 0 0 k
+1 w
+320.532 390.6149 m
+312.9017 388.534 l
+317.0637 398.5921 l
+321.2256 426.6854 l
+316.0232 427.7258 l
+322.2662 436.3965 l
+330.0436 465.6249 l
+316.3701 462.7557 l
+323.5798 475.9563 331.2311 484.5534 v
+321.2256 492.2363 l
+288.9913 478.0373 297.6622 431.9088 v
+290.9988 433.0755 l
+297.3888 384.7188 l
+291.9867 383.3315 l
+297.5214 372.0383 305.2714 366.6837 v
+305.9749 366.1976 295.5601 404.4882 306.6587 442.6395 c
+307.6992 440.2117 l
+298.855 399.5459 307.6992 366.6837 v
+308.1064 365.9033 312.5286 366.4235 v
+320.532 381.5106 320.532 390.6149 v
+f
+u
+*u
+1 g
+263.6948 355.9856 m
+265.2612 355.9856 L
+265.2612 359.2513 L
+265.9515 359.2513 266.6153 359.2513 267.2791 359.3575 c
+267.2791 355.9856 L
+269.6155 355.9856 L
+269.6155 355.3749 L
+267.2791 355.3749 L
+267.2791 347.2505 L
+267.2791 346.7726 267.2791 346.0558 268.288 346.0558 c
+268.9783 346.0558 269.35 346.5337 269.7748 347.0381 c
+270.1996 346.7461 L
+269.6951 345.7372 268.3942 345.1265 267.3322 345.1265 c
+265.4205 345.1265 265.2081 346.162 265.2081 347.4364 c
+265.2081 355.3749 L
+263.6948 355.3749 L
+263.6948 355.9856 l
+f
+*U
+*u
+285.7796 348.7639 m
+285.1689 346.8788 284.1069 345.2327 281.3457 345.1265 c
+277.2304 345.1265 275.9825 348.5515 275.9825 350.3835 c
+275.9825 355.1094 279.7792 356.2511 281.2926 356.2511 c
+283.0184 356.2511 285.461 355.4546 285.461 353.4102 c
+285.461 352.6934 285.0096 352.003 284.2662 352.003 c
+283.5494 352.003 283.0184 352.481 283.0184 353.2509 c
+283.0184 354.2864 283.868 354.4191 283.868 354.7112 c
+283.868 355.428 282.1953 355.7201 281.6112 355.7201 c
+279.0624 355.7201 278.3986 353.8616 278.3986 350.3835 c
+278.3986 348.7905 278.7969 347.5691 278.9562 347.1974 c
+279.3544 346.3213 280.1775 345.7637 281.5581 345.6841 c
+283.098 345.6044 284.5848 346.8523 285.222 348.7639 C
+285.7796 348.7639 l
+f
+*U
+*u
+291.9344 345.4717 m
+291.9344 346.0823 L
+293.9788 346.0823 L
+293.9788 363.1542 L
+291.9344 363.1542 L
+291.9344 363.7648 L
+293.0761 363.7648 L
+294.0585 363.7648 295.0939 363.8179 296.0497 364.0038 c
+296.0497 346.0823 L
+298.0941 346.0823 L
+298.0941 345.4717 L
+291.9344 345.4717 l
+f
+*U
+u
+310.0634 446.075 m
+305.3828 425.2059 306.7298 391.3708 v
+307.1338 381.222 308.2436 371.8929 309.5993 363.8029 C
+309.6066 363.8025 L
+310.4883 356.6987 311.0781 354.1272 313.3768 345.5676 C
+313.2426 340.0473 L
+294.8367 398.8155 310.0634 446.075 V
+f
+321.3622 464.1699 m
+325.5016 466.2317 331.4359 466.9819 v
+337.9224 455.0924 321.9584 434.793 v
+331.4821 456.0522 329.2358 462.7122 v
+326.7243 464.2727 321.3622 464.1699 v
+f
+319.4002 428.4819 m
+323.1177 427.6214 324.9024 429.0668 v
+321.386 415.3445 322.3077 407.7964 v
+323.2297 400.2483 316.5788 395.4159 y
+322.2441 402.584 320.4635 408.4226 v
+319.2289 412.4694 320.6101 422.8271 322.1681 426.1155 c
+320.7131 426.3196 319.4002 428.4819 v
+f
+315.7246 392.3281 m
+321.8677 393.0631 322.5131 396.1662 v
+323.265 377.6058 314.7299 369.9571 v
+321.2425 380.1152 320.2206 390.6235 v
+315.7246 392.3281 l
+f
+298.4445 384.6023 m
+296.4635 382.3836 290.5192 387.2778 v
+292.4131 374.803 304.1781 369.0924 v
+296.0814 375.1928 293.9 381.7824 v
+296.7611 382.6245 298.4445 384.6023 v
+f
+296.5483 389.3335 m
+288.5102 409.7356 290.2325 437.3036 v
+292.1098 432.3112 298.1424 430.5604 v
+295.3003 429.9794 293.6387 430.2313 v
+289.4335 418.5932 296.5483 389.3335 v
+f
+330.3126 484.1353 m
+327.3003 506.2722 308.4549 483.8853 v
+293.4491 466.0592 295.2373 450.9247 296.1578 442.4811 c
+296.3932 440.3206 293.366 465.0316 309.8067 481.2933 c
+326.2471 497.5553 329.9609 485.0794 330.3126 484.1353 c
+f
+U
+0 0 1 0 k
+302.5528 503.0164 m
+287.7656 507.2395 283.0593 458.227 v
+279.4282 473.3549 288.8204 494.7509 v
+298.2122 516.1468 302.5528 503.0164 y
+f
+284.2076 506.5994 m
+276.6655 495.2557 278.3767 483.1729 v
+272.6565 505.9183 284.2076 506.5994 v
+f
+339.7135 474.7902 m
+348.6321 478.0799 335.8615 444.8834 v
+342.4718 454.5848 346.6326 469.8253 v
+349.303 479.6062 339.7135 474.7902 y
+f
+354.1382 477.3767 m
+360.4435 471.669 355.9752 464.1187 v
+367.1908 475.904 354.1382 477.3767 v
+f
+U
+U
+*u
+1 g
+258.2029 317.4593 m
+256.6821 317.4593 L
+256.6821 325.2598 L
+258.7512 325.2598 L
+260.3858 325.2598 261.4514 324.608 261.4514 322.839 c
+261.4514 321.1837 260.5513 320.3767 258.9581 320.3767 c
+258.2029 320.3767 L
+258.2029 317.4593 l
+f
+1 D
+258.2029 321.6389 m
+258.5132 321.6389 L
+259.4133 321.6389 259.8995 321.8354 259.8995 322.8493 c
+259.8995 323.8528 259.3202 323.9976 258.4719 323.9976 c
+258.2029 323.9976 L
+258.2029 321.6389 l
+f
+*U
+*u
+0 D
+269.0694 321.3699 m
+269.0694 323.5528 270.6523 325.4667 272.9283 325.4667 c
+275.2043 325.4667 276.7871 323.5528 276.7871 321.3699 c
+276.7871 319.1353 275.2043 317.2524 272.9283 317.2524 c
+270.6523 317.2524 269.0694 319.1353 269.0694 321.3699 c
+f
+1 D
+270.6419 321.432 m
+270.6419 320.2526 271.6351 318.7525 272.9283 318.7525 c
+274.2215 318.7525 275.2146 320.2526 275.2146 321.432 c
+275.2146 322.6941 274.2628 323.9666 272.9283 323.9666 c
+271.5937 323.9666 270.6419 322.6941 270.6419 321.432 c
+f
+*U
+*u
+0 D
+287.2943 319.9422 m
+287.315 319.9422 L
+288.8668 325.3632 L
+289.7668 325.3632 L
+291.3807 319.9422 L
+291.4014 319.9422 L
+292.9326 325.2598 L
+294.5258 325.2598 L
+291.8877 317.3041 L
+290.7704 317.3041 L
+289.2185 322.4044 L
+289.1978 322.4044 L
+287.7288 317.3041 L
+286.6115 317.3041 L
+284.1286 325.2598 L
+285.7218 325.2598 L
+287.2943 319.9422 l
+f
+*U
+*u
+303.7595 323.9356 m
+303.7595 322.2182 L
+306.1803 322.2182 L
+306.1803 320.894 L
+303.7595 320.894 L
+303.7595 318.7835 L
+306.2734 318.7835 L
+306.2734 317.4593 L
+302.2387 317.4593 L
+302.2387 325.2598 L
+306.2734 325.2598 L
+306.2734 323.9356 L
+303.7595 323.9356 l
+f
+*U
+*u
+319.8602 317.4593 m
+318.0187 317.4593 L
+316.1255 320.6043 L
+316.1048 320.6043 L
+316.1048 317.4593 L
+314.5841 317.4593 L
+314.5841 325.2598 L
+316.6428 325.2598 L
+318.1843 325.2598 319.2499 324.577 319.2499 322.9114 c
+319.2499 321.9182 318.7015 320.925 317.6567 320.7492 C
+319.8602 317.4593 l
+f
+1 D
+316.1048 321.6699 m
+316.3014 321.6699 L
+317.1394 321.6699 317.7291 321.9182 317.7291 322.87 c
+317.7291 323.8321 317.1187 324.0183 316.3117 324.0183 c
+316.1048 324.0183 L
+316.1048 321.6699 l
+f
+*U
+*u
+0 D
+329.1754 323.9356 m
+329.1754 322.2182 L
+331.5962 322.2182 L
+331.5962 320.894 L
+329.1754 320.894 L
+329.1754 318.7835 L
+331.6894 318.7835 L
+331.6894 317.4593 L
+327.6546 317.4593 L
+327.6546 325.2598 L
+331.6894 325.2598 L
+331.6894 323.9356 L
+329.1754 323.9356 l
+f
+*U
+*u
+340 325.2598 m
+342.1725 325.2598 L
+344.4279 325.2598 345.9383 323.5735 345.9383 321.3492 c
+345.9383 319.156 344.3865 317.4593 342.1622 317.4593 c
+340 317.4593 L
+340 325.2598 l
+f
+1 D
+341.5208 318.7835 m
+341.7691 318.7835 L
+343.6416 318.7835 344.3658 319.8181 344.3658 321.3596 c
+344.3658 323.0562 343.4968 323.9356 341.7691 323.9356 c
+341.5208 323.9356 L
+341.5208 318.7835 l
+f
+*U
+LB
+%AI5_EndLayer--
+%%PageTrailer
+gsave annotatepage grestore showpage
+%%Trailer
+Adobe_IllustratorA_AI5 /terminate get exec
+Adobe_level2_AI5 /terminate get exec
+%%EOF
diff --git a/tk/library/images/tai-ku.gif b/tk/library/images/tai-ku.gif
new file mode 100644 (file)
index 0000000..a5aea47
Binary files /dev/null and b/tk/library/images/tai-ku.gif differ
diff --git a/tk/library/textfile.gif b/tk/library/textfile.gif
new file mode 100644 (file)
index 0000000..764d498
Binary files /dev/null and b/tk/library/textfile.gif differ
diff --git a/tk/library/updir.xbm b/tk/library/updir.xbm
new file mode 100644 (file)
index 0000000..a2404f7
--- /dev/null
@@ -0,0 +1,9 @@
+#define updir_width 28
+#define updir_height 16
+static char updir_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00,
+   0x20, 0x40, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x10, 0x00, 0x00, 0x01,
+   0x10, 0x02, 0x00, 0x01, 0x10, 0x07, 0x00, 0x01, 0x90, 0x0f, 0x00, 0x01,
+   0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01,
+   0x10, 0xfe, 0x07, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01,
+   0xf0, 0xff, 0xff, 0x01};
diff --git a/tk/mac/MW_TkHeader.h b/tk/mac/MW_TkHeader.h
new file mode 100644 (file)
index 0000000..8d2b252
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * MW_TkHeader.h --
+ *
+ *     This file is a global header file for the MetroWerks CodeWarrior
+ *  environment.  It essentially acts as a place to set compiler
+ *  flags.  See MetroWerks documention for more details.
+ *
+ * Copyright (c) 1995-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) MW_TkHeader.h 1.10 96/03/04 11:37:47
+ */
+
+#define MAC_TCL
+#define TK_LIBRARY ":library"
+
+#define NO_GETTOD 1
+#define NO_UNION_WAIT 1
+#define HAVE_UNISTD_H 1
+#define HAS_STDARG 1
+#define HAVE_LIMITS_H
+#define REDO_KEYSYM_LOOKUP
+
+/*
+ * The following two defines are used to prepare for the coming
+ * of Copland.
+ */
+
+#define STRICT_CONTROLS 0
+#define STRICT_WINDOWS  0
+
+/*
+ * Define the following symbol if you want
+ * comprehensive debugging turned on.
+ */
+
+/* #define TCL_DEBUG */
+
+#ifdef TCL_DEBUG
+#   define TCL_MEM_DEBUG
+#   define TK_TEST
+#endif
+
diff --git a/tk/mac/MW_TkOldImgHeader.h b/tk/mac/MW_TkOldImgHeader.h
new file mode 100644 (file)
index 0000000..d0b3194
--- /dev/null
@@ -0,0 +1,3 @@
+#define USE_OLD_IMAGE
+
+#include "MW_TkHeader.pch"
diff --git a/tk/mac/MW_TkTestHeader.h b/tk/mac/MW_TkTestHeader.h
new file mode 100644 (file)
index 0000000..995e9fd
--- /dev/null
@@ -0,0 +1,7 @@
+#if __POWERPC__
+#include "MW_TkTestHeaderPPC"
+#elif __CFM68K__
+#include "MW_TkTestHeaderCFM68K"
+#else
+#include "MW_TkTestHeader68K"
+#endif
diff --git a/tk/mac/MW_TkTestHeader.pch b/tk/mac/MW_TkTestHeader.pch
new file mode 100644 (file)
index 0000000..5073c6a
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * MW_TkHeader.pch --
+ *
+ *  This file is the source for a pre-compilied header that gets used
+ *  for all files in the Tk projects.  This make compilies go a bit
+ *  faster.  This file is only intended to be used in the MetroWerks
+ *  CodeWarrior environment.  It essentially acts as a place to set 
+ *  compiler flags.  See MetroWerks documention for more details.
+ *
+ * Copyright (c) 1995-1997 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+/*
+ * To use the compilied header you need to set the "Prefix file" in
+ * the "C/C++ Language" preference panel to point to the created
+ * compilied header.  The name of the header depends on the
+ * architecture we are compiling for (see the code below).  For
+ * example, for a 68k app the prefix file should be: MW_TclHeader68K.
+ */
+
+#if __POWERPC__
+#pragma precompile_target "MW_TkTestHeaderPPC"
+#elif __CFM68K__
+#pragma precompile_target "MW_TkTestHeaderCFM68K"
+#else
+#pragma precompile_target "MW_TkTestHeader68K"
+#endif
+
+#define TCL_DEBUG 1
+
+/*#define TCL_THREADS 1*/
+
+#include "tclMacCommonPch.h"
+
+#ifdef TCL_DEBUG
+    #define TK_TEST
+#endif
+
+/*
+ * The following defines are for the Xlib.h file to force 
+ * it to generate prototypes in the way we need it.  This is
+ * defined here in case X.h & company are ever included before
+ * tk.h.
+ */
+
+#define NeedFunctionPrototypes 1
+#define NeedWidePrototypes 0
+
+/*
+ * Place any includes below that will are needed by the majority of the
+ * and is OK to be in any file in the system.
+ */
+
+#include <tcl.h>
+#pragma export on
+#include "tk.h"
+#include "tkInt.h"
+#pragma export off
+
diff --git a/tk/mac/tclets.r b/tk/mac/tclets.r
new file mode 100644 (file)
index 0000000..ce68db4
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * tclets.r --
+ *
+ */
+
+/*
+ * New style DLOG templates have an extra field for the positioning
+ * options for the Dialog Box.  We will not use this, for now, so we
+ * turn it off here.
+ */
+#define DLOG_RezTemplateVersion 0
+
+#include <Types.r>
+#include <SysTypes.r>
+#include <AEUserTermTypes.r>
+
+/* 
+ * We now load the Tclets code into the resource fork
+ */
+
+#define TK_LIBRARY_RESOURCES 3000
+
+read 'TEXT' (TK_LIBRARY_RESOURCES+114, "tclshrc", purgeable) 
+       "::mac:tclets.tcl";
+
+data 'icns' (-16455) {
+       $"6963 6E73 0000 08F8 6963 7323 0000 0048"            /* icns...øics#...H */
+       $"0100 02EE 05CE 09EE 13DE 23FF 47CE 86C6"            /* ...î.ÎÆî.Þ#ÿGÎ\86Æ */
+       $"4681 22C2 12C4 0888 0410 0220 0140 0080"            /* F\81"Â.Ä.\88... .@.\80 */
+       $"0100 03EE 07CE 0FEE 1FFE 3FFF 7FFE FFFE"            /* ...î.Î.î.þ?ÿ.þÿþ */
+       $"7FFF 3FFE 1FFC 0FF8 07F0 03E0 01C0 0080"            /* .ÿ?þ.ü.ø.ð.à.À.\80 */
+       $"6963 7334 0000 0088 0000 000F 0000 0000"            /* ics4...\88........ */
+       $"0000 00FC F6D0 FFF0 0000 0FC5 DD00 F6F0"            /* ...üöÐÿð...ÅÝ.öð */
+       $"0000 FCCD 66F0 F6F0 000F CC6E 66CE F6F0"            /* ..üÍfðöð..ÌnfÎöð */
+       $"00FC CC6E 67EF F6FF 0FCC CD66 66CC F6F0"            /* .üÌngïöÿ.ÌÍffÌöð */
+       $"FCCC CDDC 66CC CFA0 0FCC CD6C EDCC CC0F"            /* üÌÍÜfÌÏ .ÌÍlíÌÌ. */
+       $"00FC CC6C E6CC CCF0 000F CC6C 66CC CF00"            /* .üÌlæÌÌð..ÌlfÌÏ. */
+       $"0000 FCCC 6CCC F000 0000 0FCC DCCF 0000"            /* ..üÌlÌð....ÌÜÏ.. */
+       $"0000 00FD DCF0 0000 0000 000F CF00 0000"            /* ...ýÜð......Ï... */
+       $"0000 0000 F000 0000 6963 7338 0000 0108"            /* ....ð...ics8.... */
+       $"0000 0000 0000 00FF 0000 0000 0000 0000"            /* .......ÿ........ */
+       $"0000 0000 0000 FF2B FFEC 7F00 FFFF FF00"            /* ......ÿ+ÿì..ÿÿÿ. */
+       $"0000 0000 00FF 2BB0 7F7F 0000 FFEC FF00"            /* .....ÿ+°....ÿìÿ. */
+       $"0000 0000 FF2B 2B7F ECEC FF00 FFEC FF00"            /* ....ÿ++.ììÿ.ÿìÿ. */
+       $"0000 00FF 2B2B ECFC ECEC 2BFB FFEC FF00"            /* ...ÿ++ìüìì+ûÿìÿ. */
+       $"0000 FF2B 2B2B ECFC ECC0 FBFF FFEC FFFF"            /* ..ÿ+++ìüìÀûÿÿìÿÿ */
+       $"00FF 2B2B 2B7F ECEC ECEC 2B2B FFEC FF00"            /* .ÿ+++.ìììì++ÿìÿ. */
+       $"FF2B 2B2B 2B7F 7FF6 ECEC 2B2B 2BFF FD00"            /* ÿ++++..öìì+++ÿý. */
+       $"00FF 2B2B 2B7F ECF6 FCF9 2B2B 2B2B 00FF"            /* .ÿ+++.ìöüù++++.ÿ */
+       $"0000 FF2B 2B2B ECF6 FCEC 2B2B 2B2B FF00"            /* ..ÿ+++ìöüì++++ÿ. */
+       $"0000 00FF 2B2B ECF6 ECEC 2B2B 2BFF 0000"            /* ...ÿ++ìöìì+++ÿ.. */
+       $"0000 0000 FF2B 2BF6 EC2B 2B2B FF00 0000"            /* ....ÿ++öì+++ÿ... */
+       $"0000 0000 00FF 2BF6 F92B 2BFF 0000 0000"            /* .....ÿ+öù++ÿ.... */
+       $"0000 0000 0000 FFF9 F92B FF00 0000 0000"            /* ......ÿùù+ÿ..... */
+       $"0000 0000 0000 00FF 2BFF 0000 0000 0000"            /* .......ÿ+ÿ...... */
+       $"0000 0000 0000 0000 FF00 0000 0000 0000"            /* ........ÿ....... */
+       $"4943 4E23 0000 0108 0001 0000 0002 8000"            /* ICN#..........\80. */
+       $"0004 78F8 0008 70F8 0010 F0F8 0021 E8F8"            /* ..xø..pø..ðø.!èø */
+       $"0043 C4F8 0081 FAF8 0107 F1F8 0207 F0F8"            /* .CÄø.\81úø..ñø..ðø */
+       $"0407 F7FF 0807 E3FE 1007 E1FC 200E E0F8"            /* ..÷ÿ..ãþ..áü .àø */
+       $"4002 E074 800E E022 400E E001 200E C002"            /* @.àt\80.à"@.à. .À. */
+       $"1006 E004 0806 C008 0406 E010 0202 C020"            /* ..à...À...à...À  */
+       $"0102 C040 0080 8080 0040 0100 0020 0200"            /* ..À@.\80\80\80.@... .. */
+       $"0010 0400 0008 0800 0004 1000 0002 2000"            /* .............. . */
+       $"0001 4000 0000 8000 0001 0000 0003 8000"            /* ..@...\80.......\80. */
+       $"0007 F8F8 000F F0F8 001F F0F8 003F F8F8"            /* ..øø..ðø..ðø.?øø */
+       $"007F FCF8 00FF FEF8 01FF FFF8 03FF FFF8"            /* ..üø.ÿþø.ÿÿø.ÿÿø */
+       $"07FF FFFF 0FFF FFFE 1FFF FFFC 3FFF FFF8"            /* .ÿÿÿ.ÿÿþ.ÿÿü?ÿÿø */
+       $"7FFF FFFC FFFF FFFE 7FFF FFFF 3FFF FFFE"            /* .ÿÿüÿÿÿþ.ÿÿÿ?ÿÿþ */
+       $"1FFF FFFC 0FFF FFF8 07FF FFF0 03FF FFE0"            /* .ÿÿü.ÿÿø.ÿÿð.ÿÿà */
+       $"01FF FFC0 00FF FF80 007F FF00 003F FE00"            /* .ÿÿÀ.ÿÿ\80..ÿ..?þ. */
+       $"001F FC00 000F F800 0007 F000 0003 E000"            /* ..ü...ø...ð...à. */
+       $"0001 C000 0000 8000 6963 6C34 0000 0208"            /* ..À...\80.icl4.... */
+       $"0000 0000 0000 000F 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 0000 00FC F000 0000 0000 0000"            /* .......üð....... */
+       $"0000 0000 0000 0FCC CFD6 D000 FFFF F000"            /* .......ÌÏÖÐ.ÿÿð. */
+       $"0000 0000 0000 FCCC C556 0000 F767 F000"            /* ......üÌÅV..÷gð. */
+       $"0000 0000 000F CCCC 566F 0000 F676 F000"            /* ......ÌÌVo..övð. */
+       $"0000 0000 00FC CCC5 6F5C F000 F767 F000"            /* .....üÌÅo\ð.÷gð. */
+       $"0000 0000 0FCC CC66 66CC 0F00 F676 F000"            /* .....ÌÌffÌ..övð. */
+       $"0000 0000 FCCC CCD5 5666 FCF0 F767 F000"            /* ....üÌÌÕVfüð÷gð. */
+       $"0000 000F CCCC C656 5667 CCCF F676 F000"            /* ....ÌÌÆVVgÌÏövð. */
+       $"0000 00FC CCCC C6E5 5566 CCCC F767 F000"            /* ...üÌÌÆåUfÌÌ÷gð. */
+       $"0000 0FCC CCCC C656 5657 CFFF F676 FFFF"            /* ...ÌÌÌÆVVWÏÿövÿÿ */
+       $"0000 FCCC CCCC C6E5 565C CCF7 6767 67F0"            /* ..üÌÌÌÆåV\Ì÷gggð */
+       $"000F CCCC CCCC C655 565C CCCF 7676 7F00"            /* ..ÌÌÌÌÆUV\ÌÏvv.. */
+       $"00FC CCCC CCCC 7660 556C CCCC F767 F000"            /* .üÌÌÌÌv`UlÌÌ÷gð. */
+       $"0FCC CCCC CCCC CD5D 567C CCCC CF7F CF00"            /* .ÌÌÌÌÌÍ]V|ÌÌÏ.Ï. */
+       $"FCCC CCCC CCCC 6660 556C CCCC CCFC CCF0"            /* üÌÌÌÌÌf`UlÌÌÌüÌð */
+       $"0FCC CCCC CCCC 665C 565C CCCC CCCC CCCF"            /* .ÌÌÌÌÌf\V\ÌÌÌÌÌÏ */
+       $"00FC CCCC CCCC 6660 E6DC CCCC CCCC CCF0"            /* .üÌÌÌÌf`æÜÌÌÌÌÌð */
+       $"000F CCCC CCCC C650 656C CCCC CCCC CF00"            /* ..ÌÌÌÌÆPelÌÌÌÌÏ. */
+       $"0000 FCCC CCCC C6EC 5ECC CCCC CCCC F000"            /* ..üÌÌÌÆì^ÌÌÌÌÌð. */
+       $"0000 0FCC CCCC C650 566C CCCC CCCF 0000"            /* ...ÌÌÌÆPVlÌÌÌÏ.. */
+       $"0000 00FC CCCC CC50 D5CC CCCC CCF0 0000"            /* ...üÌÌÌPÕÌÌÌÌð.. */
+       $"0000 000F CCCC CC50 56CC CCCC CF00 0000"            /* ....ÌÌÌPVÌÌÌÏ... */
+       $"0000 0000 FCCC CCD0 5CCC CCCC F000 0000"            /* ....üÌÌÐ\ÌÌÌð... */
+       $"0000 0000 0FCC CCD0 DCCC CCCF 0000 0000"            /* .....ÌÌÐÜÌÌÏ.... */
+       $"0000 0000 00FC CCD0 DCCC CCF0 0000 0000"            /* .....üÌÐÜÌÌð.... */
+       $"0000 0000 000F CCD0 DCCC CF00 0000 0000"            /* ......ÌÐÜÌÏ..... */
+       $"0000 0000 0000 FCC0 CCCC F000 0000 0000"            /* ......üÀÌÌð..... */
+       $"0000 0000 0000 0FCD CCCF 0000 0000 0000"            /* .......ÍÌÏ...... */
+       $"0000 0000 0000 00FC CCF0 0000 0000 0000"            /* .......üÌð...... */
+       $"0000 0000 0000 000F CF00 0000 0000 0000"            /* ........Ï....... */
+       $"0000 0000 0000 0000 F000 0000 0000 0000"            /* ........ð....... */
+       $"6963 6C38 0000 0408 0000 0000 0000 0000"            /* icl8............ */
+       $"0000 0000 0000 00FF 0000 0000 0000 0000"            /* .......ÿ........ */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 0000 FF2B FF00 0000 0000 0000"            /* ......ÿ+ÿ....... */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 00FF 2B2B 2BFF 7FEC 7F00 0000"            /* .....ÿ+++ÿ.ì.... */
+       $"FFFF FFFF FF00 0000 0000 0000 0000 0000"            /* ÿÿÿÿÿ........... */
+       $"0000 0000 FF2B 2B2B 2BB0 B0EC 0000 0000"            /* ....ÿ++++°°ì.... */
+       $"FFC0 ECC0 FF00 0000 0000 0000 0000 0000"            /* ÿÀìÀÿ........... */
+       $"0000 00FF 2B2B 2B2B B0EC ECFF 0000 0000"            /* ...ÿ++++°ììÿ.... */
+       $"FFEC C0EC FF00 0000 0000 0000 0000 0000"            /* ÿìÀìÿ........... */
+       $"0000 FF2B 2B2B 2BB0 ECFF B02B FF00 0000"            /* ..ÿ++++°ìÿ°+ÿ... */
+       $"FFC0 ECC0 FF00 0000 0000 0000 0000 0000"            /* ÿÀìÀÿ........... */
+       $"00FF 2B2B 2B2B ECEC ECEC 2B2B 00FF 0000"            /* .ÿ++++ìììì++.ÿ.. */
+       $"FFEC C0EC FF00 0000 0000 0000 0000 0000"            /* ÿìÀìÿ........... */
+       $"FF2B 2B2B 2B2B F9B0 B0EC ECEC FF2B FF00"            /* ÿ+++++ù°°ìììÿ+ÿ. */
+       $"FFC0 ECC0 FF00 0000 0000 0000 0000 00FF"            /* ÿÀìÀÿ..........ÿ */
+       $"2B2B 2B2B 2BEC B0EC B0EC ECC0 2B2B 2BFF"            /* +++++ì°ì°ììÀ+++ÿ */
+       $"FFEC C0EC FF00 0000 0000 0000 0000 FF2B"            /* ÿìÀìÿ.........ÿ+ */
+       $"2B2B 2B2B 2BEC FCB0 B0B0 ECEC 2B2B 2B2B"            /* +++++ìü°°°ìì++++ */
+       $"FFC0 ECC0 FF00 0000 0000 0000 00FF 2B2B"            /* ÿÀìÀÿ........ÿ++ */
+       $"2B2B 2B2B 2BEC B0EC B0EC B0C0 2BFF FFFF"            /* +++++ì°ì°ì°À+ÿÿÿ */
+       $"FFEC C0EC FFFF FFFF 0000 0000 FF2B 2B2B"            /* ÿìÀìÿÿÿÿ....ÿ+++ */
+       $"2B2B 2B2B 2BEC FCB0 B0EC B02B 2B2B FFC0"            /* +++++ìü°°ì°+++ÿÀ */
+       $"ECC0 ECC0 ECC0 FF00 0000 00FF 2B2B 2B2B"            /* ìÀìÀìÀÿ....ÿ++++ */
+       $"2B2B 2B2B 2BEC B0B0 B0EC B02B 2B2B 2BFF"            /* +++++ì°°°ì°++++ÿ */
+       $"C0EC C0EC C0FF 0000 0000 FF2B 2B2B 2B2B"            /* ÀìÀìÀÿ....ÿ+++++ */
+       $"2B2B 2B2B C0EC EC00 B0B0 EC2B 2B2B 2B2B"            /* ++++Àìì.°°ì+++++ */
+       $"FFC0 ECC0 FF00 0000 00FF 2B2B 2B2B 2B2B"            /* ÿÀìÀÿ....ÿ++++++ */
+       $"2B2B 2B2B 2BF9 B0F9 B0EC C02B 2B2B 2B2B"            /* +++++ù°ù°ìÀ+++++ */
+       $"2BFF C0FF 2BFF 0000 FF2B 2B2B 2B2B 2B2B"            /* +ÿÀÿ+ÿ..ÿ+++++++ */
+       $"2B2B 2B2B ECEC EC00 B0B0 EC2B 2B2B 2B2B"            /* ++++ììì.°°ì+++++ */
+       $"2B2B FF2B 2B2B FF00 00FF 2B2B 2B2B 2B2B"            /* ++ÿ+++ÿ..ÿ++++++ */
+       $"2B2B 2B2B ECEC B02B B0EC B02B 2B2B 2B2B"            /* ++++ìì°+°ì°+++++ */
+       $"2B2B 2B2B 2B2B 2BFF 0000 FF2B 2B2B 2B2B"            /* +++++++ÿ..ÿ+++++ */
+       $"2B2B 2B2B ECEC EC00 FCEC F92B 2B2B 2B2B"            /* ++++ììì.üìù+++++ */
+       $"2B2B 2B2B 2B2B FF00 0000 00FF 2B2B 2B2B"            /* ++++++ÿ....ÿ++++ */
+       $"2B2B 2B2B 2BEC B000 ECB0 EC2B 2B2B 2B2B"            /* +++++ì°.ì°ì+++++ */
+       $"2B2B 2B2B 2BFF 0000 0000 0000 FF2B 2B2B"            /* +++++ÿ......ÿ+++ */
+       $"2B2B 2B2B 2BEC FC2B B0FC 2B2B 2B2B 2B2B"            /* +++++ìü+°ü++++++ */
+       $"2B2B 2B2B FF00 0000 0000 0000 00FF 2B2B"            /* ++++ÿ........ÿ++ */
+       $"2B2B 2B2B 2BEC B000 B0EC EC2B 2B2B 2B2B"            /* +++++ì°.°ìì+++++ */
+       $"2B2B 2BFF 0000 0000 0000 0000 0000 FF2B"            /* +++ÿ..........ÿ+ */
+       $"2B2B 2B2B 2B2B B000 7FB0 2B2B 2B2B 2B2B"            /* ++++++°..°++++++ */
+       $"2B2B FF00 0000 0000 0000 0000 0000 00FF"            /* ++ÿ............ÿ */
+       $"2B2B 2B2B 2B2B B000 B0EC 2B2B 2B2B 2B2B"            /* ++++++°.°ì++++++ */
+       $"2BFF 0000 0000 0000 0000 0000 0000 0000"            /* +ÿ.............. */
+       $"FF2B 2B2B 2B2B F900 B02B 2B2B 2B2B 2B2B"            /* ÿ+++++ù.°+++++++ */
+       $"FF00 0000 0000 0000 0000 0000 0000 0000"            /* ÿ............... */
+       $"00FF 2B2B 2B2B F900 F92B 2B2B 2B2B 2BFF"            /* .ÿ++++ù.ù++++++ÿ */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 FF2B 2B2B F900 F92B 2B2B 2B2B FF00"            /* ..ÿ+++ù.ù+++++ÿ. */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 00FF 2B2B F900 F92B 2B2B 2BFF 0000"            /* ...ÿ++ù.ù++++ÿ.. */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 FF2B 2B00 2B2B 2B2B FF00 0000"            /* ....ÿ++.++++ÿ... */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 00FF 2BF9 2B2B 2BFF 0000 0000"            /* .....ÿ+ù+++ÿ.... */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 0000 FF2B 2B2B FF00 0000 0000"            /* ......ÿ+++ÿ..... */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 0000 00FF 2BFF 0000 0000 0000"            /* .......ÿ+ÿ...... */
+       $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */
+       $"0000 0000 0000 0000 FF00 0000 0000 0000"            /* ........ÿ....... */
+       $"0000 0000 0000 0000"                                /* ........ */
+};
diff --git a/tk/mac/tkMacAppearanceStubs.c b/tk/mac/tkMacAppearanceStubs.c
new file mode 100644 (file)
index 0000000..0c44864
--- /dev/null
@@ -0,0 +1,106 @@
+/* 
+ * tkMacAppearanceStubs.c --
+ *
+ *     This file contains stubs for some MacOS8.6+ Toolbox calls that
+ *      are not contained in any of the CFM68K stubs libraries.  Their
+ *      use must be conditionalized by checks (usually for Appearance version
+ *      greater than 1.1), so they will never get called on a CFM68k system.
+ *      Putting in the stubs means I don't have to clutter the code BOTH
+ *      with appearance version checks & #ifdef GENERATING_CFM68K...
+ *
+ * Copyright (c) 1999 Scriptics Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * 
+ */
+
+#include <MacWindows.h>
+#include <Appearance.h>
+
+/* Export these calls from the Tk library, since we may need to use
+ * them in shell calls.
+ */
+  
+#pragma export on
+pascal OSStatus
+MoveWindowStructure(
+    WindowPtr window, 
+    short hGlobal, 
+    short vGlobal)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+
+}
+
+pascal OSStatus
+CreateNewWindow(
+    WindowClass windowClass, 
+    WindowAttributes attributes, 
+    const Rect *bounds, 
+    WindowPtr *outWindow)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+
+}
+
+pascal WindowPtr
+FrontNonFloatingWindow()
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return NULL;
+}
+
+pascal OSStatus
+GetWindowClass(
+    WindowPtr window,
+    WindowClass *outClass)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+}
+
+pascal OSStatus
+ApplyThemeBackground(
+    ThemeBackgroundKind inKind,
+    const Rect* bounds,
+    ThemeDrawState inState,
+    SInt16 inDepth,
+    Boolean inColorDev)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+}
+
+pascal OSStatus
+InitFloatingWindows(void)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+}
+
+pascal OSStatus
+ShowFloatingWindows(void)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+}
+
+pascal OSStatus
+HideFloatingWindows(void)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return noErr;
+}
+
+pascal Boolean
+IsValidWindowPtr(GrafPtr grafPort)
+{
+    panic("Error: Running stub for PPC-Only routine");
+    return true;
+}
+
+#pragma export reset
diff --git a/tk/mac/tkMacConfig.c b/tk/mac/tkMacConfig.c
new file mode 100644 (file)
index 0000000..cf5ba08
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+ * tkMacConfig.c --
+ *
+ *     This module implements the Macintosh system defaults for
+ *     the configuration package.
+ *
+ * Copyright (c) 1997 by Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tk.h"
+#include "tkInt.h"
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkpGetSystemDefault --
+ *
+ *     Given a dbName and className for a configuration option,
+ *     return a string representation of the option.
+ *
+ * Results:
+ *     Returns a Tk_Uid that is the string identifier that identifies
+ *     this option. Returns NULL if there are no system defaults
+ *     that match this pair.
+ *
+ * Side effects:
+ *     None, once the package is initialized.
+ *
+ *----------------------------------------------------------------------
+ */
+
+Tcl_Obj *
+TkpGetSystemDefault(
+    Tk_Window tkwin,           /* A window to use. */
+    char *dbName,              /* The option database name. */
+    char *className)           /* The name of the option class. */
+{
+    return NULL;
+}
+
diff --git a/tk/mac/tkMacProjects.sea.hqx b/tk/mac/tkMacProjects.sea.hqx
new file mode 100644 (file)
index 0000000..56c4c86
--- /dev/null
@@ -0,0 +1,2952 @@
+(This file must be converted with BinHex 4.0)
+:"R4V,R0PB3""8&"-BA9cG#!!N!1@&3!"P3mV5&0dG@CQ5A3J+'-T-6Nj0bda16N
+i)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bjKE'&NC'PZFhPc,Q0
+[E5p6G(9QCNPd,`d+'J!&%!!!PK8!N!0b!!%!N!0brcJ0TD95CA0PFRCPC+@P!+@
+3"!%!!$)!3,3GFADeGBBE!*!0!P2P!*!$b!!+bj!!!!#963!$G'X!!&9d!%i!$!'
+!!Ed$i!#3!i%$"rrirr$$3!!!J!#3"k@3"!%!!$S!!,5Kk8#eGBB3!*!$FJ!!$"N
+!N!0b!!T4MJ!!Ge3!!!Vc!*!%$`"8Dep04%9',Xq!!!#A[%e08(*$9dP&!3#3$i!
+!N!G#`G5k3PH`5A9,6'dL5XCiri8jld(5Ui8@CKHM[(RT9G-i*ZpVPpC`6-pSFT9
+S)fkfeI'9F!eV%30Z'&M6f3Rck)k85U"j(Vh[@Z#c95Z+R-ZI&19I0[`'"5JH5NH
+,-rahGL%'ZK"V[60Rj8XkZZ!Hqd8L,-fKI+r``r`Akf8%B,SIkK+Pb%K&Hl4r'Ni
+3EaY!`C80H1LP(h4M&ZB4IA594@!KaFP'*+1@c49UZC[Slk,i2br@![rS5!Fcd*q
+k92Mi5H$JE5)qPfNKBN,YHVQpC[aPH[$,(U([rc@Ra50il"+[2RYKijP-QP6Y,YR
+SP*!!MA@3!%3XCqS!S[H5#C2S+$HC)PdC4+$G5J)p4D2-0,()Q)1QlcHc&#q(I9p
+G6[U0cHD52aN*!$K+lI,0lEHa"dF1&GL'Si5E3VGN$,MIpB@2hI5Gb!N[Uj0Ga$&
+!5F!F!Y0))(+,imKTQaYJbbdkM+TLkPRfYN+%dHEe`%krcUJ"TC*H[YmpdcKSLEh
+N1Z3$b*NE3!+!e)c00N)2qD4NYXk"[`mhC!cm`$SQeeM1Z,i1KP-aeJI'Akk*AS!
+%E@kjYC!!%*TGEcZ02b[Af+,AjNHZ24a$,V+ZX*`P*'i!*1a-LqGKaY[`$h!DB"q
+4@+%'FL+#MpQa`aY'B`1&-'l4K[35#&C1F#mCJhRFqUB!e9BL1IcQ&i[cT)f5Qb(
+I!(Fj5bmXXcbHaSEp@lK`5$@-G4rZFl!8Rf1D0qU$3IUA6Rr&6A566jJU5%p2a@q
+6P@T8L`Q'j"$GEd4mE1&!)rekPQDa!dDfbhbUm5Tm9aZNdN(l-AeNZY8+N!!)l@Q
+EA,")Xr$NAe9S,*!!D"jR*VCY4HL1P!Qq(N3S5LqET9I82+RmcC)f[EEF"[6MaZD
+5(meqp90DkM2SkTi(Y*CEGjYLrXPjBK05Q"dD"*5%GpBIMLkm*+M[a)e%8ZPMCPk
+$Ykhd(2$+&4&d`0MHGB`cB#N6N4iJ+SMf*+[FVZ&V6V5h2QIhZcNc0BDDHH+&(4E
+iSJqq-V0KieMDTTKSGKa6P,D4,lD,M[f3!")0Rh"kb(UbB`Cb--33c#U,k4AqX[p
+f1N-B[0kBH)%CBlV3XCQQiY*Br2`l'U"8e1rXf4,5+Zmm-+6,8VN5#XeH44QPKaR
+'p`0JH5%#D5jE(G0QSd%N8VfXLA+8V5T$Bq$9H(#Xc`-G6RV9Q"cTp5kBNT8Gi"f
+kF1h[8kmE%c5["l+"dRGaYpqI$d,!%!'PMEJC'L949A04arcX@q0UcVNIV4KhffM
+iN!$PFdK0[,Dd9p3C554PAC8-h0PH`,"b,)U@q'KH65mE`YY`1GfL"Ie[UR2&DkJ
+aLM,d-UE2mkEmQr5K0ZiG"h"X,+U"qGlr+&G+3fYP1Z28CT!!k4c`R')AVAXIX%C
+UkYjZ`q#62'5[&lT'f3&`ZR"Xrp)-1$,AI23Fra#I#jAcG[h+b(B51kbc(%)ep9U
+fV"NLA!XC8MrYc`EH3!YJ(XG$G3`-$J9qeFhI2hNpNeQAL&iNlVl#qQG#jmL+&8Z
+l+!hS[%jH2Hfmr[lM8H"5$p39D+8q$*0DL%N)AVFRKLS@Deh+aA$Y!N[3PHjY"Yc
+KEM@CaB65ei%J-+0Be*3CrF"ef5B1Dq&3GjNJ91"c(*Q&VQKhBZmXbYc2Ekcd%8R
+""iJ`!bQS+BY(-a#R)lDi"$[0J5*9&`Y"r%8Tk!1bhjJNBT0G+aVN5FdD41$E(&"
+0%j%62,EhSj1PhL[H*GT(lkl4K2bRXaSD52lLB!*KQRYb&8LIPhr8LD*NNCMVff6
+QV2hpmK9G&Q6F(1&`!1c%"-AR@ZBp%GBLaDNf#F5`lfrpb'8IbB'pA'ekFY9Q#R*
+'-19[+j@6JIm$96SaHadXVfb(!6EjA+Lk'aL%NkXCS5dS&IPBh3T2Q!fU#Ea13Ni
+*HHd5NDJR`1)ep9h)d!VcpD5[aiT-0#@F4IS6M1mf)X4BYMY"YSBI5d+`aS9#EdT
+lYmkL*2L2,!RkG)9F`ELJP#$R%5D6*h12H(G4RmL-[)4T$$$AmIe&jSX-5kV`6p'
+03ddPDZE[TheIlGdP&p,E1Rr#fB9Cd%HmDCTT'(@-f9[@81RM0%q3!&"+jHkJ2IP
+Z++-*SI+3!$r)5Nf@kGA+!lVmlA,#'r&d980i9245m9e+R!*UT$k6$*!!T5!S"re
+3JbmlId"l2mINjhFY)2+h)em$TU#Gd3S1F`mMF[%LH0GQci['U3R8E*5"Z3HX*8X
+FR!&(e`LJU@99DE*PU,I[+#Xi'P11[LeaCLQKPhmUF"Tkp+C6EbeUH+XkNa*IlcB
+IY$G+U5#L%aYafJBEZp8Yf6b#J9V`JjXX+@SMh!H,!-)Ac-'&&1-HZ3CM!mS[6Y1
+A!Xjj@Q"%)I[G'Dk'lmrpD%jjr)j@5KJ"6N!a)cQLYr9Qb6Hdh)YYSjbal!j`21d
+CfS85,d'l0)Kc,mI346(+mUmh-`l2N!#'JP!Xh+q-E[[5qpbKHaS!cm3NF%iQZCQ
+dNajdF&N-&KVV*M6j156C(LE$j$i%j1crl1+%TFh5cJ!'N!$!qH)dH#qhICRH0G8
+9Tk2[X09`DDfV)Ke8UL0TKHLjS"([)l9+&fjq!!'4ccNU@PD2F9H@N!!8cTJJ)Nh
+&ffC8#jKT&iDRa#`'"[fRUTbriPqe5pS#Xi*`,0DCp*aDGQ`[ea2'c4!F%$1M6S[
+fci"-GN**(lD$*4,$f&a%1@0TZ8`F6U`!D"!6,99iTA`Q'!q)N!"UEJX[9HQZa@i
+j3k-Ebp#(56+Yb4q6dL35)6d&kGi1(Nl6M&9H6G4@Cl&jkXL(42bpH#eL+!mUa6Z
+R%0qrJ8PpPjN00KVabJ*[#E4AEdTf2'8Grme"GCqq+ViC*3pPh`EH'2Hk-MQ(AT`
+TB+MFqF!%Fb2G`lb@+LG%-$6L$4BK*mJUdM+3!*a8"'8Gdh&+iHRp5BGR0h5I-#X
+qBr6$G#N2PAZbZR&)FT0(`cFCbE%#SNrjp"X1'+#+6V3L!T!!G(X(I3-URKjhCe-
+K4BUc6B0ll@q)J+N$DlmT4[Gk+eUahViU820c@10-JF5Af!qJUIUN`)*FZBcPb6C
+2QKck$`,0*%lIef&M2U@,C5pI,Y%2,lb,,1Ca(+UM!)pEQA889j)6-b'SNMLB`#N
+9dLHFG1AZEP$-"EIIfMiRbC4SkYklD@Sf+&M-U'`J"F(H!C&YXr*lmGQF'(lT(pN
+CCYYLNG`64N#m!m*+rQDZ,TkXj+++q(SJlJjm"c"HY0`jZ[U&S4XL%46bDmMlM,$
+pj[eaM)&"HqN&MZa@C999AlKbBL-cA$dlbE++R$idhQd51T+XF44GM#cN9XiQ2U%
+FYAJXZH@9qL)i%R9+H"Gl6Sj2FZPmZjA#C"1LU9Khc)V45@3bA!*i33%`c%0ea2L
+'(L5CCd+8'Sd2*hbk,'lqm@XhhadXF$D$RVXHRpG80IP2X6qIj8)+DmY0qZ-1*36
+L1f,mlr%EG*rl9mk[ID$+-k6q8cc0AXkMKY'$"cVY#[M#!l1Yrbb(+pkcP*98F'6
+f`,J&#kNS")VXGdmXZilK+B&9FXZ6,0NpFjHC4iUHLG8bhK($Z@GT8M(CqVlRN9i
+H!hlap03M0RX8B*Q4&NHYM#3J8VrZ#Y)fTK6HJTcpb&r`bPKrbmY31*d(N8"$G(Y
+EDZ!hMLeP2@TF+2T1fZi$r!1JSq$89H22rq#"f4i*Ue2mrY$ipRf("pEEQ%j-CZ4
+hqDmYJ&peSG84rRi3H0UFNe&f`&a8k1%KSqB)Mpc*GiZA$lS"A!#PN!3"!!!q!!#
+dSHR'YA@'#!#3!mJ!!&0F!*!$FJ!16bX!"8VK!!"'i3#3"!m!9'Y-D@*bBA*TCA-
+Zci!!!*Hm68e3FN0A588"!*!2J!#3"d,"e2Sc!8A#-I&2&UGJmPKbdYp#28jJISH
+breV!QBGTTAK'iDkH3)00DM+kHYbYJYZ95@U`@TJS-YI"c[+bT[#+LE0XJr4eU2L
+4R(RDHh[p"'UG*V`!Hq(-qahId9E5'Kr9mrKmNmU'[G*qU1CNM*GMM`lD#)MR2-@
+N,ARd,1CH6VEa"[lBT4QYk$hkjk9"Qb&jIT!!5bpZ1%[Q4k06EM@!iG,TL8BF,p&
+j4"iI'HU$Z3d&Kca+MT8#6@+3!0V5@KpFDqZR,$`(c!@bpXci&A[QLIh$+32-DD`
+8VLNAr9$*0DU,A*'e%4F'G@r9CP0rf#Zp"pUZ`j['!qP8Bkp6mjER-DL+-hGXRR%
+YKP#P'2EcABq1+TK+K)X0$)6lRDpG,GHJTD&0ZcV#JTVGE#EJJ[2L8563Epd$AM!
+pHJNSR"*RmC1IQG&f29+B6KMJXTIlPT5pEaafRaQT)8fre-HZB',pTa'F,#V1a9R
+9iTSq0`3KIT&DCQ)%j@eYKHE9a@9A4jB`[E#)I2NH&%rEjmeli4K@acm%!jQ,(0l
+(0!2LFmXiCNPlP-TqR$,T1MrU88qEYr9)ADebfKZ&j8IGUQ,G+2@e'`acLkBR&Y!
+"YXe["NhDfZmh4bPKX*!!8U'8!9)VqH@#T`PDUSrpZ",Um"Nb5JISGZ+LLiqr,+b
+(0rHQYa&A!LUij80R1,GmH8QcfN$Ka[PJ0"UATR)XNUid5V92PNaEPGQ5RdL)9XS
+*fMh(FI3IdRKPT3dYF`akAL@UQrc1V@AjS@r(r,k3!10cTj8edpACreDdkK6lK2)
+K#jZ1BPiTf4H0U21e+IZXTmiMeM@cNT8+ca`*2rfJC5'S'"1,1JRf,Dk@EGI)Xb4
+k%VYLQ&)mF"b9CNUDBXh8NEr[#Gb"h9j#`"apS@,qhX(b502'L[p+DJeJcS56NLh
+%8e`!Ar#0DLQNG$CkR"da,3,1!6*BlP!I8`!HGk9,bSGf&*%%cQ)*,em-4qMeV*!
+!0Se!%9IST'l@!b-+H`h0Mi[`kKe4apUl-%0r-*aKEN'V!p5U!6PpPHGEei)SjVf
+"(Bki0aVcCb8fmUZF0L5a4UX-f*ULS#XIJmMXH3rrB4K,G%BjPBT0f8)mmHTZ!Zb
+UN!#PV`JHkqk+jS$XcU52Q05J4e@HbI@-cS&%dMDk1XZ0C!B"h@P"Vd@KfEZ,C%R
+G'T!!J)Nq@FJC6lD#c+!K[eDiIBN"+Lm0-JTm4Vl"1STT&pYfM-SAUL``mK%i+kI
+dXV4U[*8['irqR0-`GLeS38&iHc60G'2ha6`9hr`F24KCb'dcB[+0G"h&-E,3Lp3
+YVpP3ADhd6UIVKV-1YbP&VYA9eL-'#K-2T$Y'6MU3!!c!HKQ[bAe"cL+$ec5QjT-
+dqkmKGa2",-Q@1FbT9(4@%1`5c(8`IQ2U2(@m**(QZ2#(0`ch2fS`R3Y%jM`#4NT
+VS!2rE`C4iPMG5CZdRe2$)f8rbS)(INVj$S1j&i-[FUhB(%&L'AX&685CLe5U9+T
+6pHjpEND8i*pb(G'3!)ShiL6!#F6+JX[ZJdCrJqBLcIUpei#`KLXD)$PGF+,Yrjr
+&PIbYRpp6rC6R*Ll)edqF-&T0qFTNk'D3!!9E#RpReRf0`0[I`Giq!bLQRaYlc%E
+f-qGfLpi96jJ"'QTH!A@T0MLX-SrZ3R,kX-!Sb01,`4,EZFXR,@di9mE$Kd``Sh3
+4"kk$VpV'krAA,k0&0"TpBeZPj8"cR-@4B1TqR#Ir)GJ(a%KL&'5N`#,MdT1$aMY
+9#kPLSM4l"-'Ia@E4[YPdC5Q5&2C`DQHXY![Pc!R[X-"[XZ-jpKf,m0Gb(#p3,AD
+d2A!4Yb8+ZQDbjSB$0Z#2V'9`+&m[Z!@Qma#q+rQe!c49'!),U8ck2P*krA'm)rA
+iSKbHPp8,J3hidRp6h$0([CBV9Fr%q$2cqR@aQV5fjVR`Bq[K#(A+#SR,L)5pEDV
+,F9F`qh3I%Z5,D[5JZFY`4JUVUqaVXq1pGTjqE"8l,F"rh5c`+[C&bBG&1m2U[US
+TS6k)*!XB6A0Xa$@p(2%HFSkTbHLM*1p$B'Km)&RZR@qD4Vp"rEeG0IB(6R6TE!$
+e05p5ZbYh4#aQYJ$,aqFQ@X3DB%9&Mq)@kmpK[hM#Q5l3qM"3[X8@AQpZ[,'QkKd
+'fqiMGeeb9550*S`ca[0iTMY%,H0bpj4!6C*eCNQ"8rU-fBhGeR)dN!$Lr5+jc9l
+)q5&6$BG#@[Kfl`-idpVDlii03dp(Rid"CLp#k5VqGU,0l$h[$Y4p#HM*G54JUYE
+4[LdBbV1Q)P#)CKTE%#0Q2pUVMZB#Ce!pHH8,IK2VCQR&G*JpMRUG8[G9MBrH4dr
+X8D5TDCVfJ0ipF1'3!+@Yf2kj#hmG9@,KGeMp*VNCF%!dUF1B6hmb)(44UrAZU9H
+rrUFpGrGASRbDjCB"(8H[j-p(C-`41CmF(Xr9BmL&&%B-cY@&pKi4e[rQ6d-p$GB
+*%YbXa+X3HKc+hl%ecBM"F+B0iNEm5h&#Ui$pLQ9kSJ6L4Q9Zjm[41bVlhE2@'Kr
+@!41YE)3CUPeJV5G*)T&)lmB8JM+b,rRE+JIX!R%BSYl-GT,4YL)cLQ'N'FG2@Xl
+L*#+2+9A'CQ+N)6(UH2DpbKBbT0LRE96L&+)keA-CBdfSQ#8a3e1fFRb!6BU#qmT
+$*Z0'bIaGR*R"XHT3bC@eM2F,@"#kbXk8phZ9'a1e-pDQElqV9[MFH(%3eMUf2aV
+GM)Y"@[ZANhpM@-i&q!5cFqVMQT%EP+$CbYFf2S3B[&dl6ZI5&+BNbY!hPqS`H4[
+@J0i-54cGr@XpPjV%Rhj&!Y$@U!YTL'2U"pGH*2JEeAbEB(*0(C0m#LiS4iSZC`M
+aLmfQkfXPd![EV0(&(Lm#6lGA`f!akS)D9@X1#bTp8KKSNbkJDXNYlN9Dc4"bNDF
+kfU58VJ'ZCIZpT+#j%`(FQHPSr2BGF(0`k&iZ[3Kf`5V$D2Kh`)R2RF&FE6'3!(Y
+`PMRpa!I-*b14pY+H`iJ'UiPLKTc$&*jb@mThm18p1Hrp&*-Np)K'HD3q#H[S+&Y
+`fBK@*jJ'd%C@Xr+1$4"&mBLY%"QX1pT980i&fKAL,)ff1RR%'`2PKFcUh0dN2YD
+SICZ162e4%RU581E0,Qbq6)fTD*l+k!ZbSEGL[583,!V3*(Mi5Q#"RDik*jLcjTL
+6P6&HJK6LPCq)91@+Fj%-3*m8"XRi`A5phR&'(8&F%ki"kMjB#Gb*"HEG6q`8aHf
+D-*iD%LZ2lK92Jc2#!,0L-Pm*FKIKUAjND0,NHDS"[E2p8j9,YhQUG9`3l&hb!S(
+YFYBjK4fZ(,2r5j+T4'fQ,ic$1f&UF$d9`BPNLp'jL%2QG9HJ2A1Bk*3(j9Nl"YR
+c0PQQ3[+U+Zd5dP+1*%#YpBSTqI(Ep-aM+L"&&'Ak)5#+)FXpSZdp%5K4fm8m6k1
+JT+(iP@Hq!QA!88BC3@5+rYmVI(HB91&P#&J4[k[+"E6bM3mAHH&CCSPmqe0mT)(
+a-2Im#5%5R#,pL@e#GRA,bUZYP!@Hhm,B3`PG*'lL`PXCMKl-2H-*$Z!lG9QCh,4
+UMfk1,mp&)S(PUB"f3SI'mN2kH(limiB1*KaaF[J1$0DSYU,dXHL2$K-@"A[5Tr-
++LG@apMX!HCIC3CCNei"9EJmH&+Cf!ET3RL,#Zdi"pH""Qk&MmbCDFDfiQS9V-BV
++6&9,mAN9qB4dSEj2$eiM#S11`F@lX)%(h8,GZ8%#2bZhibLIY$!ATd2NF[2'[L+
+EkmAc2&bClRGd%BD2IUeSb5AhYL4U,#M-J(kpFmjXGGTFrE41M[88rI9Eq!f`ELh
+3IZi[RU'491k9GGH[5"%bZ#j$+8P'$@mS!amVHeQeeZkMSDl-#kQGPq0VSK9(pAE
+ZKI0#S)+@&F$&H'eTq@,'CP3JS'k@j+XFNlaHprMkh2M9dC!!Aq)T*j8PH#8%"mc
+[f6Pc,cNU2,Z+ii"AMPhPf(@d,@3($CZ%mkrJdGIQiLZ"Gh4dlB9B0)0KGj,8[)Y
+@mCSJ$0lp%1jir$Qd%8A0KI*2,'EHKAk[%d9QArDL#GXY2T3)LIPDb+dA#6(b8(@
+-5jF4a2@!#G[5IBEZ-$13!*bCNC[`3a%%j1PY,mk%a*3K93aq,hJ83TSGkqCZG`#
+813rA#YB4rFP*9)%d"9-AbaR&PVIEU4SKihZmI*LkbET#%-SBCmS&Ji%0%jfASKp
+6!CI&FCTb2bFBZ"8FAVfX&-Z$Z`mjX"'PUiL2DVI3$leUFRp1J-"J)pT!D4e*brr
+SU9Nc8Ta(IcEG8)UL2VH+BjD19#Q@00"[S(CCVeN++2Zl6$kHF%9&"b4e-GiINHp
+0$AlN(5dX8"YfIq2ClG&e1X-bT@iX6+0qT1EbR`(CPl+'J9HL!a$)C6k-pSD))BJ
+l9Ji+4K9`ArPljpE5rGjf$EQXaF1HX,dkHN6X@NEBM*e4Z4RrCpErC)lL`Zf@9qd
+PE+G)HNrXh&f`6FA6V#qZ-[+f(&6MYMrPrJ5"H1dAPY54GjAr!G8*dh"-fKl15-i
+9Ze6TXS&!q%pcb6V0XM-E6fVaQD1NeZIX2lcj*f!DY8X3'BCGmafp3qeNI$$NN!$
+A06[`KhrRkA#,Cljf8m4ed0YBPac@dT%CT[bP%Z6JIXH,BC-SkP)Y(T!!E"DaKrT
+@(hL-Vq"%Zji8Dk!i8"r42`BNMCmF4CjUcUXmZK*'Qr-9++4ZiYk5Ml+a#1&(JRi
+TC62C0"RP8@M$Pie5-c#Ck!#4#LD)"ddmK"b&@I0@ZKH)mJYk%4`+b5QPPVP"CrG
+EHLBlU'`aAJ92j*VRH8*3'fTHXArZi3c)XAQ2T&10fK'D0PhEZ*p@8B[50+*!#m,
+DrU(p+cIfX2`hIfV)jPq6Cm9`YN)2P8)18USHV+b$!NarUR0@4YcF+&,+5@QdVM9
+kRq#eB"A%aG8rdCUjbGj(F8Lp9f04Z*cpDM)UJY5US,[%f$i$9k,)VG'PrjP!D"$
+$MhS,1)3XhZChbIIpkf2aIC*TPf)0*AC'b)'+%U9"c0C35pXM&+pHVbC@DcjklHK
+kkKi8$4Dj$me,3`ZHpMj#*"LiT-!M@q)R*`PKP3Ii6++[RBK1*3$'142#h3Ek'")
+`LIa`!+2SG#RZAY5l+r9qBISfViKp9jf4Lm&LIdrB[pK%NUH(Z,1Q0c*#Q8'p&+%
+"br%ip#0fX8--143b6m%`Ki$aY!kR$9VDP6,qjV9`0r-UJER$M%P"LD5&0SXR8#f
+M)a"Z'jK@4XKrApU"'GNNCC'bhr$Nkil[5lp1fVZAY`QcaP43Jb4`K"8%rM94$*h
+e@35cQ$[Z[-VC`Ckb!ad2h2Q$rHBT"j)-iM"3'@NB-XVmhEYR*%!4Y-9dDfd2i)Z
++"1#rDB5I-6"bddfrH558RDDpelj-%q$-dV@[h,kR85RCr[5FN5iEce")jIhDA4j
+h'#Qh&q`4G+0"J#j!+*R@I33CRMJ&&llcC8i&)54NlGF5Q#1'&C!!"ed*2p,M0JH
+MBPEVM1P#DVN("$K(3JYVNDBQa(GK*'JQTa89!$Q[Jmq)mcm2(UqZCk%""'lC&pe
+BpkBkdP,p1ld5A$V#9+eVmHArP#i!H9rZ$`c`PU%Zr'h#j#Nrc!&kQN@922Yh+`m
+F!`pNZG-U,fk!1f%UP%Dqeerq#CDIZ9alQE'lGYX)AC!!HFC%84%*!EY`CU(@jD[
+U'GU-f*qlk1M+A`N@af[rkpdY!DQHc,(jlG#Q25GL6`9,8IR1laYVTVUjYAkF54R
+d#XV2B,5$)ilR1BrGi#Jlb[Fe8*1'0J6BV5r-)VfrhiLKf)YNdD,iQNLCG6BJ(QC
+F99NEjcVE4i"Rr@Y8P'80%LJ*Q1V[-E`XTlR0XV,34I!lb5@&j(lH`-X8Tjb2ak+
+K96#2rf@dJ1SbKG9J6@K2%+kdMC*'+BSMR'P#NL%eL*BC&JSb8jKhY1mm@cA5'EZ
+(PXPBDDiTH[8Q5rlNd0GR3!$GHJEV`KaGim%kHiE"IY&hFjNT)1!"#DR"eG,rYqh
+@MDEUH)Md"JXKhBK"UZ,4ZQY&j3mJqaQf"eXiY[epZ#HhbcfYFLNae%ffZpihjp`
+ZpIVdi6bj'8rkMka+%XkVEQ%@9Abk[G*$4!5!2eLC2k,SrehT+0Ri2dX#mc&M"$E
+jmRH(8RhZ!')KAFRHE%DfBp5i%M%aGeAR#B@[D"m(Q63iCIP5[)DF)2km(Za40&S
+h-K@@l`b!0EN$TU95FM8bS*ffdL,[+q%6q'YJGfDleCcGG5H!`'Y`6iZ(II,5hI3
+m[G&Q%Vm[cE8P$P`!m'ldN[`$#BFhRS[lb2djZjX536*C-K"+,fUL[d*XeTk2l9G
+l#04h5iILQVF+9IapLEh-I1P(c,%9bT-f#meM(Zp)QVFbSba#IH1XG*!!miXhGe!
+Fd%Ubq6mb(Ij[e03XJAhCVM`4M1JJm-LLQ8j!YLC1qT!!h0Z-Dr`93bFfi66@3qb
+$1(3@j6%H$,&J2dJ)!@M,((SKM6Dfp2C3i@KF$l#`VDX*64f-HipqF)HKqEJh!3I
+MJJ1lZA!T2Z-%KT8Y!NeZ8E5-Z5A2MDKEdk3!'E8m[KCp4LQIp34'H1'%HN*2)3j
+dZ!ppVIQHm'%BTr8hT2H"X2eplhIceSd@QUQrXD,SH9N0de"RdQU#Crkl5"FkmXF
+!FAa)0`#aJR,k+H#EQAkD#Xk$!@ZH(4b'@d&JC0fYRPGAFmlY3FX*1m8#(TiB(j[
+H)DM-GljT#)VPa+cSKlmi#!X(Z4-D&#ZIN!"Jp*+Q*-8+9`I5imNAP[HXf8YA+bR
+)QQY0GrFQ5$S$ld)&eLNCU)#!K$QArTlhGM,(Y@X"9ck)2$beZ*Icl$QJlU,EDkq
+Mb8Ka5-H(SS$MhH[Ec@P5B+kaUm+YQeGLbHE4)'DGKhGM"'@EaR`YVH)eVKQQ,Z*
+BN!$"LGKJKh(3AK!bikifAUfDQJXjP9ELm2)&5D+h)8*J!#9`k%bN+i[Mf'D3!)c
+`lZF9Y8BK0TN`aDMI%DhK430B4Ya#'aJkPi'&`&1546V#ZCA+pkTP""5&H'HFfam
+Q@d$T0Y@[4*'Zm&a(QXU,5LcN$A4!YIpQQRaTBq@+hpJ#aEPNB$6+Sc0H+rI8G#J
++%Sk1N@IC,6h31lq',YS[h)+iLT'LA,eZ1G&kZQ!$UX`&aFF$!ZKXB9ElAPY%iR)
+UeB-*beh)6*)[8#a4ML,KKK*`b@SUQ-i4kc3Eqh+JFrSGm19RC%F4r2I@#U,&)T3
+0"fe$Ua5k)3Ip*GSIelY[*@YC`C3h#TDf[RZ!k`*k-p@KdJSh)!bG3ad"5R"NB-E
+52hA'j!a&(e0-TcF4G-2r4lbRhM&P)ab+9+Q(*`Z*a"JXJj@q##`(RcHSH`a@9"M
+IDCNM[-+lU-fel%NHM@!pPF89jqB65fH8b3+DL-i0Nd0A(Pp'SA!e(`"N+2#SIGj
+@-US%c8mC&#XdT"B@8LAr[%!iKHLp$!VkpSeN%JP`VK9mE%6h+*a5Yaj4@pG@UC@
+XM94$eM-i&bLYajFbj1ScANahM'@)G-q4K4Rd00m-Gf4F1PN3%r9cRcm$Pa2P0+4
+'0iTa`c(CM3FKeaEY(4eA3[2Z@X[H4mbS'C32&q'aF%M8if,iiK8M'pKdm`3UpV$
+cm0jAG*9qR8DATPM6STjFR[riJ6MK1+Xq@'BIq+hcCbX8&45d*d2Q#kCflfG1M%5
+ihEEj,eM0+[f9lhqlkR&HUY@e2-M"+%)`br*r9&H86MM+mP$pZ1Y`NeTdB83%)mE
+3iIVZ(,!@F`15`@Tkqp(dNdBkT[iQqqij,8YMh(eP[kVKbrX-3TdKk8ePC4QG$CD
+mEPd&f2)Ji6qTfM)I*c3$@3,QLUIl`!5FfCRSYE39*0J-T"eQEAm&eqk!8fbfR@N
+qi4*Ne5$*iU&60Jiq2SbBX$Qk1ld"1br%Zr!h+Md@k#DA&4%2f2%XSU4,3IS&#j*
+ZS)r#Q$SkP4)0"S56DPHpFMN$++b*3RjbV"MLThJTE6IZDYFB3ldC[-55a"IbmNH
+85!$i`8iSSkKPp3(L)'22CF!"-liXeL(`36LC8YM9'@jXj9e*)frS%$E&ib5k#Pr
+h+pS8k,9ii4kBM#!P!FrGZ*ek@DRR[D$c3V-0mBQI%V&Th`c[4Tdc&liedMV!P-k
+DG,51I4jcdkAc4pb-LP$0Gjf%qY+'6%rhHld,BM[Fq`0mZ&!,rb1Ea4a3S6%diGH
+!lDEZAhIV&RX-)42kfk059(90fE1N%')E!AXkAh0T2R[Fph3cJUT$KmL9*YR)YS[
+JbI0MmFEG*$"'jHDij4qXf1IGZB"RUM-cN!"1[lB@$%BJkVEc6E-!3@(h&FY9bSZ
+pS`p#J633SSHfTDN0YX26q,K-`(%$JjZm,r(22Zh'4),G36rZe[21TCQD))iFQAY
+&(#6A-`r5`P4ha0c((ACDUrJi0-D(k`ikZ)@Mc),X4,3k!0`r5R+m#R'AK+V!SI-
+QDA-,jHj"KrF!#@cMV%c"6PEDYdjK[96P6-d[5)rH89jpFQ`fi@Vi"J,YfGFU8dG
+qBJiR9'@A)9FIE,"k4UmfeaHT1HL+l6HaYaY$eMNJGj4c'aQcMKi$[H-VV8S3,1!
+Fe9)V+qJkU48iVT&)-Sb*r6eERR6MX"p@U4ZkSa(T*ame&jGiKXI2eN`H59j,%$#
+RS-Gh(FqB8&iS--lN)39hh`-*Q9T5R42TX`pGTY!PlAZ+KIQj"U1a+d8NRF2IaFN
+H4"eZCYbVPQG#CPqVheLB5EE@X)'`0h#mM%B@4)qE`0RR,(!ma$,5eaSP2J"flKY
+pi6mJ5VN3CfXEZi,PRIE3SR)&rYqHeJHNNVB8*45r(%6@[6m@LBTB2-Yrj[RV+Br
+F*&DP!A4,D#SMVH@CiR94U#"-FQeC8KYbl*J+JZY*,i-J4j'Gf(6aUiIc8$iDpZj
+hh"hdG9cXLm8Aal"I(5BJ8-LYk'@3!!$%6DUD[HAT#0pc#kZ*[2JdVX1+Kd([II'
+REep,B*TNh!mjQH(ApDpGC!lBhYY)5L`Ibcjrjf!cVX6)D0+Zc5)aN6!X9eR1r"f
+4jEC3G!cc`!feX9DNFpTkN!#L4RFbQUJELXfd1[4*rP%E&%dlbr8lZc43+ZYJ[jM
+XhrEX$GK8(LhJ([1TT5H[9DNmUcrA(88cJ"9lYb,#T+[S(,rNec@3!(!M&pepil#
+3!'R)l9RYXSL"*$-M*eqp$Kl-(J`B988C$BB'L@`Y[q911bEdIi$2-!MhURk5Pdq
+X`[c[564Gi4abFhFZiNiAkhU&RfcBI5prKjJX([YHa!q9IFm0iP8(,-Z[eQDTG3`
+j$mRb(92)#4XLff'9+`hZif#V-6d9RP(Y8m[V"&SG!e9,&XIb$aU0RJPpe$[q0+)
+A9"ZbkpmeCjL@5V(cJ5"M)('cNcF%hf[XiTSkdUiQ1+`-SD2!,9q--JQZfkK,6Zh
+E&*rUAk,r3(F8#BfYd8!1pM[)02bP,'Tb-a[lrile8K2bTHZQf-fl'CceSJHLK)$
+G5C`8F[d-'RZ!@NT)EUr6hh(h9C4EC&''(,5!M0P'[GrA[iH++[,Bbq4QRXTA5dU
+,*"Qb$*9L3Y91b$B!)TY3MJ,Rpa&iIm6DTb$M&3pplpGe#Ffi##6BFFD$M5pl%YS
+R@Y+'8+@#j`U13HQ!N!#l+MMEAVN%%M[pf3D8@a#9cl23J$k#!L4@VI2#d"LaVPX
+NbGF95``a#$#+GUe0*UbRe1%8D`m!'3B[T#be&LrQZMG!qNb08V`#H[L+q#r(TU"
+`PE5LV-bX)`kF,cLAFY,FpakPX+#S#Q*UA2FZfi*crfI3(Jh&8J(Be'SY-8iPHE[
+V&a42Pl"#-A6ZVeUqDr4J9I[P@fZieGQ4d*!!3MT(XMMLrkh,29TMVR(qG82r"EN
+*PAC!PA8k9&6mZrNIbAPqI-U0J"j#2L)UKh25eSLm9ph!jj,Ee3VR,L`5c+GA!"+
+UZcCbSS8fc0VjaUcfC4p3XM91c`0Ib0&BSj09QleFAG33e9(10ce2FblmeAd6X,e
+eHU+K0lLkI@KA"DZNK*E#8P8D,j&j3FMT68*TMA+5ep)9eEch4hJ"A"0+R+@pMrh
+8Ti8Er*aYXb,b'J125TL@J,E,V1QLT0Dh*kF69#m$3idlHTl%QE'AHZXq&06qm,8
+8G4h*h*1DNJ3!5Y9Ld+k,l!p0YF--d%14&4e&*@0lZGGBKVF!jp2+RClJda+[TRi
+,&G,D@'EGThB'eM*`ihJhp+mr`rp*!pkPB0r`202)N!1l2E)#9MRph@9P%cYFedq
+Ck*&kQi@,0B(`*)*V(rBY!%1#3HK)S*kc"-`3'aBf3",e"`jbT3UelE8SFk,BB@T
+5BL,KkPF'm$"G0QcPZCq)I%Z5S-fSq,KjcBNqlFSXhCl9BCV1!RpEq2SA)4Y9mXV
+l3-'4Z'["XZVFP8c++I(+PrU3!m5leGYeL"fNUSrZP5@m9C(!DbBc,%X@5)Dj!hM
+32*'J'rrc*dk,XqH4Q%#bjaAc"hHr4)l`0TMU'[$538`1[0dL#Y4(m[S$rVf48fH
+b"bGNNT!!4%-G-hi%*+%(6`8p3'3dF#%Lf+!k)QaHHJ`hQ93D)X*'R3Q@m20Mf$)
+N$%RSH1(daDJ`'!FR"raAbA2Zk"&+%)G2P43kr@`'-I[iN8dBabY!IbA'S11aJBP
+KVH&'-HL2-,M5lQQeaHF"TA68@K@iq6f8B**i1McAMTFTm*@Y[,B4@"XYer11Rd"
+[*#VB#GFh`"TfU!$DU@4La@K,9+h1#8&V1$RRJTFH@jI+m*iC&ej2Xf+h0SNNZD+
+@,G2VJA9S6PF8F(QK(`0HAN5TB[,JMK%1hRp)AX&2*,H9`CF(*S(F6k[",KL3!'M
+CifALkPTde,"+6F*mBNCP0%iSli59MeD)!%99cjIR%A`(TU%BY6qB%D"YFPpr09*
+LG'GTYVic(-h,+mj&GZ,RN!#",Hl#febMP2`&&,#8BN28,GIB0ICI8rbh&EN#5q#
+cF)QrE!d,&Tf'$U'J(eiUcT+8kQ@3!)Y#qrl1ihQ!S4RkZ$kiZ,UMdS+*46Rf1c#
+mVHe92jl*X'`D"j2rQH!F[BFaZ5Hl1RLr0jUK2&rmXUPDj@U2NbIE%2U$fmY"%[V
+R(J9RB4liIUe+YIi-D%K8T!3JJd&'G23J6Z@J8@HV#cU*@(mE%DME(i*JN!!EQ+Z
+irAKA"5iRD-9M*aGqV*1('@ZC6TGJc,553!$Fj[AMKCiCj3X0I#B#a)Ib3Y'#)Pd
+fkeR,`!l-#hI3CI(3iVaXVXNQkNVCaklZF96a*m8BS851G0)$4&E$FHJ6+iYm'@k
+j)@*1[F9VQ1m#%r@dcTPd[bdb'+3GKV#&J6p[bk0PLj3Z5`&[Jh6&Yl$i-fHf1eB
+9GGUfr$QAG!*k(Fa1ih4hbh0a0IZ58%a,j$0SI04)YFASMVk(G'F#DH6@'Em*Zl-
+A0UU+Pa'G2rJZ"$")4RLAdC4F%0!1X`V@,e$KA"c`Z9[j#bDPFDB+P%G4X8!-ElD
+V&dTR-a([lRMNXC)rFAB&*FUH1ZB`#"q#!A-BR8AL'@N$,C40pQqkPjEqb5hEi`&
+aUXa*5L4p2'V`LNCj`(LQ5Zk3!$*GiGX,U"4DrB-$eG3[,(UKlPZPr[rf),GSUiJ
+cBNI4(ID61MRkLiCjVFL*NS+pbBrLlkqa9lphqfHH@hNE(kS#Y#b,$)@YX[,qK@$
+'4EQiYHA6q+1[9f`)q,m9Sl883TZ0KNk"[Z"YD,p55kDJ-(SJ%TSrq@e3$ll@8q(
+qhdMm5%D6R-!3'KVFI,i-RbqQCM%RU+HQ)RLh!Ajm'FC*K$QE0V1mLK`E,D3Tl,V
+Q,AI2!h(3+TTcVr5f`GadaT+`G6JbP66Xk0Nf4DdSB[CCH-A`T,*44!QIPq+V9M$
+jm@GVL2P[1e`8[c%8X`D`%,e!jT%-c$V01$X6!@*,TdUZ`Y@(,VPl3j@I)%QBKpN
+XEI#HGM6jmr44MqA0hJh9VDrBL3+[p8LRjqq9A5F`jA$f#jGP6e8$G3cEUih8QhD
+SADAZ,C(G9DqChj&J@EbMRS"(`RkU&SpS0$qPqbZ$V8rTGJ*"@YrrmM$$!914B'r
+mRj)-4i$6phK`qhaN'H5Z"6ZI(bXhEmc2XPhk-li!)bK+m+i2jehm[KqcKMm39BY
+6,rR&T`U5L*qmZ@f8[VqEcfHd)!00M-Iq"AAeN4cqJkB(S+p%GK05%ZN,Q58d(Zc
+M"T*C!H4(-U#lBCAC#KQdY$SHjmT9PFUk(L'ELAlBV56P"1EI8VTij@eSTpRCk84
+kPRTNce'PYHA()D*)fPKmJTfbA3'XG&2jIMT!8q#9[fqD)rL`Rr[&VXRRQ`9[jRF
+1*cBbeQdilViQ[e,q5[CT6)8BN!#F)J%mP2)q-R'83QR8T1"5QhIdGZ5qPNrSfcd
+IUT2ME!U)h#m[T#e5UK(0Y-[(fcm,r%@B$"RZT1*Kr+`#89#!%+[31[4KJ`Jb)-6
+m9(qb+X8B4j,P2Ip,J$K5&4ik9l+1#CLea8kRJ9m)NdN$`GcKUelYiNb[Q#Z@2c%
+phU*$qrM1ZBfS+R9#VY*ilb!9f9G%4Q'XK4b00LVSZ[fZfAPZJNG(+KBMrmKZq"K
+PlN32Sq13!-DEIV(XGqZ-2f0PQ"MFN!$)M8"rq3""3lJ-dSHMm&+V`X[)'"krAdA
+LiNV,a6BpYG-l`)a5,52l-D*BVKf*1[+D*9fZh0j#E!mE%ep`$l8lE62Z89@-G%K
+QD8,A4#mm0d$M`TF@10jL2qCPQ&&S82iif(lDM%8Nk6Mb)ljl1VkCcDbJ#&B#m)5
+5VR-&2fl!PB%Rak-01`114"IXMqmN#ch`)m$(qSRB$1U12U0IcX8!JA$Z!A!,CE`
+4TCbU`aZRjll@-FR*94l5F'DdaP'dd'`Ca21%$DrIT$3'i#)18Ml8$NcGeE(Z&Xm
+VKC2epaLe"Bj,)qrJf*H1,)C5kSC)liq,Zaj@#kk#6lqIFa*$5lQeCD-M84JlM)a
+ridfkVb"XB&LRmR0@S`AjT6ADkFDIhAGjb3XEp-3CT((C""6JpbUHhT9XS5"LJ`'
+e`(P(f#iQFB8eJ"Uk+T+I8pTDT!NdCY0`*Y6)j9aU)"MKj!&#P4q',[E,8d(h)j!
+!c6K3UPrK9'VM`TYm'0rCJe%65)Gh#l'$%mFIG@pL0C3"Gd28iDESqk5dbFX4q6V
+d6052'F)9aPh)LGB+[HbZ"1J15rdQ1L"AF`cD*CLPJUSHFfd4,&2Q*5,D6e$)fGH
+Chf620,AQJK(V5IL1S6CVje"$Qp)$U4i$"3i[T9'MZN,%8R+r)H8f!H%HHV"38Z#
+V!URbNUEG`'EK$bXC)#VN9[Qk@r$1TkZ(RFm"b-rL4&b!9-k@h2$S#jNS3UZZIdl
+$Z1V$)J8CdVPi%Lk-pMAN&D-B-S%MeJ86PG$kM$qEi,X3mB#*B2bFaRU)6*kY(G1
+idPYMEc""5[20[200)@A'Vm*!9N%(G%KL2X-@r$!hI@EUrD#YNG0mXGBbA&Fkf"h
+ePeMai@lT'91!i9'CfVA+9G&BCQ5CSf@KheL09Q)K[FTNJ2C'UNkVSNiPNH*)PSa
+YNY9k4[a3J2fGMf`%*3%3H"QFkQD1"XUaM[T%)+qdQ8$k5#UZXQM)'8SVNfhYpJ&
+aR6F)CcHkXU9pV@-IlJHC$8S%F8%jG2T#mrLS"(,Hf@a,dDZ['I8q0k,"bZ#P`8!
+3%&FU1ip&6TX*NqBDe0Nc3&$*I0G1IdpBcQA(ffM%qCeriYHmaFUd-JP$VpYqKrU
+jBFBQ44MeChZhh1"N-$'cikK9M5Smrrj3f((C!F&F5BUNS)&bccD`k-GiIDL"3Ca
+-BlAFkCqPU1hL%Q-,4!&QrB9!U3TbBjAb3,EQTaH(+rq%l8SX"S$#rP9&j*ieI'a
+AmB18CZ*[82jKF@ED%k3kqD!q@*dTK"4[F,ZqV&-Dd%eai@Vfhb$64$KD(MM-PjX
+P0(R&+@chD3,-`!ll&k`d'e4a%XirIF'1eSFlkJ&MYr3@K-(R,epe05+kh%4AU%3
+FCHYLJAl3[TkA(AXr"eX5QUbmiE04m"GHBeY2$a%2JIYq`00b*R81r[5Sb2KQ9)5
+RF#L3!+cV&@F[G`0%pYmY%KE,mC2)C5H)DL-qK-@96YN+DS"4365)80Vjd,kXFfQ
+YR%qCJ"Mj,aP$BeZ(*f2%M,1T'-akGebm5hhX4lVfZUpiqcq)(%$a0m(FNlbA5kN
+pAJ9XS2&ml$GTGF3*V"QJ),aIr)cSqH#&GDfA4K@'5!@*JNFkf'GYmAjj1h[[[%T
+3e#SBZ5H-MU'CQ2f'%UD,83'",B@fG4GFZS$*5bj'6QaNUI!q6d$9&R&N#)U+ZfF
+`*N@I+A,rh4GG'qML0Ac2%,b5q[[1$kh0F2,lj8fb4E%N&-9&eM*i#%PHK`$R3qQ
+(Kl[baD#24-p)2Z++0$(rSJI%)XRb-ENiB9cb&SHkHl[ZDL-F(G!c)d0GXK)+ckJ
+a6%I&clHTprZ&%XfZ+G4#iY(%5f1AG8c3-#kjIIbN@4r@6KP,'MkYN!"U!GVa+M(
+4M'RFNR0SNcLfdjJDZqUb+&36cmL6+!+3!$'d,(Gr03&*iA6+R,c4T1"Y2E'XN!$
+P*b!6('LXC85X(@G!8XCGCeUh`%3r*jkSMf6$IdhpSdaE+fjLQQhiI,,IJaJURaB
+H&4AIaPV@J,Ce+G'P98h5(ECB'3fmqcpQ)XY[GCMdEfJPjV-@X!L+J`iFU2SB,QX
+Np@cefCP+bqmK5LG`81VUqN"9K$RK3[KG52cTb&N)T5qrKPGUK0GMK%XpFNELZa2
+rclN9c1LGDc#m+q5G(1JE9d6%9M[IbL*mR8aDpHZme&RaI$!cakSHc2A(-9dmhdB
+eH+MFq!9mQlZ3!+`r%I-E$B`V1dG+#pJ4+'CULZcdYfAF8k3j'kelmEhfa(rD2M@
+L-N,c#rBSRmAd6fFM[U-9E6km,*h6j2AiQT0J0)l5M+lS["S,ALQ-"kQQ&%J!HiE
+cbMZJ)TkkbaP#k(d4G,aa`f49f`,BCB#B`kda+P1FQSd89,YMBNC1kEa'9ZCmir1
+%UK,`i6YM#dZm%S)5mPTEaSi"K@R9L5cLhP6SF8F%1d'p('eQiYE,bX2HC2c19*k
+YRA!K1#H5Z9a9BCKPe2GYKYVlrq6YPp8KdC+eHI@+-16,AUHq)rSQcK94%PKc9d3
+dXh)*B84+LCjATR2DJf5KQ&+p-'k5j%4JfG`KRBEVGX1PRcFU$3!-BJ#6a1L,3`3
+Q,DNA&HNS)cGmR)"kZ4!(I@8k'+h%3LRd&ZkQBfH%b-*83BT9rlFp`1C-aU6i&*G
+G3,iJP%@Kk9XiB,6H8hQ-Z*!!!0J-U+dm$fjql@aAIM,(PK$G%L1q35D%8i$b26p
+rA80E-6!&dPPS3AhYlGp#[Ci"C@BpBe)8XU2ejQRRMM'S6cjmEIXmqN)+%1CM,'B
+Nc!M%djBQQ5'jP0&AYlVrTmfQ%B(JkaK2R-ZQp(F@qUlqh)j$SDd1pE9a-5hRmYU
+HK!KHr[BeLJM'2eKVG-m2hfE%T,LZ"SLrFTpN+[BJUhd&CTCk,qIV#BlEa9$9lD@
+lFMXKj1e''H)qmZ"A)%+K002RqVGp-96RYddC-S$ArDB2K*IU%Zdi+N8rSNL50e*
+b"UNRbGpFKC0*#!NEDeG*("@2U1Ll+mb'Ti%0hcR$5&YRG+%Il*!!2mKq9Q`V1S`
+0IQREM!NRVTKX#ZRU0[!DaRN()MK[RrKEdKT%5)[(@TE!-V&U&,Brq$H!AGJQ,+C
+EXcEHRE'k@9$*ZbeDKM`)b[f)5H4XHCeUABi4*`M,j-+iRhl1b&`RJCSmJ8!-j2r
+EqHTFmkQ2U8*8+Gi(QJXe"Ck6YERUL,4R&[c[rCK%2"h2J&0FbMeD[8"CU(pmcqT
+UKr+B[J&I$q(8Le)Ndj0$H5`jKNT216[i2QUGUSjp!3l"MF,32qZMH65mFlV&EDq
+Y)+EcLqd9J2B-ZL$Cq'ZSLM+((['X1MYABqKL%(Ua%qHkFF&rSB&QcbG6!8%p*H3
+D#Vr[TThUiJ5`X3*ZVjFPJqHG$id$(3FVCc$j5%ZYXQZJXUTjXLl`4qcdM0"&!"@
+KP)BF@i(h4GAriDppKPMP'!-mf`KdU@rJDFQ40kJAq$k(MqQMB%Idr"ED!3lhSPf
+mbCN'rTJJ$-[rG42j@VmDD,Mj)-eXr`b[KTm'a,rX43YUJ1FqJ!Bbk0G-&d83TL@
+4HK92Cm!c[dH3!0ZK+#(+[H2L6jV#5CpMcj'2-5(8BLQAJR"k*I`+!Dm8+Mjd6Ii
+Y300lb'q%S1ir-@G'X6-U35pQ#D86`*f+)19ckXd0G4bUc`K4PCT[`l(-L'NAAS3
+SeV19!5kjdE1XTR@TbR-aSEib(5V48Te"kZGZcSQde-iYUR!'6#pR*RJpL,!-N!!
+&"f"0Y9H1Sc+IBTJlZPIXp-bArJhilDh%iL0k"f,N9&Vk-*3I1AUV@VPAVV1[a4I
+c0K0ekGX!DC1bU2B3@F3d-T4FqK&1Hree5%[-9Ak'`VZY3l$MSS,+l5*5bjS($AN
+86L1S4HUKZfZl$H*pPHfQp"qSp`,l4l#8PJa#!68p4V2X3Q)!$Pe5&9kQAaN%iQ*
+hid$*4PG&q*B(UBkdPlNf`)&JX-ep"dQHl)#"CEi!'"bHL(3dSba+`(0Mj&2U+5D
+dD++SDqqX!a28Ea@1JA4)UNkJdk-2&+6+G8LA4G8D`Xk'hh(ML3[EINKdRGGT'GZ
+%$'XA,LDj"Nb[Y%FefYePqVD8cM#BdUj"G4DkMe"m8+!SF,bM35&R@i,6hqU62iQ
+5J!-MpYp8E0Zm8Bl#A#cIfTiBYGc$AFVeU@3p$*R+RQI,@9&GA4(K@@eTU,Y#Y#P
+[qkA)jG@UB%A,rajl'Ji[+"ahbpX5+MHEfFBQ4!(h#TqdGNC&!IjA&EHMaPS,@%H
+rk[bTUD3Hi&de#VN6J2[cAkD!K00'`6K[#5LG$FA!bqE9jlM[%@"j@Vk2`l%8VFj
+)a2'EETEYPFHf9RA5"!2Z-8%,,S*EMflX-iFDrY)#DbU,M+RF!0A0'IC(Sp,adZr
+#8QAc"3Gbe$YQNqZ4TIM#6*P%EAEk`Y"Xib9B&hM!%3SUmiN$A+J4-6ITakrFM!i
+Tm@P!)SX8MiNI"1*TSXeeBCf$PaI3XiblF9PB#h902R!B)rG@2PkKkP2K9F3,'6S
+eEc15ViQ1Q[(UD1)eZ+GC)+H*`-+Tjmh"e'Fr&PRQ)aV,YJ-f#NA8T3mLdrBr`MB
+T"h'FUcllJB,@DU+Cmp2UhYbI5TrAh"T6k"#l(0I*AC4c3e-Q1,b(Vc8"D,DQab*
+HT10bY`BYi8qAlelZ9GCSb+Ql!"f5LSMhpE*K4FC[$SjT@dfV!1h$LL*5a,#RGXk
+,JPU2f6JK2M1Fe86#VTkDB4kG4DTd2'+T%cANILhr6@%pi+8#m5IV3'l#Mi2J*$H
+0Jb6JD#rG)0cFj-"IiB!HCSfGj--(aAfJk(lYhKlNh,XJ!BafNG#6,R22Z'qX4Zi
+L2kle[h`J-+M"9bYZ,V3e3hf5SZ,3#0N'lUDiIhEcL25)G+UX8B@*55GX4EkYDT*
+Y*HaBPLCQ'J-J20IMI54#V!e40-jS#dNr$YCBKrPA3)GLGc'G,8,Td9N1$NfT)Qf
+X)B85m+l'"CjI'lCBq1*d0FL$&ahlJBBaN4G6e[[&8Il*)P8-(GZ3!(Bi%&DGA%f
+2$Db'SUr&c2i)MErlhjh#1cJ'GEH3!1k*ZP!T1b+q!2fTXmU8bk@(mrBG`Aqi-ES
+J929pb!!Irdah9`q,X+eQpAmi9SK2hPP[hDdhbUcC%4,4)CH45hUMSabIM,r*JV"
+diR42Sk3ji2m@Qc[d!*NJBckEhdMB9LipBd*UkD(N*,",",c%b6"0P!rFiSiYR,p
+KbC@)Pi40Eb+JZQ`3,aAi6G!I@+p1f[-N+D&iahp@IKHDi&"*0TL+mIVHQG41lf%
+D6Pbk6"h*Hkhq93d#jN!pjKK#"AZ9$M8-+*HCX,!X(jh$HLD)9icKr@!`H9HFk#H
+dJ+bd5FLCZk)`*!M$fRIbe[5,(0b[DpC01E"(9Hhl`R@[kfX6%%LIP9rVZ*0YS5k
+mIaa$$3E0!DGpZK#rf+PckalAbS5bQYZI)$"(a&Xp`K+cF[IUh*[fT[*-rXVjiiU
+Lr!-FIb6(ce*EDN@#[Jc[LB%dXDQ+k5GjYR112,AfK5S9**2"@-&Cea#U#rh[JPH
+BVcEQK2bk8,a"Dr[)!Pc+m@'fM*!!bABEFc4&H3L*qFm+[*!!e3LfP2!Vq30j[a@
+MBGiNmF!QUrFJTV9ZK,06qV+q(Zr)NDkeDq4V)QTUhN,1-4TF0F[5F0I+`#HZXN*
+qa+45C@pGcfYH0$6Zq#dMc6)Tj8q"*%bF63lAbkYch((bQ25h"CdIL9$#&2AVYhi
+V&RY3beL%C0Lafcq1[iRU99q+RfjM"4IYN5&15fd4&rIYUlTl*Fqq`N,mN8NS@cZ
+HP*S#Ed`Q#&KliT08*XU3!([K@019Rr0@qfq4dhlHE%Iq*[lEpaP4A4RMfM45K*j
+jLGBYr-VB[JUc+J(@rMLLqGH!iZaJr5Q0a2SAP`bHh&Cpc*6@"6$SIrF294k&YHM
+qr[8-M4aB%l!6q32#KYBC)FX0JMU2+!i%`%8KR'%4+*,-9(CXTFJ-RQ(5jQ#1!`5
+`h9Sl'[*Gm9(i$@bm*hE6Gm3jZ[[U8(QCaKkNk8@NM&$U-'DHPKm,TYJe1c8ihDc
+eiNlK18k'#h8dZ#0KM8!KR98Bf[jQ((),K9%fBr&2CrGU-i6Da'%1Dk*G-3GbAjP
+b2ZfMTXGhq@d60K5$Vk[NEfC$cBJ"DV9DV&HVNm#TP@d+48lHUR00))M#pY)!lVI
+M#(*AA&P2dJPFd)lG)'S)K8`4#$CK$jLJErV9@GPdHB,k'ZBFK1d&G&aL3C@jH-'
+%4S*$mSSjVV5FiUD9G-`5U8#$[f!SACETV!#Nc(Fp-9r&UX'i4+1T*L6TH*+AJ63
+eTT6lZD$2PRi0ALrFJ$@*c#p5ZqFqlApH'%mJ#+kK@$FKIa2@Td`F3Xf)m,aeIrF
+K&K`G,'0'Ddf)5Cb[V)Pr1l-''j*(NVV&`"R925"1ZQFdD'8l&Q,q9e2PmZKi1@l
+!#%+UElY)5lXmhrmjm(*cbA2&Fi1ABLj&VLBC06&GqZBD*r5)YRC*"LpC&@JD5%M
+cY'VckVdkp@9af(%6X0+#EQ(Qi8`Q@IRBE54k#U&VF"@%0HEmfC9P0jU0P-f,I#@
+5f905@KMkI[k*Pp+`m5[0qR@cA&*HVdR"RMHLND'$`QENZSm@8j6G0B,MGD'S@f0
+,BKBhr[2[p"AdhedD+"F$"k*5)kT!p[c0pb$R8C-!JaT+dJ,M-pM590e0a+Ni5FT
+XADSZi`9rfLRY,3E(L35'hT!!kr66d56@RL,3Ka[$N["id6NiGJ@0JZjT1#2Rd+4
+4JIVleQdDkDXhNhUA4fQZbSb,AP2+"bPE(!!R-3E6m9+UZSpJ"JCMTNb4SKXd3dX
+-p[(&N44!ZRCZd5JLGF0HkZ"FZiK3"9YC"fraFkP*`D[cG%iLpc,+65hr`2Ah,ll
+)f8DjJ`J0e1H#91XYeG*6,hqQeRFaDpJE%D`GSSY,QjVprmBIp#,518m"KmP+0`A
+(L1bFPErD@Zp8H&AqA01[&R$Di*`#33rf1bGV)*5kk'L5Ad,cHNB38YKQ"5Z5fKi
+8F`6YdpR-lH@aJ&@d*[9,6riF"KJ0iiL#%`DLE()"1$3rPA!rPkkZJb"H6U!Y6KU
+Nk+45PD6ZH)jpFcP8lbH!VeQl,*lXbcqh6(VIF,3-816dE-dM&Mkb`9MHXX-cj6!
+$kLm34SjcGCKb0RmfL2hMqc(DD&ekXp5TCTD%JI"%YGjMQhjaZDJ*4E[dZ&M*EV[
+&TNbhVd[JY0c4Skdar4-P9AJ65B80bmYJ-kL$FhaM5JL!9"E1I-iMf*'jj""Df*[
+LTKNih#QN!N5[M6ZPpV59+Qq&H4qV*841iPqTSD8#i#BiMUk0`G'(0NZ8@mLZj!3
++BmUS$a-,#45YfU2BjPB&mCp-i,&qPCp&ICe65cMfKeA9%"pTITTN1HP4R2Mf,YF
+[Ch)9#MNFp(i$mFJCIK`!Thl2L"f`IM+""6rAA(Cd-E@GaN06"Yk(NK(Z4)p,&,6
+N1+T*(&*Nk!NFlj*08-bAjU,r8S9'*-P0HKi!b'YlB6PH963fm"J+p[iM@Z-4NiN
+Eq+#2aVlpa',CNHjCcjcaM`[IIL*dB9`QhreNJ5lb3P&PUaZ+ZqJL!F('N!!`NTG
+mAUPld%Mj(YZLMe8q1N`QccmPRD9&q&#j!rPiR&BcjR+b(Bp0FR9`JRfXkQ`pBLX
+AZ&3-3XV2,`'hiN@3!&b`2$95@#2kU4VLIpfY1$ZeeVG[i&FVSpRRKB)EQH6fL*(
+$%N(jiN`TY86BfVESN!!!U)&`!S'iHdlRD8hSPG'M$dDrH[a2bRb`Mjm!Sc+bplH
+XUUM2fpp5LSfd-eX-,4RqDjAPb$)+(0pq5PVVlH6GqNU1mR(K9ff()Uq93l5[a9&
+XZc#!a-UiPQBUdGC[mm+)U$3BcKDlakE0DEbpTP1K!$U2ql@iq"QmQSKcG3LViCJ
+(q,Bd"2r&PPDV@@!T%MR!Y(IHqiEP#8edA%BTD6Ta*p"J9SReiK5bTdZN0dK"*C+
+'T`'E!PaHR'Zi0*rhNd8QXP"PMK6[YR$a1XZVG(HJX8@8ar)ECZSU'F1kHI#pArK
+G8Mb*Xk0Xi(@iAG2%k)U#Z'1lGe1Piq'M@3N+i3E3He-LpbK!f*qC(&e'41`+ifm
+a@j!!)`N1rkJIBrKYSSiiA%fI1"1q[UJSGrTLXNMLfRhAc"eEPI!B,h["-'Yil"&
+"FSBN&*ffb@GN+JfbaA'2CqZfm1Dij6b(&pIU4bdZ)!BeGk0!JD#edVmK%CqpU+,
+25%AN5rKY1Tb"+8b4pY-SD31`@f'!lHh(FF)mpNJHJCT3SS*iQ5MH1k4q6PFb)M#
+#D!LJkhk),jYM-9SDq20JcdZ('e-F4YlZ9UL5@IZZ'l5h'+P#Bm61Ma09T(+IqrN
+hJP,XDV!&`HNedk8m(1LYe*m0G+pp+H4f4Vj6JAcrrYa0d-"DQhcaR2Z-r468$UV
+-Mq'-$i1qqCGTpCATT@Uha3BL5aMj4qE8LZ0cH(e#ZqRfbYr"h34CdAikXC6GBQ(
+&p*X5+QRMf["MdB#(Teq%0"F4Y8IH#GY!Ib0lrq()&$-&S')h*a6,H[#@1&T(,`p
+RkTL65@,T(4M84q$$3qkbr$k(+ja-fHe-)@fERCBLN441e[$-*"FMKP,Vq"3[HSK
+L!)2UBU,ckZ($r1Z[frK$!rkSXe&%LEA0(aEm`LlUDHJ0XB9[Hj`DDUKU@dK--f&
+p6R+@1LPPii",jS"bFiT0ffp"CT+X3*S&k016(cAJ4f,U%p6KG$"[eY*FNYP[DqM
+eY@FE,&Gm[lZm4RmehG-MYD-%"*5+l89kUck4XUlXKc@C3V,J`im9&NT0c&5QkG3
+KC3,YhNB,P2(Q$J9-!45HQ`4!rcT4`d2*MM$1&IT2FUUpiNmfTrjI#mfprl'-i)1
+XP`0L%rl+TV$&(arc`Yip5D8a9G3j%e&+59&I4Fa-R2KIcY(4fpmhjh$NK$r1'f1
+#3FhQe-U2H[!)Z2P2@LQIV4j*&V[Dkff)U!'&&pYbIp)&cY(N'qemd9S8b@[b*Ap
+ZKke1ir)@pB9RQdSjpK@#fhe`Ep@EJpS)V@',560*hBYK"(Ab@aI`YZrD[F2blj6
+*kEX,a"0f!(%A0*H)J8Xjp8q-bB5DDl8ScQ3A&GL4LBDIc$mUi*ZVBN(`M1bY&fr
+Sd%HrJFkbJ0D[m(1%eiIDJIZ"TYB*6XX`'ad)`#mXCMdBjZ@ZJk5XE"eFmiT)U-a
+AjGK50TaaI#M1+9-3,Q&a8r%)Z#+I@`"L"MITm0c4aC&2%N*'YTbJSNT"R6MjddH
+a()$PN@qR)CDX8!8QaI!5!Sdl56MDYja820+YGdMmIMK2ASih*+#GBA#'2)J&6G8
+'dhNeC,cJfd4MSMT(jm$aH%2CUH548%f&IF+6k"Lm*$JEBqkk3UNA9LrB%F'USFd
+mqaX)-B&iZlDMrl'U$8aQV9U@qCZNr)Nmed5256TVR86$6@LLY#"#XfZI0YY'Z`1
+RN!$TB2ic,UiKe2-CE&%8Q+!!8fbN0d*QmV'dM3[YXH03i+rPq6F6pik%DMe!I6$
+f'eZT,KQjQ9r92i$34F!0PC+"0mFKr&lXemG@`rUPkXa15)"V&LFK9KDHG,%[1lb
+E*l,e,Yf6#b#d+$BLJ9Rk`AJ99*V@Slr0MX(K,j-p[hbQ-ULTq%26ES-BRE2E1Tr
+aABEhSPr3['$J`LkPBLXmd'If$3H8-rY5a,f'cV$LP!HYkm[p3#APLhVaJ4)Rd%*
+p"$D62Fcj$j%Yj`SlLRIII)RGDX(Mc5BSX@r+9LJN'4dple-p2XLJGZ'%5S1@E%I
+rZ$jpQ2Yid#rIBq'HE&8+-GSDakrP,)kLIp%m0KrdZ@[[hm0UR'!&Qj(2`B[@r(%
+k)X+a,92B,MGh)Q'5mdS!024q&GfCKGZpj6p,N!$5'JadcYq&!&E2KMkRSIY+,q9
+TTN[KAAZ)q!r4+T+5rr,R"@XLq(S&*DRhbQGZE8AV"@CGp%[52d6b3',``,)!@j!
+!0V#[UUT#dSAJ!8D,c+eKDIm"%Ccf@j[MLJ'T+3iUV8pc(!9ClIqNJ0'c#*Xph80
+$5%QRIAdG+[KffF*+hTD@1#HS2S+A06!(&bhlh%2S%Ue,$68T[Q*q60iak`F#6fU
+(i,D'Sff-0'"r!6AcmUF[i[A&bVZHjrGKN!#GcGeK10pLd5qI#j8j25,F"1XS3kE
+eL3RY8iMIXi'5diHX-r%kc1[@*Gl+iqE+0CVXU4940-1G-kG"a-5Ri5%X`rZ9SmC
+NP++1cBR[EQe,)faN8dGr29GTkij@+hEm-jZli@058'@TU$ql!P,&Rl%pSI9*X+Y
+',q5!$$`@+hP1Q%)VcVA94'r+jXK*cZal&55)UlS41T1KTb35"DD9A%ZQ%@CYQf6
+CLQ5m2-HUqQ2VUm-1!r3m8&D"T5QH[Bd*,@"+-`i4@T)+jF0mfH3K,Y)!eXiEdjU
+2,Qq%e%EpK86NRfe-X6#BVL8)8G)f1jFe6APK-NrZfGB+EST!'$elC9b"E`J4Q+B
+(*BC-p#VS@G4%cX'H3C,G@N6&Lj@j-KBLYVI4A9e+-V"UU@qKkr`ik&j&"(&8$""
+MVNjj5+k'[r&,RXEl`YcPe35B#40kDp(S9'@*hIJpEM@VM3`+bUFJb*m5IZr%@V!
+ahT4'p33I5063-Kk%r#6&1C`aD!e!h5a'N!!-9!0S1dbEh#CM2MRlBrEQeC66EKh
+I!bZjJ'mh("KY(@0,"hZcJUj`mjbAA0$D(@4jP5piU'IJ6,Z)#,3JS6kA&FKhR"B
+XAZ9FPe2SE3QBFBNXa#1Bh,CNP0&3aH$!jPAlRFElc#(P4"HR3-IC#KmTMS$'`6c
+-$%b`-+K[jLBGGbM+pPf0Y0NSd9JH%aXJ3F!&L3(R,LS3!-"M,p,*C[B%`@G+D&I
+GZ%0,+2X,@2V38DYl3JZ,C"2BP["-Ebp[2iQU4rAjER&U(N2Ni8AM&+@V4$8jc[G
+S3(2D$%&+Fr,r-1JrNmDd!8*Y(TC1BYGXplV)"81@!-2rf(TfZ5V8D5K)TB53!,m
+i$#k`%beh2KdkAf9le%9Vr[*+0UP0dEVJ0cU3!*b3!,3@RflU!RFl%k&q-q["pBI
+)a0X6`bDffF5&#eVN%&!d'!`(E@H*B)hJFji8M!SHrMU8Z[13!%%al8rENS56K5K
+PR'LCJ)hXBd#f)"1irID205bD*eY@(0T(FM43Hh,JaZdd%18ce9Vl"8IG$Ip@Bfr
+elL4T+DpITHPm4YEM%b9aFT!!2P$Hf#M5D4MML6I"q"6qc`FZk%Pb-rNq,`I3%c@
+h2E#N(B$%2rqdL+2(k!Rj4kh4XSY8"P%kbfXd,lJ$0cMU$l"KN`pkkcjfQHK&XI`
+q6*ZCTXDGqF$PXjJP)4hT*KLl)GZ684G$RR[3"3@JM&"ClS'H3%$fVl39,LEr1+c
+l)[5ielE1#R8T#4NkRFXTQ*F)QLS&15Y&"X!%Qkfd,BXMJFXCk8ilC5Hrr,E4l2N
+bPM#e[N4)ZT+ckF&Ibf4l9AA@eQGdb9%XdZ+llb4H-'PU3%jHZP8r$fZ98mHifq,
+Ze(SajXiF1@QV#e03KM8&YMQbp$-lmeTE*Fm6r*05NTf'%BV5SqHBAF'rX0@S#*C
+p!X!'HE%MhM$IZ)L6iM"h9q(-H"40Y&Q2Ni8bX+'pCa"VE3MG@ll$JL)-VV!Rm+1
+)-pfah2bQUIjfG!2PQlCG4DLFaXE@b6@%`$9aY*fRF*RMQ+"``-4+rBRG6`8EUNA
+bL9iZN!"J%4LRhJl8CP+KAFKC$UN!(ZXi9qKJjNlk@&`em81P@j[*j1@rJmbm-+@
+3"!%!!$X!!,5L65qeGBAr!!!-'3!!PH8!N!0b!![SI`!&#9X!!%)U!*!%$`"8De0
+SC@aXFbl2J!!!Pla069"b3eG*43%!N!q!!*!(3X(8S*!!Y%a2I-kFV6a*Y'X#4(J
+R0d*)'rSKITXT&EPD($3fCQV(ikr&pY9"D8emB,j9ld,e&VZ'l2pC3I*K0($E5-A
+4Mp)V$3XJ0)K$dQi-!qbf+bTV-Xrd!Ie1c#h`N!!$mM`E*,K8F6K1,BqHqqX16Z#
+mbUeEc'%kAjq90e`*B!fSESbdMjDe84rSjBX48`qJ@@ME)jjCDcq2rXYe!d6fff%
+TLERr3&$#T@TcH455U25*#QGFLTfPI5rDZFYC'fB+rQBHeKZ#eGRDlfmYi9LNB+B
+d"$pIP@[9L($i@c#N%@rA%-H2Y9p814'Q`4Chp$%3DRTH+bLSa1mhQDh!AUp#bLl
+j(TmKkHU3!$DHX(j9()QX%1$E,Kk[XJ1CV%%pC[&hCVe1JV'0lVQUK-RAUkBbr@G
+9j`M6m[Nq4d+jS3GJ#U@aG`5I5Zhjr5(,G'`CEmrk(d+6AP$3c[eK#ql*)c5&f44
+0%,GbFAiU[L09&%!Qq'RpLq0ZcAKFB*5M-JHSY1C,L&Fd'hN@2R%PAfUQdrh,!m[
+9(dpKh"a`mLXa#i$QD24ZpjYFaBEL8%IZH8!1YciPQKKVref,q*H#qpElpJM-r&E
+T!-1V-GH'Dm3TZmVZY%f@G+H%KZ'qA%%jPfZXh@BiVV[P,B9I@!L!N@D`AN*Tc(p
+4PD1P1iRep926618$6X42NS,hce"135"1bjQ1K4f"LRId2,FfeBLX@C231A-qKDE
+h0k+kJ@"a+,#"!i10Uja9Re88@9NMC6$,*+*mdYF(H[r9*-0KS('f98JVU$-ALSi
+PRb!VepS1MZQ0+&HCM@PVl2B@F+Z#q&AT'jU(Z6Vq3AVB,TXNM46%XFf+@[S8fiE
+3-BC#!qqr`0JA%kBAmiFL93K1l[-[JhZX*!R@$RG*"kmQ@MI$6!I@1-5fm1HlV[A
+[Gl'#S@NV%UqTfS["VADd"B1JV)#J#kq5cT!!Y5HQ("Gjc*Dj8D#NX@`S`B(h1T@
+QH4+N$p)!1Rl'qcqjS1LM3l(1TK&02U2K5bA`r!bKqBFdKQmFhmi()HKCTKKB816
+qFAZaQedcAc'9fPVQ9X!ESIl`YJ`Q8CVXfa$DerN1`m"l)R",)M0AKDlH6XKjZb4
+'%a$@`T29b910#Q)K'cLTC+9!X8Ai`4FDGM(RLrkmVb+bmSEk5I8p"hc0)(C(Hmp
+3RcrZAPaN4UT@qSAX[EJ!FSP3S,pNVD4C-&dRSEk6,SqES![q1RbU)qLCFch%L($
+QcR@[3P$04!)lbjQlZM1,5G%IERXr2mfZAa#EUp+[)E'q6q2Qr9aKr2@X-D$L16-
+E2'e8i9Ij"+C5YlJfh5lCBlJZQmc*1Zlk$`4GlQch```C9IJ%B5*B'YJb98dr'@d
+bX&`&Rd)&,U%9jF@qQk#5$-F"b!FY+"&cpI$rYqIDSiMfab8VmeTR0b*Ilp&6i*1
+q`2FaYZZM1N6("iFm)m`PA)QDSNS2j6b"BU3b0KDbC%rD@kH-m(jTfcjhMKVcF6%
+k(G4jM,PEGEN'[a`l-&VHZ%$IbEEr#N-rF!YUFlR&,dGLbh,G3YYqG`Gl4VU,l((
+D-1dE-YRDNjVTT5GAF8QE9a&,&()aS&L%HHQSUa("03+NiTS#NABH,+6#@JI3+Sb
+QcphKCaPH+[89!TPjXk$i#VNFcj9abNX[ZYq`pd(EC@Qi+H20P`Dp3ihPVNGDph+
+3!$*r!f$&26$N5N6rH#p6@TdJ'#+T0#Gcb4QC$`f3!,bM2U&(F5Ca'-dVp[,J`R1
+"A@RbU)4XKI5*K`aNZ`1c+R2L'HV"Ec$$jPh%#E"pf5!Z[DSbE)I9E0DJ0URU*4r
+iJBh[r"-he4($'pBiD!pYY@8pVUj1a"p6jf1K*i+Fa`aJQAN(b+[@bNY$PV`$Hj!
+!!MQ,(,ClSq2*U,%ZN!#`+*m)eG(Ne6SHRbZ++P1EY!2l&&(-*IqQ8!d!,1jXNSI
+Kk)U@V"4,N!$RDUXH%@"R3XEjJ#Z*(F&fk"TDLjqm5U#NEQUcBd*9jI$$-$!cJ#0
+GMZiP@VI!@Si4amC5KdTBedCc+1k!L-"a&e2VH6[drFb0f9X%,HCbXd,PZH(l&Dp
+*Zb-p`Aq,GAQ(R1qTP6jPX@NIK4`lSlEel`1+!J)&eEM9Ei)IqdQkp[IZ[16m2Cb
+0VJNL-!2AIUr2#DlS$baHHAb+%XI9SkDrCa3GhQ#NCU,YQH2'i-Dj3RNdPRH2G$!
+1Rh4*V[,9-U-!U69XSRZjU$a,NErhe`eD3!,UD#SmKTUd$MZbZK+-jXN$JE6CR)a
+LlLThf%pES*m"2k#EC!%4JR5Vq8!K6Mk+er`ZQUC98TI1HPbqFZqL23K%J`rHV`X
+RjmFcGPLd$X3e6irq@aP2FPrr8D&M((#3!*c'aR`HehKCD+9XLbK%2'2P!d,3lAK
+(*J%hU"$8Ld3Y,Pdm9e,FrXQ[9k8(K*Li@rYQ'k4*h06C+h+qk$q96Pd06ZiHb`#
+fIQAUQID1lKHpaj8Kh`h,mjqR!i3G!86CUV5(S50Td8HRpPPX,8Qk,e[[4M(%K4l
+h69lD"IJ'3kRCBhqGj2ldRb&J"r29HCP0pLc@,NCZ@UL+qk3TZ1PYe,[k`YXZB#A
+G6Q5hbY[ZTiSm+TcS[)14BHZNF+Y&j@mAIkd$P)FLU%cLaS#CZiR!5"0X2ZXPeIC
+d&`8`Gj0m'rL8l4C+G,i85$`rfYBGPHahciAF6e1b(UmaDaDKS9$9@2$@NZPQY#e
+968e@PX!e6e0abT5Ym25BcP`"A1X@G`0$D13TrjeHKPU'-$41ENLji!Q6+*H8hFY
+%[FZX8!LBhNkK'bqN9Ga1qVG$kXYhKY88@i)e5JEXYfrq*PdpU2mA(qP9kIpl2(P
+QRV"3'5!`f*V3(66eG[XbHFeLZ,-%*4p944F*B!jYe-2R@,j-9LD*R&pALD,%$M4
+228*$hhj6(2CCE-,`EG)k5-YFAQbT%h`MQ'QYmBrm"m%6$6)0kDVEd"heQ)Y86l)
+ZLfJeNQ!MrMUm,+YTNQbV24pC6+m11j)M9ce-,$R",)X4!5"N&GDPdrGUh3P,cS@
+)bB2GGTK$aG%SeHVhEJNCfhGHb$G&QRTdY,XB+82PZU)k%EHI94qqG2R5IjUSdV!
+l[HCR6Q&0ker6F1E0kpXJ8RDCJ%B#I(5S+*LrKJRm4fQ'JHV)kBERPkh&E$#"DU2
+1iSaAHkG2A@eK'H9SR61YXJ-+aKcUbY(H(QCR9cm@MPU@RpH-4@V[peKKHTlh4Zr
+*+aK[`3YcZ[k!&4%mfT8I`EhQc+%'G80cZUrlijrAk9U@A-E8e3fU#R%b*(j0`Mb
+klC4Bf!cKp()b$IjAFBSPcRe#Pr&KiqE6dDaT"CqeZ2)lbqpDLZHS@iNFKG3LiZU
+P5Q'V*c-!"r[rp9K)""VF,NP['MGcB`(JlrkFKEh'SR[0@6Hiam0Tj0HBHbEj-I"
+mrS&KND66jXbJBNTqDR'Xh#Jq&i@br#[Iim4KQ0[e-a##8P9-(dbSHr(*pHS[Ra,
+61+2fLEaEBTJ@5p6@VLa)q(Z3!(h,Z2Fq!BE$kRV"Cqa@TrqceeFrH8maJZE"pUV
+S$LfYLB@C"%`d%m8ckXMYpR[jKhdKeJ@P@[UVl`YDNkZec%12aL3eFfhX4IG89[Y
+CY**$Ac&#ae+U08['"SqDc6Pr#X"c2r&U'e#ePc1eicfG@5!M-"PjpdTr(@H#P"c
+eE8-A`%0C2&9L#E(888+d"%-m3A!N'aKl!1ND3jB&HCabLCHb1-UK2IFceF'1A$@
+XZfF0!YqF)fl`[RR&++NLUDTChRcXT%lQDVf8p"CBCXNhb&R`hrGV%6eYc+"Icc6
+rcJC!k0)V1(M2IYjpPcC`p6m[1[HZ)EqdUMAA2mN)%hap$bP0RP)LT%k8GpY4Y2I
+EJKlYH4C"RZj#)AkFF&RlNrJjiB81X#e8*fB8DE'fa`D1ijJZTB6HbGXaEl9ZKhK
+a1HXVT5i2kM'KDfd[*l5`5dfA5B0[i'e$V9lK,L#G))'G$4GBFI9GqE%r"i&&YAK
+c[frc8l&LZjcPdL2FK#66rcGh$Yp2"3H$*pT42UFK&lp,ZJ&MFE5b2jC(E$YFV-G
+Z%E4fLCHFUARAde5ijb#3!2d"V,L'DpJlf#@2[C1a#lMp@bQ1[5(fVp(,XhdhCFl
+2aYC$Nf0V`ij!5b!)DiS5q@felVMXQ8&4``#SR0iBq*U6hFQaZd['RlZ*UI6623@
+`TTC93(0f@T[HKkY'kE-A)0KV"B6V+fqFlK2i!e$U,AQJS#Hr[bf'kS#aX$,1+3S
+0rS3R16TDr*!!5paqr$P!VF`*M+Gi$MQpYSa)QU9b8ab!`FbZ3#Mr,kh0mjh$*YG
+cr!&fK0L@09"T6%91NbBM$Qd`!E`rCRl!pGQC68'cb)C46pCC1@[RZ$MrLQA'Z!@
+Lp(VqYIIPCGYQMZ@la"eQiR0(6fBY)0iF0Qr@6A)Qr1%ekSZ!2rFqj&"e8RLTcA4
+Z1RM9&mXbc9#pT+V$,D64%0GaA8(,U+$kaGh+%#FLR#*MVa"f%%rC[GRF5!XCT+Z
+`XP+C1K+BHEie,,VrPX%-cY(Zj0[pIfNFN!"JDD'RG5mf!eXP&MmmqBDP@6N!M5A
+Ck!A-Z#bRf@m@qYp1dN)F*iV+BM6`(6`j33k[,#p,kcq@%EDVIb(Xqlqqi@59FNq
+K3-AkL'r34%2dMqf,Zqm0i&FmM-"Y3J8JJ[fCFN`0,A8FFm`q#MKKIY1aSb)-0fl
+$#AJ2If+i$$P&UK[e6-VbMVkrTmclUj[PI!"Iq5iQM1KL,KHYJdeeJ%*q#T&PU`+
+JXLHb'ZS4HPDrZ@Z`2q(b'j4K04H@FU%c3pjPTeV59ILL&bG#J8F&RR1+EB!jljA
+(plq3!*-*Z$SfY$q'e`bq9+dcJ'pr"ZUQckc*dF6!f$fk&c!jf-'90BEV"MQG8['
+NI&c0[*fKFVM'ZiXiB('k8PNXT9k(-p%(U+ceDT)L+G)`&hB-)&pEVBRLPR96cb[
+UjXC0%DRH@ME0hfUL!8@ifeb0#i6k@aP3j!'r69"cj9NYLkdb&fl1SYZbl9BI5('
+'42"cdD2Xl)fURYGcjimN-K%HT+f6c5JSP&8,h!)iX4Tbr28k$K16&%9G8NTa39P
+fr9-`I-5Z$qVa&QmLF`PPGEqkqHH62)E53Na%RFf``4&M2m[-S`4ADV(2`kAKq21
+F$&,lC2!"FETX-Kk,4'XH[[)'42mfmNLGbb5H)Q4TjFcGqmPC)%T1IVHR`k4b3Mi
+15+%BdaB'8QRF!E15$1d2Kp2b@eM)2dXmSC5AJGX`YCk@kGZ+HJ`(,9H0L"deTPI
+L9Q!VRV&C,R,b*FA[C5ZBhZQY%"i4[IRGm*!!5,0Q`j+br'M+'(l4V4+kmD%aKPq
+IG@4jGeeM01[qE,$klMHipZ31AR4NCHXpb@BdDf(XLSZp81Vl8F8**"-RTrENNaj
++kqDI`Yb3!(IH++F5LCFIq8E%FJCN3jIc'Sm6XDK%!bmCdXF"XD"SjU[H9Y)2`0e
+&S,2Fi&9)YJeEk,-a''rVlBH%`A"%'$IX&!Ip1IelPE1"26bQEJGCh3Qcj%pSFYX
+E'$A0-T@,X#K#eC&qK328j1`8F#6'm#40SeZRm%MBB0Nb6k(kraC*L4Ce'-RM$e2
+II&ka`-3!`De1K+[H$9$p@@p`"9c9,)$-M3ibPjFENjeV5V2p*FN#e6N-YB9kK!d
+bMCjJ%[),[`KJIL-H`"F&KpJck)41hVZV`!hfJTN4r@8GFi"6`&jfmmkY2N$DYeT
+!qNrb4hSN5!%8TSVmFHC@lAHR3LF04)p&-S))J0+@&jNdR(13!+m!YZalkNjf,Zi
+`i8hJS5I'8MkT(1!lI$l-f3VmXSmhiTR+5Yhf5@A2KdeECP*kI)FAPBJ5&QM**Qe
+cU'"f!QX(8c+k@4#Aqi0IMN5j0ZBaQ@kJ`0L'Pac@C3A5eEaJ(XXBTipqLpCFGBL
+aB4qMFDhK#(KC!)A9@35U5SbMeA,`PFDY%9F%j#J8[N-(HL"hKJL(Z3S[4I#14H)
+6J'64$K#DUQ%%F`J1(S8MYYCQPF'lGS%i$Y+rV@V$%R,VD`9#bmGIGj,h3F50J`3
+cUMkb(N&GP(d3IfDKqal))mmKhmFp1r(`P"-!)@+%506MG,0"p,%UG`feP&1aNiR
+Dj4'I9Tj4(`5$CZ%IbRd4$h"3Lrfjh+Tr)MiCaVH)Qe#YKm%I"V$'kLaRYEA5`SH
+Z2++A'!CiArerFC`BGiRFM[D-)EBH0UCB&I-T9VpDET9cUmL%)[%$FX&*#acXS*D
+AS0UB'+#[iCD$UHr*)bBUr&eriZ+hrU#Pj[9p&JHa-Y,*UrIAH$e*3H*j"MM-b0e
+[m1rD*q4@98!1eQ%AJQMcLp&4)83BMrL1320pNS2`5VAXTmKFejKFGjc[NTR9hQ'
+edl1H+p`pXP$Q(5rG,-9!lIJT9T)mAa)VCak#R%V+%U0!IH'Hj1IPZ,22`MQfbi'
+0S33A%%e8kkMRGY+J4-G`ZK$ALP"[9Jkpp9fZa,JPhG[MhlMPI#FjS$X&X'"-,aq
+61lAbqqD'Tk5@I)LN4HN3B**H4LUEG`Q$PQAc,)Q2Ui[CAkPmRKeTUa6[R!MTlG'
+4RQZ28TbCj12V#1rScYAk'SPUXY+`KULDTi'%kUPiX(TK@!X*Y'`8!RMrk$)Em*F
+8G@FKF$k$HD*#"#@kN!"IMRG&lC!!B$pSFjA9X1iEG+G!qA*UBrZKcTG*CcKD&G"
+9SeBb3BEa,0BF0i9GkY6$Xj!!``ClHUU0i1JbZE6Y'JISk1`Ykbf0-50YmYaiHbm
+kSrT[Ef6aHCQRYY%,qZ*+cA6F5YQai6[+p!Kiq+36Xjq@5frLdXTe1A@AHI0B8FU
+49'8pcp!IS04mHZ'&+i'V4YA(I@BC*N-61hB[I--(&ph[ae9G2fY#4H'-p6LRY1D
+H@hK)0!F)8%34"h&Lj0Yj#XNqZ1Lq""hf#Ii$N!"PjjVqHaK9N6RdkJ'KQqdi4QD
+"[X@T2fV&*PjKj[NA3Ka**8`'FMQT(rrHVcj[%8KN*B(,9V(*Y3(dU5#[l"+r5QH
+h-klS04ARD)-qP3f[1!LR)2pca!((%8fMrm0%-SY&D)5@APh)!2d$EJ1j%'ra`8,
+QqjMp"2"RC$@9QLai',fC)4l69fPl@cM9Kq$"AHRmk$eA,fdT8DTj&8AG'NPf1Jj
+0Rl&2E8P)E0J$hUL-Qapj6SQdcCIc)Lar[2CdVlGH%H8Lpf2*`P6TRXfmeRI#+YZ
+0(L8eqJ%$8SG)!"YLIJ42M-BFkJ#j`16@H'dh56-PAS'[L,jYJDr+24(0ZX(3,Y!
+HjZN60IdKGe@Aai`*CScDNr%63I4$-Rrf8JV`%rkrBT%B%2-'0141V,bj,d3#H'K
+US-Y@*Jb*F-XaUI[`3-1$K*FJG-ipq5hqMp84lD8"6aII13'Ml'elQ43Nd8Q3!-5
+lAT'fAB838jVX1$@clDpSCl$+)%&R,[@,eJc52p#+XiPD)`I!VjJP6TX0lh&3l#j
+N5E*E5CfZ,iJFc&L9!`lpH!DaN!"UI`L2q'!DV22%%b1@5C)a()dc9V-P!DP!j$I
+MTrc)pUYF#D(S1CYT*r`X08[(`F,k'm9meGCA+L49)"G1!M6j6f@NbfFqQKF(kRU
+dHTQ4Q@I`aDeMrJ'`fAHE"#-Lk!CKHDi#EU5J*pG(kE!LFBp(U(JQXQXN'SkTD4b
+%F9+61Q5HqFe+*EE$U&jTRPFa0I"G@i%@aK%Gf1aT$6$X8h,6k3Q0-hTK#`%)MKp
+&2%YEE1YM$klrdhCPEmF(PDNHe9)'@bK&UUl2#,1*8r'TC0X2Nl$0*RFD6#X$f%D
+j'Y-Mq0%'ARDq)BF)HmH@Q01PNe`rSe3hKd$C(GkQ,eJiSrSQ((PYA@MK-8ii`3X
+'UZj3%BBMBBKrA)mEaSBj+k3Bf`-Lbd-3@UTiMVZ!-l$#4Q@#(M"Z`8$8ee%A-,"
+"aqFa"2MF$46JSN%EFNrF$QHS!a3'Dd$BVcNV*S3LiNlND1(dm%8&NpX#'0#rE&)
+&m48,V4S-1XSYHB[aqGRSqR6E8MkG8J0Q-RKXMlq,ZQ"$M"qA$Z&dGTBV$lFX@#Y
+PUc4&eleV!JHjkarh,QYDC%H[!`[cF$,IFe%jaRUC@kTUQHT-l-j94S,FllbLM3J
+rPK4Q"5Mf+rD$`**,%@"m$ZLl*F2TZ(T5H`CRF,epar*m!DF[#aRfNGHpZ1i1!8,
+QCX0heRQ6&kE%DQ,Je,K!C#4bkK,2mab,`(RN+@Ap'#$5`Z4"reP",@Fi!rjaCC@
+Z'#KaCl$A"cV%YHJD)FYJ3N+93&PJQBAdLZ2D$)1Plj8c%hG154Xc&'URLYmlj99
+*'RN$6NZ4i)#BF#YZ$fEPkY%Z@48lr4GQMlZk12(VHfI18DEbY9LU[CmT!JF3jYR
+%!BI,EBejLiCHN5SMaEV1Hd(N5ElmJRLk110i#qc"(4#e&BEfG(6"ImaNdKbdI,G
+aFRVkSQ45HB(Vk"2SK@6BITYGEk5RHQqTp()J`mK-U63k!ULV5BbFAQVN[T)FiPK
++RJXpMCG%ZCp18Qd!DjS8TU)I4IK`@R3NTCi&RdF`EhqGSqhjl'jYH62V34ePK)`
+!3,UJU6mjhkU8jYXUiX$,I40fK)"66))Y,Z5-9*XN,0G'!hB6LJkYT!H+[C%V&lh
+EHi*FQX*l*8U)-Z1$Lb&HkG5(aBZVHpiZ%'(Hf*pPNc[BCX'l&jk%J!5bP)!R*EN
+JMpIe8-QI)!Ta-AjN#M"r3UlI8TNPh8p+DKi%i4j#3FX'5k@%+EMp%SJdrAqbhhA
+'ZISL0*d"D+T)@*0lE9@*Kk'`DpIdB3Lj"c(lAlC#Q1IH#QTVKGQ&&4dFQH3k,)R
+h4'*D`Q'RY5qN[kQRR%e4J5[PiAqR$Gqc*iTGh6f2MlR[DXaJ2[Z`Q,#l-+NQ4HV
+mV3iX4$a'dJ"Z5$23UFf&+2dRpIp'$6&LY%P#8dKj'#8!SU9`JZiF#R+-`J1IAHJ
+qBck",beeq[&"RLV-mQei5*!!NG+M-FZJNJV1P`FjBZd06LKZ&(mM@0S#biYJfL,
+Im)XThjbSqS9#%aAc,c-"(pS3'a3a*(HL[,j60lQHBYKIdri0,ih,(XiX[S,jQ%f
+aqbck88'GC9L4LbDN"-`"YBAVSfa5`a$06@kXQ!eTSdp2LlVS(8%`FG8Ep19fqkX
+qHPNA3SqA*MMIV&*C"&h@GPf$m![QL95RhPQPB`A8$VCAdGaXNFSaA"3P0Y'eSjI
+ffe#6i+Y1mF@*H5E[8$j8HRU,3kPbPR6&pQH!E1QZ',mpQd"'cY&hfdJ0,fj!(`E
+`c$c,lE%3TJ`9aYPHD-)mGMU!,!-,%9"IPLED5@QUY3,j,k"eBSE['J1DiY*Fpq%
+f8bfS+#XF"c1f!JAB$+MD3pD3!"NSPi)'V+Af2cGkmIi-aJ0#,9R#@f5L#M9i8UP
+ecja"cUNJ!R334G@*ChmBJ[,CM9Rp$P%0#b*[E3T8k@*PIliUm2l4QrYNqm%SldZ
+djm`e9,R)hBkFN!$`rE$F8"d[1lFV*fY*$,+i3fpK!2k2f-l$9X88A0Tr)VbPZqP
+d#GCf['IR0C(B[jB!3X4d"f-[,Z[$Xpa+Ec(SGEmhh,C59lQd0Hq5*BeI'K$a@&$
+Ul1@-4jLahhQDJ`epJcAY!5,LI@ZGK*8hG)JXJJreh'N0)eDJ01V3S!4*E1&9&II
+,,SKbdLE&*ZfSC+9!LM@Q)c[DK1PVc'H)"P#@,H[e-YEDTS2F`HUq#Q#UZ*a'@p*
+Y-@VCXYdr(c*2HJeIY2rM%LMQ&VbUdX58*Q"k[XJK6ZQ2icEE*G"$2R2L[(3CIh5
+IXTX)k6kTfQ9S)*p[(SEP1cG-CkRP(p#6j"&4JQAmJ`C09*IF'V9Kj3QYK!'5A0j
+8%e`m1D@rlr*+eiC,fF#MDElh+4#[%Y!B9[L##YfL"aibM*br(!1Udj-Ff%`!V+T
+q5I"RX'#cNe,4SA#bK)`SfJE6MEXlX5jRk@YV68GDH5*%,%),LH2G19Yl(r*D#SL
+![k1Q@TL"9kpi0j1q',&MaS1"`V"3VJa'Z"*8E"`q&%F)0C6@elC"8Bfmc,Yrje#
+3!#'NQ9$ehC)d&EGZ9VCPkjPIY`4i2U6L*F8iM3I8dN9@YK4P#X#B@P-,8hA-k'F
+`NPJk3C!!q5e[kXjU'[hHIfh*ZT,-%dh'"p#ZcNPeJ1p(THrmUp)1f!,08'JFqf5
+Rr5hh1adl,CBNV`!p"NGdVR,cA'dE(N,Xe608(9QQAjY+UZ)EL0pr4'A2cp&IJ8D
+Vci+[5KRTXS@25b2`F-@4e0%lJ"'%S"+9adq2MFEdMa8ElbZ9ZT4cLbjE$9`65*M
+-S-Xdj-FX"(8YQG@JqM%@kqBL"P)CZP-T,VJT%Ji1J"D@-ASHN6e,*J!f05j2!k+
+UEk%9AV[(%TD#S42L%Fff+q%ipf[%31r[@dl2q$U*m,'L([(H@JZ%qN%,+6QS*&P
+(#!$6c*9ElKNMEDZJTfhEd+EDaLjT8@UBCijMq$e&,l#c-2-X$V0hi)Z18ppfXrp
+kiCk+Hlh)DcMMaX)d''K[jqmB`cTcclmEm&K(*Afh6@d)6MP-SeTEIXJlb9DpFE0
+'GGr-4r[bDY!BNeCT'1rcLZP3Fl"BU55B0QVIiE8&EZ&%hHEIX$1-V'pVX0F$#5(
+@ha2%eD54X1UfriE"fZjjcf#-@Q%YDpIYYIr%MjdZ83'FT#R3rZ%VV5SZV)r['iJ
+,Q5")Vm$D*%-&#6`e,8bS,[H9B)CTA`EF`J9'R#HjP2lJYMNR4Y2,BT3(Ir`G9dl
+19@dZ@r*b"m'PKCEk8b9IhehGpDZap1YXKMV,AM+Td#K,8@a*rpSIp08efp%S)e8
+dq(MjY$LF8GBp6i6@1cJm[!dLD*)p84ialT,#CN*0((j"Fb116h,-cj4em(`9hH&
+,Y6#!)iA`fGa`YKfAMc@E6%&ipM0F$(I(P&BP0qrBbe4br*L[JRG#U`,Dp9mP4rB
+!8J5E$Z@#B#Yi2bJeeRdp6JmT"Jii[IPX4)(YVF6f3!b6V`a"K9`J[K68LcLX42J
+5H)G3&,PbZ03,9HTqr,lC!8U&UfP2b`*Y+)`l$H-e(lGL1P*[bZ3Da@*G@hlKm%V
+Q5$%fHd+)T2*r1,!aS2-HC`+)pilc02#6Z@`KXh[9`PUj8NmRlF3Q%LkSV-TGNkD
+4%-JZ0%!UAilR)DhFPjX!&5pTk%DM9NN"r"1qVR2bqdG83"je(%Tm9rFL@Vhim5!
+9HZ$(Ge!%@#JNd'a3[H60X5(B$4JT0V)3R8jTh0b"i2P'df[5'1ae"J`m*pRkkF!
+S#!AF9'kU'Fcbr&qrA830NN%3!89p)i-IR)CECCEcV5YdPT,89rNKhRGG@%RjM'3
+-rpJYDD1G1TpUXrSNiR(*dZUE9T&(mPP!hlcjHQ*"r3BJlcQ85RV@9UYHUDdMe(e
+k1be2*0R'KR'q(KBd'EHUUT&+-5hRLQ4[r*aaV#Q5"S8AXh#RKX$LVACdN4D4b0Y
+G"heY+2Lj3(UbK6,"hQDmGf+'RDFr2a,03"D`mRDq[eVG""$**99LI1BlF9hF22$
+K(SQjUeFY4$ebZF*5TDU2"b$kIdX!)K@Ijffc%RJ@lq2kNmLCPaG[ZL9)F5dN"j!
+!Gi["XeG&#&fVRB`-T%VD,L"E`c-ka8pJeGQa4b!EkD6aATL#%B#$1Kk@2[2cCA6
+8([qX+-$q,DRNLklmM4'Lp$SYL`U0&edYb5`DRh'JArPC@ei6C*SkL5Er6d(bJ-)
+l5*J6iBMpUNL!dDf0[LQNjb0A#bBS$&DBG4ECpF'bV1D0p`)5"E&+HGF$2S9m"')
+N%U4V6@fF%YZ(NZJ0A(VliZAF!@cY9l&mM*!!la[GCKi#LlGI3#e%"V9)[ma@KG1
+0%V&f9*c8UbbDE4+e)(#f'2$I"M*GM-q#X+"+",,02MekTT5%Q2mqkMHaH1J&%)B
+rcl*#N!$a8NH5!2m&2UI#XL3VP2ap$FM4cK48B'CG-'U5RM2e1J0+AVY[b"8M9*J
+4!H&GkT09N`!5P5rf2CXDj)@BG1@#X'%!Z)ZA5V'dl@kifDQIK48cEd58Jrlbr+,
+pmdm#DfkU9Rfa`$E2f`Dd8IEfXAD`iP!ebCJE*jB8bAh,#rUD9,NY%eGE"a53!,E
++"8I4DbUUl$"F"k&-X,CcD-$c5$2hN3[D!YbE3XHdmBj5+BFL0-@&13K-CpC"pNC
+%d4RfG4'60raI,&N)JcEiQQPbZ-rF,dmE!EXXGFlSKmf4VL'kIXLSF)iqI0X1AVA
+0emlN*dAcD'NQGq*'3fS8XJQkdhXDd)H*P08X4!9de88Cj(8YXE4A+F0BS$jdaGY
+E9*XebAa38DfTpp&XkFEDGR+f!3!V%XkS&i-!(PEl1q,XePc@5N)+XZ@M)'Y1,-a
+8pl$iTIj@IITZEmRH(I"lYD1pjQ%LYUaB5QUIhb[LTa*@9bj,!qUlh88Dp0`f0Gl
+SJTRiL[-@bMpceDV2feee1GA2I6q9"S,1DTS4I[&"P64$VeN'VAh!kF#+NF["*K&
+BCU9+S8@''8fCT6@EAf[crp,HL)kP4%AT1DhhAjaH8'YSdh*A+'NK*e1(6r"b%)e
+l"qA08-iV"+'"k)KL9p-$pHJ@)--qEG#GpYdqLE6C(`1,6h6DH+N"0lB98SKP502
+,EZ6!bYl13*(ShkFhJMq#9%Nej58+(0p5!,rS9Y"e+G11qa)%0[kSj&BdR$5$P2,
+!LC4!%-2mVEkDcmU$mBTd@*3ih8"&&'Q8Y&%kCNUAG#lJGqSNQE5[HkCJE)F+PQL
+63+H['DLA,V6"JSS9AZq'Ir**A9P!`k56,%[T,,Sj$E[AYp*iY9*c5MAMMa'MMK`
+1`AB,cM`c%@F1TJJpd$D$GBCJTU(MDTSJCfMMXBYLL"hFL+bQ3[d0l,Q)QaR-L5G
+'"9&VN!"D1VQ[Q8d9%TPb29eDHD+`1Vc!FEm,*D9L'R$i6Z'qQ6mj+qCVUGG%Q%d
+,I!,cfrhJbmmBZ@2EdEpT6$X`@h%cXZ0EUkfVe[!I3+GjlL0c463hEpl8qP"Z1h"
+T8h0kYU6S)ZV`ELK@G,QQF(9cUeYTPXTeH08M"UpqNj@Y&a+c!cG#4J#6YCCmZY[
+3a-iY"khjmfEZqR[qcb&"c*8XjLrQNeMhREe(d@V-PKR!p14bNDS`pRlIp(+CIl5
+bY$S'p43(Yb!HIqIQdF"Ra`0h[b"-cJU**%&[ClU(8Ekcl1M$9b0ANI68IiJfqJ@
+PAeY2Za$EJYkmCT'!2Qil[XFAPE,BK#YdC,[A"r4@ISfGb3m8bfqPA6#CI&R)hAG
+C0-N`Pq-LN!#eSrBZ!Fe[erA)62L!ITSlr9@P*#B(643)m2'80q!6ekSGU,#)mjF
+Xlm8EXDIa)PQ"5MGK%NBSH9A$eha@i-XfX5j-qQ![4B9i0fS&42LY'KeIdEDaI3L
+hIGBcVN88@IM!SY0ZMmq29C!!%A`9!arp6&R5Fh-bd4"q&S*p[!EGSY!T[(j`4q'
+*p5@fiC,cR!pL284UX2SN2YFUa3[M%jfK9"VDr+P0%8cH)KG$VGFSrV-N-PFK82(
+i2NRhc5p0)DZ'"QeDE*L4XJrT!6Z0e@Nr@N@L+!Xkr@@JQE(pLHL@mEmcd`TBF5N
+N`Z8X08p5@[D"mme!5FJEbCL45Kd0EV)pUXEPaG!8GcLYKG%*I#PNZ-ET9+&F3Fh
+NlLkY-(KdBqp&[eLLXH+DC#VQF,p9KjFSbH@Q0[3if)@A$GI'--qKMr)X'9&J&Zj
+*mJ2JXl(k*F+eF6p2F*3h2erXCeHfRiZ[#X@h[3i*%-JjJZHUY4I"85eiP6&eUCP
+3`&8%1R3Grq#p69f@Lp$!4Aq4[I9b4TrkhH'R+3q!2AqTCfQKZGY%fm`[49L+3Qk
+IM@T8eX5h[9`a*JG*Y(M@jc!F55qicCpq[#d)0V-U)LIL!T33XbUT@N,*r-(c,0r
+p)YbbGb$3NdM,'RUPdTkl9%NHhK$q665r65jhXAL'-L,eF`Y)E!(HBM%m$c44MD5
+U(#BCCZFPE&ehhm$I43'(aPq`iCd6heAGBQZ5MQ%&Tj)pLIkJ(f!S0d@dNqS0%jY
+Kfi-9TECm(QFfr20JB-jlhe`[J`JZ$$mVrq)pEQG&KFbUiHPQ`kJG@-K2*5#d6i,
+e0*cdX0NVf1PB6Y)ERh4ZmU&lQ6mPe*e@T#$@m2TMh#1Tl0AQ'0A&dY%T%iY4Ida
+k"pqS$!2j#3(US8-HI!G6Pq*(!E5`9A$XH-@JimPbAC6hVFqfX4e(3(6ZRApUmU!
+C!TS8QY+ZiE2hQ3D[$)*5a4b4CEI5hHR[G4YcNG*XrQdh1hK9'DNLq@,Mh2%dpPQ
+'Al#k1IHI5iA0qV2k("l"8j!!r`$!hR5KH4[KNccQ2bAbDZ4kPS&LeSU-cDNHNHh
+N69YMq3PR!2LiHNl6RrESRij-SC3"IV`L"rNBf&Qrr6D&IAGkRikqjFjT`91PTSJ
+rG3Ac2KJUm"URhNT-1A6'EfKB+%Ti`S`jakF@KQ@3!""9S50eViXikb0`r1[%2Pq
+NQPcVJdCTR(Lj`9[aF)cS64RVF5PN(65ff#!cA6V,D+&0CElAK8+Ee!A+9@cE8R1
+*JmH"aK4EYkHe3FjL1d4%4Y0X2D(9DSD"Ze6lLRQLb1"I9PkU@h0!%0YS8QrpQlM
+CFLSFe+Y50$'TQ@pIjilZ54Y*hB8SdPlfi#DL45jmT94`R1+iaVqCTk9ddZ!l%'c
+&5er96FA@CY-lfi3&hA1$65TaY`qf+aGATm2iLr&-#,BXRCdp'b(BC*8e0ZG,9@J
+DqkeQ!D6S!P4@bamNAFCmiraP"cI3R&FhRB-mG&)*T$4EZZG!F49NYC`IT+j&0%$
+*Hac%i9YGLlGPaJ$SV#1Cj+N5Nr)$5F5pX614IH'4MMLfG%-4bdjCaP$Y!XcbB&A
+IMBB51'[9[BfIUVe6Cb$UcZ%mKr*qTX8@+A%[!0V(ArUj6``D!mS+p859AXYPJN6
+hDb-RZi9'il,9c`PJ-Vf9i@%"VTp3Ni@%J`a[cYNa!S"LHjXLeCiEJ11e-m1d86M
+MC43k$qRTKBEG40-Efm8#j`i"6ZXCH-+e(JZZ4dPh2'`dbHU1'KlaVN!Q%2L!`)[
+CRdX1Qq-5V$DqQ$("Y1dG)+4L[`#e%bXi,6r,R21d6p)EhH`$DTQTkQ)1FkG@X)-
+U)C1YSjT!Zp+F,,4)pEh)d#6K,VjRhfT!NPR[Ed'Z[$)C`1fed+q-kQ3IBcCGNBA
+Bm)!aKQCT%C44+P)J8H`BqPNIZmP!0ElLXB5D'rZQhh``6r82"3)mI)h4V4EDi2P
+5)f1K*Ia%4HafYlPpQLBD+QX)Q!r4CVmJ3Q+(%fZKeq9e8QY&,Qc5)H-fN!"Z"HS
+Er0M1(G2j,63blYK"-fm`dRGeD",+Pd8AcpEda*!!P)!*eL0eG'Pk!P*E3+GUhGZ
+*+*,,8HT$$$1$Z$`f+3aXD*+i`cTjEXd8`Q1(i*R4NUIeQM`XURl!4r-TVEZ(YQ@
+MP$HQMD[DP,6MdV`j!GMf[4d4Vq&#c1U8*9l[3*IrC5%2EC*[3cf$XM'l0CJhe8U
+i&1U+8hrj6$V8D[G)8TiTH+'*e-cqfB8&)+&pl#lYif3(++D5@DCANR"ZC8FJjXj
+0T#ASK'X5Hp%ib+*X!cFp%qE)S,-*%!&VFp2jJaBHVGcTU9S[dJ`%0$iV%(bk&IQ
+rUI&1A`2r#cR5ZaKTM2mpFBpV!q'P53SjrSr1aY2`00@lN!!YG2K3KXGHRCC$,j[
+)Mh(AZkCLJfMBSF-IRY92[bN-fVXXCjpC2QE9*cR"qY%*P',8B&&`XJLR!!qr3[Q
+A["V)#8i"89jX12AmJ(jT14A[PJ[$,Rq$"%e*&,CAJR03*Z5#`Sq)1Eh0J"19CD#
+kaQP0D+kRQm"Z186[&RGBYG1I`C@+,JG"kK5D*+ZfceKATK9G'hUX$D-iIDi)"*j
+`hTmCD*&$XV-2IU#p)36HrS,e-1hF-Kr,ITZ3!21lZ#YE%iGeKVGbfjE@ZMa'j8B
+M,L6N)TeMKTP$$hFjG$VVSj[Q'(k,$p-8fVFSLpl`TTkpBZc(+1M6)a0(B5S#-0+
+"E0KF'm3"+I$HbFRI)-[lR,0hfCrkSNmi)#EmCckq5e&8X[2(Cpca+c3LI85BFLk
+Y)h@)U("dN!#Ri9YKlSr1KUpQq11hjDr`IJ(1mH6Yl"hU,@N4T%#DHJ3F*k9ErES
+XL)iihr+I+Y)H30U0p((6%AP5E-H0'YaCIXrN#RQ2D,2*1XJ24N6K@'&@f(G'X8!
+5UV)Qj&h9YPeC0K0qQ!Cl3S)6,N4afFPi,N&*lF6c5J%TjAmi1Y"ri#XrK2f@ZjL
+4KNd*#K*+kT(V'JJ"("Sf+VJAe-h81&X,VGrf06'LrdBV+8MjCcU11chEjK,Dk5V
+Rj'S,,E@%+MbB)1kLC9X*!K%BNjfIBR!hbd&f,@p!KA6I4kBJ*12)XkdJD[+qXR(
+N&R68f)E)PU4*TcXD$qmEe6l3a0)Ji-6i0R3+aF$h2FX&I2T0Id(akU%`C98)%i4
+X$5a6N[D)&2Ef6aC+IUZ5l&G(L&S'SKHLX)#RiMUC9Aded4f4SXRrm4MSiqd6Fq$
+q23hbYa-#i2Z`'*e0$SlMh,PYIkRk5@E4fi!d(LZiBS`H'L"R*r-2E46bcqc""-V
+AX&0KlMSAUbHV0Z%0NI"0qSqkJplrQ!je9-iqMcR!49pc%'`L895PHV4,Yjj'98P
+0C0'S-cRq9m$JqHUjV8YjPMddilq!0#KHDZUddX$i2,Y1Ljd+ak"2'Gb0)rl(2A#
+0DjmkJj10*5l4)D6G*'Kq2NY$1eaK`B-H5!pIjc&GKX[((m*TSS9[NMN$Crhpkjr
+M1U)SX)E'-8LZp(p`mJqQ8VN`l'a#q2icZfGV)3IFh)$45#'&rSM4&RR%j9$PQLV
+*[T!!+JSdj9SEJXG3fm,[LFIeEBAP0`a,"C!!iV`J"jPTEa-EXd,fq@rQ)Y*RIH9
+$UR-mN4VdTJ8(Pe!1L&6lXPM9Aajhd#+#e@(3FhUCp@Q`A%3H8KEJd9&Z*kM1Rr@
+E[c4'aMAj"`8qLTa@Pm$`Q+*#Y2#&F[*j+D2ZpVG4"*NQpZ5)m[2$&(`U-*8@HZq
+dl$U#aGN[+03Xd9U`!a4D8"`X5"A94k(dkmL"QJSS)'d45MI4bZrH9rVAQ!lQ6Kl
+3NZ49cf3,lBGEfQAXlrIb@CQQ!Rfe(+l4mqLhJZRT!Ub4`"MNc"6"epb1)f-S5UU
+dq(rYkfAk2FR&2TfJk@EfrqS#rrpUNhAJja'2LKCi8QjKj'mIi,4[36"d*hcZAV@
+#B*+k,!D#S3pA"0R)eG*C'eTFl9f0p#!qRkpFYb#p$MaDH+(TXYM&Y$HmC``dU$'
+l,9p,8Vf#[Pdf@&ZX*'89dAq)lf1ek1pGIl-Q9-fR+1c@)pMi5Q0b@,B5)hd'Sj(
+XSkTATCFF9mX40R6RKeGpJ$9*Z`4-4iT))lY0K8Dh5(l@HfG4Pb(jiV&2h@2YPQ$
+GT`q4q4V`-A&QAMj$T5l5DJ33)4DMiB4rFBbG)*Ia%eDQNYm[8fAmrIdCY@Jd+9e
+lkGr33)mmhLK$X`hA5bCT,T`4*4,`4-3'$@6'"2j4FY`[Pk8BZR+C98fZp8rG)XP
+52aSF$ZUUQ@Mh[8ELiHCZ+Xk4&a6`4FIKr(#El`2q9@,e'CmP&2XqXikJUUrYZim
+FUJ3@k4CI#$'RV*d5U$9eCG25*[fMkLU9Lk&[q"f1R'+Q2%d09!Jcpj&YTQ+!p6S
+@G8HejXc)YUmYSfkALBH9*LNUMbdT9R(%96K+heA#CBNJJ`V@GRMV#TH2X6f*3l+
+eG6K@j"4&kRdcX@6HAG!bA0KR@XN"$"iCEZ@[1E9-5h5UY*pi1-M'1Tk@dpFj'Ak
+N0[ad'('X@&EIXBmVeEicGHkc3R@!CN4I"9V$[RVRZk*S)cZSLdp-Qb9@Al88Dp8
+p6JKeipYJ#Tm9Lk9E[p2KQ[h#,#f@[`$5,Y3H0AN9rJd!UF(cc9kX3*efi(rh$Tk
+IeBEm,Dak+#'BJC,[9)m)XGG+"E[&0FRP@LdQ$pb4blZaF!Ij-V",-hjCiC9(rC!
+!M%0)[4Sj6UI0i4@DDli!cjJehDGbD&'QL2IG3mG`AeiE0ZIZE'MA+ibGT5"La3U
+'[MD-cNMH+T2Up0DT*B[[2*IcJkpMXFKkVNT!+S!aXcQ#JGrQYSKS62C#6ChrDEa
+e0,lGP2q',E)-fHL'kT!!P(`iqp&lr9d!KTk*cp)YLXG9G0pf1C4EAB0h'4QEDl"
+1RQmX!A[9B6p3IB+64Pfhki9-'LL4fIJp[GUY1Sm0pKqpPh-,a4Nl3#3Fl"!QL4h
+TDTdS)rq4LmpH+k&#0$CC[kpXrCcK6*`A%2,+3q#5QRb@i3mJi!3e8QDm,E,C,i)
+rHX[Xm3T'UA1$+E*MKNU[MdEEik8F"q`eN!!jZ,$E[Uq)pcmkbc#qPJ5"'JHI%CY
+b1F-m0##p6DZ!-Q[%(@hJqE$iLc[-,!MS4EM,G#&jkZTh'E@DpR4%HdQR8'FdiCS
+H$PM)FG&'[DDHHrR3DH@pef!2J18!LXXG"B#kFYlL20Z#Q#@"+EV3#,GQqB'%[i[
+Gdm'Qjpddmh18cj)kk!ANT6)E'UF+9,c$hFp&mDb(BXcNhG'924rfN!!&DN0*D)!
+0+qU)"fceR+,KR,[`APD9aa1I!ZZRmeMCh8#k-RF-'r6ZArBC@jY@BM@`fE6kj,i
+I2k''[)EIp-"@i!3e@Pf!Ld`FlhXE5'ViUdGLGYADS'fm@c+PRqjlpC!!iXSID0[
+h@%l19d+[#i)T-4lB-G4F6cH`KfFPlMJqD(hQ&TV&XdZ9I9C@2+m0F@Hkr8qpq%r
+j*9l*Sc+AbmDNK`SG4J4falAi@'%#4Vq`'&J2XY$6!Tk0a20r4eahh*TqSpQ,"X4
+&m$l3AdH-EP9"#dcpNh@9p0+"-`GJ#YVrj*L-5"0BU&HC3hBr"KkL-ckAk9Y)l5E
+Z4jl#!qfhd1US+@YE-@E*c6c8,f'8jKE3NrCCq#9F'jbGp!lfHiKFcFdm&Ie3LhX
+KI(cIp2kXq)HbE5Rh[GR8-B!R[GdDZ)Z1a8d81HZTML#PfLkb(cR$r@bBfEPQZfE
+iXqCdGREifMHqBedRSGBRk6k`RcX@`'6)J0Ir$bZCbKZYjQ-@(MjeH6j`60N$Kc!
+Uj)5G8PGZp6(%6Sb9*"-"VRS#MrLEBKYG*'0*2ECd3l5[GL,#-4mLpCLh-SM8Uh,
+,'%+`h5-[Y1A%T3'@@q*6D!iC5Q@T#Y(b"JP[d3Ef+NCqa0#F`0&`YD(6PpfFa9d
+)E"V&bkfGb5hQE8mQL-ChTKqJ+58HaaP8m3"Qa`l9%%X8JZ',k[ZNHbVlFdkk&,8
+fBJbFcrJhdr6PYVa4r+`h*pJ-00%iP-Qb0I,*[`1k1)!S-1YZPRi8L%G)0X1MAmR
+%(hN$@5*G5iP1@$*1K8S3%h*C6%IHQhUpCCeCI2FfT(fCK3#BD'd+3)fhSiGMjJ(
+EpAm*U-`M)i2ZS'Z"#P'%j[04'lCmE%pd'GrBI(i`Gfmba*@`J5E4DK+P%E8M3Mk
+UqTG$qLS8h4h6*-SMM,6XYId%Sa0*2S0$*HSGCP$HKN,kjL%"q#$9+(m"4k,58Vi
+M1S*'!qEp-18LI+*eDLK)rhTriDUjZiAC+prINf"h#lfrSC!!MLbKFAqceBQA+'K
+ifq2hHY*qf)pDd+j0l8SA8NIQ3"!84bbHmq!@IB2Bbq@ACVd@80I![X"*clAdlSH
+G0&-jZ1VH32b`,X'Ke"JD1@-q8@N@T*@TUceH(9"4dP`Irl+6!8bcd0aAjHCA80@
+e-"D"4&Q"9ATDr&e-"!#PBJbmRpP2m[@hk##5RNLKmDVXV+'!J6%pRmlrV&2F5%F
+VM*Lb+VUk,6!2&()aV[RS0$*9&bd[XX&F#AREd-F%0QM!#JZ#dS+(**3'YI@2&G@
+m*E@0LiE0#51mXrr6PZ@-qT'h3BqdQBUqF%L6U`C2,"VCE0X-Z@0eeq%qP$*`1@N
+FYN#dK,d(-L`VKXmD9jZ$R$N+-NK$1NA6!F$pCmeeN!!Cm$cT&c*k0L8bbJHMQE*
+NpKV[dVrA8#0BX)3k+9Re@Y@Af$Vcp-"LAU%0!C5rBqFQUaaDcB49lPp+1M[BY[U
+j8cU"*2HhSd)BJ&V)B-CfHT4cYp@X&VRLEB1KX9$MPqiB-k$HF5G4D#6CXHKkI8r
+U4)`r-5%3'G`Sf0ZLI@0GkS,pYbhS$35NEdS1kC2$k0ahX!aaYQ6q#dYG@fNbFVD
+6Zbe)11N9P582*`#L6a4$65AZb*Rl8--ba(ID&6Z4Qjc&Y)%CK#hZq8m")63fIPB
+A'`NR*UHK8+hf5LDbBEMbIXJK+19X-)+%09@M2@UAdIF&62LYdi&TX,GhiqTYMdU
+2Va+D043EDGE5r)pZ4bEpbRL1(!*N*99[mcrkB*ZEaLJS(!hU8$r+ar48hhUS@$2
+S3"+M80dGi,[`51*+!Zk8930NL+pq*c4f8$*S"A9-&@qp5A2H+d1Nhb0[qR480Qk
+"Cm6lZ$N6S9eBB9D$@CeNlNq&QkUNNPSiQ5aa"0*R2I8'K34X&re,Hhl!T6GfCPT
+d'[mDTdq"*'K98r)[)p1(SSNRCm3$mEIXIadq6pp9$4J%KMIjUqpd2E*E@4YN29q
+F00-NNe%i@9cUX"X)B6l0p2DYp5G,Q0AF#Ia#0ENpGkh#i%Q4Y"DT(cbG`'fhlLL
+jHP'A'+h+ZL&MA"#8ei*4bp'qH*ah65VBM%dA4T`UmPcF13YX)d"8h8FSkekP6ea
+R6M@E"FdpUS!9I6[EAk*m1jf6-h1CcH&Pp,j,b1!drmkQJN`F+&$Lc1kRD2[KYSQ
+(D5X'-LcA1j8DDHUS3I'b!Vp'EfHRUHMa"#dIQ&8r,Y6ZkbJG3eHT@JRNV1lq*%3
+cY4MTR4CFLclY01`f#lD5#"3AThaSE5Afd!(6Kq@!`bd3DEpDi)f3!&lpBf(lar+
+1*)9!-S8T&Ye2KKb-)Nl+f@NaHC1R1)mXNNeq#r$%Nlf3!(Y'RFB)e2[XShALSF!
+fC*R+9%$3"0RVLL2AI&5flr81flcdpC6a@,8($-Ch5R2'C`V8XCb&aaUArR8m$j!
+!!e8P0I#Pc*``(T*#NkPE+d(-'2!Ef(TS'9FrBk3,UHU3!(Q%VS6jYU!ETp!Nl%T
+KA"`Y+3cA++'Z*dZk0!CYEYJTli@-9eL84e0!HCZF*S56p6H2E'Y5lkb63LAI-19
+Q[8`,G%SMK2!BJT!!Y-X@-r3M#C8F0MMFUIRLc'`[S2`Xr#ScUcKMeJmr%r,lGMP
+"[0S#ImFGKA$%9KiV6Y2Up(eh8d!BNkZNZCc$S$iZQhC6(l&H(B6UiB5hTc3J09Z
+TkFF@13+Z%D%fY1ERUU!(81"5%k)@5PQQ@81UP%`3`6-hjeVEKXdT3%,&iUKqkP,
+N(LVG)AJI9mYZ2&#[lCIrkd[@P1%kMUQS)'j0UH'SF4'CL[pkhF`[9dH%NkA(-lR
+LdeTmZIRb8A`MeQq)m%Jm0QNLfK2R)"br3HAZ#HbhL#BMIIQ"Sql&,Am0pepA5YC
+VVb,fKPL68LiHL!i!YY1d)Ta@aJ*MVHa0I-$AHL@H"6[jLX`m)UX*#fZXFI5&Seh
+S6D-42Na9m%Ge1b8jG!I*!m$[8T1P5`p(rZNJHq9aS,1Pbd-q$qD%H`BJT5iDejK
+)iAUZA%jl2'V")f2FYK`mP&-8(p`h*9C&Mm1`mi6k*4XkR$4k&0I3pJ!DeAlYf,-
+fc-RD+4PQZcDC9p%lB%,E"@A-URjkC*4pK0F%2IULJFi51IVF6$S+NjhbR`RJQi(
+ZkC!!'HZ!r"0"@TQiAKqQ4q[EL01b12m$CFDY*E(H(NmUGH1h+ceH'TM0,-2N"G4
+VHN+ec6aMLKUjdA)q6ZJ1T$Y@QSJ-ID(A1eH2"aq)"JaqRkLXee2'HY+''c*jBX3
+QI$J(R+Yd'Ue)D-QP&Ui59rP"BYKc5XCC"d`dY@LV(kI#P6f,L#HF8R!m,0Tm3B4
+XT%QAU232fUY@KC,mGAl,80DidS-9$qhlpABY82`%H8QieA+1U$%!XaTCDf1,1K(
+cLfVp,G&M+Y3S#BVE3UpYA52$9Rc2AIMZ%!&R@ATch"eDc`hqGUe`TTNSQXFMAhY
+8RFl5SZaM)S$6GXjDde0UlUeIVf[91Gc)#aSCLZJ*M,2mF[&Cfb1G(cDpM,4hG2A
+ThceRjD`XEH%PDA%MpbhTqGT660K3*0ESEQ'cJCL#h9YjArMJN!##eMI0HZ86HaD
+(H('QIj5BZF$&kJ(F-(a$KZdSkd`PKKGTm5`%h[Rc$!!chl$I+k1,b,*NYV0MEaV
+0I(EJPVGelbD[AbFHJTVjYpDVINZ-r5K$`ZDRR32NRZ&UmKZR9J-8ZjJ1CDfP5jR
+"UF@CAHiJU(`ZN@k!YUIQGafZNE9YKc3h58$)cUfm80@i29XLkmrGfJeUZSbL%5,
+r*EI'j@5Tp&m2e"a"PLBlp9G0aPHJjS-XCPV(h8*p)e'XJ0Sj'+'I@-bq-a0aHUQ
+jq38j'B*klLNLT)0&`6*rdQ$Dc!mCYRka'i%-aF$@0p2Uhk53!2k$(U3&8Ab8,d+
+-8q*%`!ad$*KlAN)Ah!m%G!`X#L,9,F[G)X)llji4Hq10'Y#m-dHaf8U@jeKHLS0
+Dp[,a4IDX1k5HLIL+Z$,G9SV!2RF4fmGDH6f9kaHC4ZdEe&YMm&k3!-iC,"AH#a0
+h#laG)jXAQJMZ9Lr0ZI9DiJPiJQX+JZG"5mF-'hd'C,E9)aD4V!#heTPUZQ$dLh)
+&#aj"2K2ILh`,l0IkN8'1p"5d(,2CD3&21TYSbfa))HD#`+@3"!%!!$!!3!#3#P0
+F!*!(FJ!!0S6rN!3!N!S*U!!!!3!!!C!!Y`!"MlF!!!4B!*$cI!!"!*!&D3"M!(d
+!R`3#6dX!N!Fp!'!!miKF9'KPFQ8JDA-JEQpd)'9ZEh9RD#"bEfpY)'pZ)0*H-0-
+JG'mJBfpZG'PZG@8J9@j6G(9QCQPZCbiJ)%&Z)'&NC'PdD@pZB@`JAM%JBRPdCA-
+JBA*P)'jPC@4PC#i!N!05!!%!N!9Y!'B!J3#L"!*25`#3"33!5!"R!31)-P0[FR*
+j,#"LGA3JB5"NDA0V)(*PE'&dC@3JCA*bEh)J+&i`+5"SBA-JEf0MGA*bC@3Z!*!
+$6!!#!*!&-3"R!%8!V33%8A9TG!#3"3S!8!!F!4#)'P9Z8h4eCQCTEQFJGf&c)(0
+eBf0PFh0QG@`K!*!&#!!1!#J!,U!#!!%!N!0p384$8J-!!(i08`U6K!'ME3$X#h)
+$Y,)b+b[M@dhH@qpUpkCZ*YH!-3"!!`#3!lUe$)!!#@NUrZ!"94)XqdV)@`lMjA1
+kK9'1XMr2MrqZ)$NhV"Vi%FU'0AQ'BU0RDr#XAMm&lZ`,`,#T"L)i6&Fq[H[,VD-
+C!m8F@8XE1!X!N!0D!!%!N!9G!(!!F3#X"!*25`#3"dS!93%6L$T6Eh*bH5iJ)%P
+ZFh4KE'aKG'P[EL"MB@iJEfjXH5"LC5"`CA*QEh*YC@3JEfiJ5%C6)(C[E(9YCA-
+Z!*!$EJ!"!*!&D!"k!(`!YJ3#6dX!N!G)!&i"*BK18fpYC5"TG'9YFb"hCA*P)(0
+VDA"`C@3JBQ9MBA9cC5"dD'9j)'&bC5"ZEh3JFh9`F'pbG'9N)'*j)(4SDA-JFf9
+XCLePH(4bB@0dEh)Z!*!$@J!"!*!&A3"`!(%!V!3#6dX!N!G+!&8"%iJk9'KP)'C
+TE'8JdPi`db"YBANJBQ8JC'&YB@GPC#iJ)&"XC@&cC5"eFf8JDA3JGfPdD#"MBA9
+dD@pZ,J#3!bJ!!3#3"F`!MJ$J!0)%#%0[ER4TER9P!*!&"!!%!--"BX!#!qJ!N!2
+8384$8J-!!4)08`UE*!!lLSL+&Fm@d(1X4'`3p5`rIcrXejfrjql1$+GBf'%P+PL
+&999LjEra",'U"3ZbC6Y1)2Q3!"m"9#5BqM@mKDIGaGRG6G,)HT+pI4mZ3pc&PmH
+P#aEjM6KA6jAe#b3m5Sk53ElSG,A`G'S9QL)q"HC1abaeLk9cJ@A[I"3FZ$A+c+C
+e3%m()3a-9j4CR+h"Zf9c)KIFIJai(r!m3+*2iaUXL26-$cGj+&$EM-KaUkHFa@0
+E8ER-cGETJDZ80pr*q`cTre6rb@d!N!3k!!%!N!93!&N!C!#6"!*25`#3"3-!4!"
+)!1L)'94SDA-JBA*MD'PfC5"TFb"NB@eKCf9N,L!!N!4)!!%!N!9(!&S!@`#8"!*
+25`#3"3)!43!a!1L)*eP[G5"SBACP)'9ZG'9bC@3JB@iJD@jMEh*bC@0d)("KFh0
+hEh*N,J#3"!`!+!!S!,B"(!3"998!N!--!#!!#!#L!4`!JP99!*!$$!"L!*)!m!'
+B!)9993#3!``!+!!S!(8"2!#(998!N!--!%B!TJ#k!GB!KP99!*!$$!!J!!J!SJ%
+F!)"993#3!``!+!!S!+i"6J#e998!N!-1!#J!+!$#!D3!L&99+!S!N!--!#J!+!#
+8!4)#!&99!*!$$!!S!#J!M3%A!J&993#3!``,9@j6G(9QCL"KFcS!N!-)"b"QEfa
+NCA)!!!3c384$8J-!"RF093e$)K)4jPjZ%'3Y'84UmN3N#a"CUkBQ*lFpLicJGZI
+)5EFc8r+CIhHrlpZ+2"[Ic,He3*,9cZc*j%RB[MZ6%C,P9Z5*V-M[(j%rNjr*[0R
+@GK&*&K1b0bh*)LK!iJIr6PQ'N94%1+J,1hML*hBK,0+!l9$&S4Cf%PiIcijT$+G
+2[eNUFK-MbHfpC'm6p0EIcBDF5mJT4aqj[p)@X[AQGIR'*!P,+@RBhU3A&C159eN
+[%2cJbH(#&ajm5X-QD0&L4-VGcEkQ`r)XP,P*,SMR)FNFrFAJLaU$lM`9cA8P820
+dQ"q1j-RJ+KhQ[L68+ciKBT!!RHr$(BZ5%%MI@aB0YUmG+cH9Fc#*FlDI2+6+KXf
+GMlqi[`EXLf[bq5DTS"GBJ&RSpE(k4UNSE)5VZ#(4a%4T(NC4T5D'+#Hca)G5#DG
+%eC'a54-U)Z$aJ`C3q')!Y4*YQG#!*634DR+,6CR$@+QN(kF-V(@SLpVJf!+P0U0
+c9&M$',E[r55!`Li$a$PLQ,KZKIc2X5Gal+,YACH#6FZ"UHV$eS-Ujc5-Gh6@aB"
+d'i-,eVDeLc'L6-mKjM,F%r*FlYZBmf)r3FhBZqB8*mKFDkBmH&M*CEjpUU5NcqM
+UMHZl,G$)FrP&YX*lJ%6&V")5fb&&5#AJ#$hRCZLJ)NBKdc[fS@lc&8+41k84G`V
+H8bAIPL!j2GVYU6-RjVbF3lRZ&DPJc0[DAFTb'rRhYdi*$'iYhrbA$q+6*eD"#2h
+XL3&E#6aS*Xkh8XD5XZL!8d`D3&(YeTiH)j,QXMTfCIrBQ',QaYKL5NVMZKb[jqB
+q*1K-Xm!cl6p*FZL0,qj368Vlrpap[%LPH%SI@AC!''TAaj91(AL#-@"3aPPimHV
+hYlZRfC3AeqX$cDJ8$@fJmqd&j*@%XYf`G)B2KUU3!"Si!i4'pV`UFE3TZ%Vi1,Y
+29L@qKkdk$`8SRBhC9E-k+AX1V!#*JeYF)Z3(X`,GA!A9[Q0'IDaq[E"flB1d$rZ
+$9epp#4ZUUbq"F")bcdZiN!#&AS+9c([M)*1*kmMQF"*$DeK5eBS,0G(8$DlUGG,
+@)I*P,r@PJf6iV!k3!+U,`iQMEf'*D&FHY3@1%H!C2CVf%Lk!`1`-EZQV3EfDc)k
+)alY-h[lIZ!qhTr,*MDZ6TKGp,[+bNp-`jPQCpEJ64GUkaD!DXF'80&)2BbYeEc[
+GB!TTEhMfk&f2mYQTP@l1bb2j`E4mDbafS5aG4rV(QBS,DAF-pIPCbZIRk[pq5'N
++mhpAIXl%CM(qp[IPf*a9Cbj2D@i@qUC8h'a@H[,JJMDNfrH5e-ha@AMdST,jr-q
+AljL($06eY9h'+bI[Gal`F%%Abe@eJpQRlELVUi0e"4+H`Fl,5pZHa$lSC'#l'ZA
+eThN#F3DQm&#m#9iTh-1AH$!(GljqYG"C`e[Aj!i!N!-B!$3!!!%F!@J!!3%!!3#
+3"32S!*!$P!#3!c`!"33JEfBJ"b"TG'9YFbi%8h4[F"Y*G'9YFb"bC@eKD@jTEQF
+JG'mJ9@j6G(9QCMS,9@j6G(9QCQPZCcS!!!M#384$8J-!$i!1A3ZX%L4fE@IIRAp
+iYl&XGjihCQ,BfCc(6*CSle-E)bJkEdHa*eS0Gj-8#D@M,#1YSQS,UdUIEm-)Ejf
+3!1fj`5LMfG,4"USUd1Tp3kd8$qJBl3)PV8LV,Sh*PY#8pj8'"1apH0r[E[EC)UQ
+D9YAl!`hq3#-MB')c)N3K4$AZeI5R'm52eIGBY8"p'M[$-kQr)+C(ccpI0[E"-pr
+q[iV0kE%!MU6AKbr)UJUXM+(q$U`rekH!HKdfrSQJIrU)8d$#`'Y!DT(!G!B+G8"
+FT83$c'p)GKN'L4@)'S5T$Z%8T(QD[X(fVScHNGNI"REeMlhpm0dZdZ81MJm%9Ul
+qFVK'T"cBlIPImF44hQ,UG2$jjAPjMV)'Kfh)QmZLH1FGMdciUm4L@VEa[blr@m"
+@IIaEYSNXUSrPE5klh-`lS*62`A-U&h&S+DY0c5MPF2EBScYFlQf@XH8J[k!ZY!4
+MiB"rV9IC9#2UDa'P%r$,RpJ23Mp9mdDqFU0q"Zf&DJ1'88+i8@lkD+m1mclDU@3
+fSQV)d5`VX2CANYQEU*q&L3k9fhTX,(6rbV8ed[)hlTdq1,)e95,QA8ZF0j8lcYX
+Ymifmf6i8ZHYGc)Rjj52G6k9b4qphIA4"K6b5!ZpL9R9IZ32qr*cJXFq`kEcbjk8
+dhlGFcUmrRJZ[Er#XD1`bXeJ[E$dHd8mD4rm&'VBqNHbGkIj&[e$0U'm%Tkj,VPh
+L1L'Z8h5pMkl9%ZTkdS6k1RLYpM0L*fZ#f"&0%MX00E'6pK1a%liVLafcADAG#l5
+,kTrikG%-8a09q%FH)rEbi$X&JYL61T20P*AHmmcjpU`rYYd1+@QMmY,(EB,BKJi
+L)lC#KH,2p&CMDYBK5XZcMSGCKi$$CVQ%+!FhI2@@)$CrCX5'9haSZ*B9[G`XVXQ
+k,d)N2YX6$[S*4M@i+Ei)l42+dhd4Vj)QSZ[c-Pb*E0GEUq'@Q89N9),dkf"d8"(
+L9H"%*34E1qU56*@(b@R!8NDeJ[[JaD4P4bLD%+jIhcc5ZqAUY9AppmE("L*0+l4
+cUcBIQh3q!-Pa#mF,E5A@0)f#eBGhVIb0[)$&imfPSTl8fU'!blc)r"1N*dqBQ4(
+bV'*TRqpH!HRQ!bD&a[GbQQ4DCKG$Cd##!X,!,L%JPNjBI6GY$Tk2'$5CcfP$*Tp
+j-H3#+5*#Xef)L+AG`liLB8ZhZf9qaH4%EMTDQ+[QjLmhT0TF)%PKGR)0dd*T&[9
+RiG#9SLI"X%qLUS+S[)(M*e#[3Bfil1!VRXUb*+M`i5*H8!3+I#IA!RHIFK8N*X0
+X1h!`"TjYi"5G5N0JL8SX9ApmrD@ATVIYqhV`9IIECkmI'cMbKfYk2P@XeCH2ZH8
+Hq"f%R+DSS)liI*l&d#Aq!@pr1688@Jc0@TKm+Pj$i&cCTjbJUZS3X2mbf$1TLHR
+&8-)51N1&E'*eIN$fC9@Pk!a630&)bYDJS(e8dfcJl+UU9@clm$effPRJ#RcU(Nk
+p1MNEXRP#,UT[Dl[iPTNLLE+GP%AeP#(b!VLCU6eXh!RMHZeKcYe(a9a9r8mD(Uc
+$i"M8#-R5`TU`l*jX3h8+SS`IkE44A4V#Z"Al3U4pbb8ZPLLf3F!NJLSP)5-U,C9
+mCIhP3aThLC-"fLdAZGHeN@Zp'mIf&BUKUpcbXMGe9&[BHHl6QcpCkC90$aa#Gjl
+(ScGEXLQI0dADQ4!(3QRce[mG+&IJ-jl"jRQ4+UD8,$(PR%bNN!#Ac$e`f&`4NdF
+b5MNSpH&NbI,Uh**rS5NXGqaCfNVq@r+Xd00b`E1bqB,LXcX)JD*#8VbQeS+5`T0
+'MJkDN!#P`4JNBZ$9+(K62[N$dKR402fS4[hdUqP#d"%5a@KdUKX'0eQ06F(l[Cd
+1`Rd31Tp+CPkJqkBCa(%MSbUC$`PNSUh@rGUiIl$ha2VRV[K"8G@6b@5Xe6UZA4m
+FHrGKiIXrQdSQJc6Ce(Ta[(i`[,[Yi5qIdcFJ9LSTkU,ULkhDq+$l2cfP`BI1G+U
+$TMSUHqZG69qlh$%`j8pREY"U8lh@IUhAfGXc%2cMp`FKpceP%j+5frMDDlh1[@d
+p1`F'R,#*$L8T841!5Ua(pF$q+L%"#d4rKe'BY$YQ0I6jpaK9,if1@SfBmMl+Tfr
+p20R&qNCrT5HljPY[dFj",e6CPVL1'U2k'9")+mEQF'cTbMHGCc&fG+lD59rl$X"
+QKEK13)0!Xa-#+)S,iq@[(cU$4ap6S!5&l%+UBpIYAA[k,)2f,ed1IRA1Z66cHYN
+**!VM#!,6p@M8`Ir)BZkdQ2T5r)2ESm,5c'r+k(q,EUVhTc&lI24!T0Mb8pIFTVl
+c#FIT8Ir53V'C13a,#&baCFNeTfYP0X$`L2p0X-F5$VlBBREP60Ur3A9'K@,KPS,
+9qk1ENKZE5R5dPZhDdjdEeJi0"2QjpZI[$l#kL0Q9EeqQ$S@24GZ3!"ac`jJ'Bp+
+'`ppL1S2EAa%pDB4RZ%#3!(rl)YF#IG&4U&8ZAqXKGM*ae'!X5Q!QpD34(ka+q'3
+RYfQPEUQqd4h1j!6+[I)%l+9c*2c)Mr%*58e-DHB%"q$MrAGC2Mpr+6+i)rp4Hf'
+dmDUHaS1ch'i*i`P*&L409I$KH$[&bcRcl2$Z)3mafaQ+8`qb#DjX%djZNmJ"D@G
+-`EPiR,Af0DTE*Zemr$Y0K-h%N4BR#8Q,Cq-bC`EF)@IM3F$T9J30F&-9hTk`0P0
+mGVMX[Mel+jf*F0`2@a%dF%HTiJk1ZdYa@ri(1r,MfjS@'K@mMhkQdY2JDJJN1UL
+EA20Q`ddeQ6BT95+hA'RF83$@d!"49h@Q6H)`)VX9Ql0-!KL%E6dQT#fLA$G-0%j
+,'3B*efpZ5$bq9@-c$@,3**FRfS14N51q-RNiAQ6*Y%F9(@C%Fqb9mDpELXTN,Zi
+cCjSMSh65'J`Y$E3RdaT9G#V6'*a)CaZML[k#P'',-#P+*EL$AAXbE@%hr&YRI%Z
++)EV5BfUpXl,+$*p(j&$ZP5X!N!3D"9#!!*!$!c8Z03p6G(9QCNPd)&0&35!e,M8
+!N!-1"9#!!*!$!c8Z03-e,M8!N!-9!&3!C!#,!BB!!3%!N!F%5`#3""J!2!"!!,!
+"Q!!"!3#3"`%(!*!'!5*"4%05!`!$LJe6#TXN!(q'4E$G16N6X-81A8Y16ahE!48
+$fl(kf!a@pFiq++KBI@c"EUcUaX!rBhp8p,rrEircGPBCaZS!#jNe$9a@MI6"MNE
+hVP-Dl!5cmbJ8h-AL-N+fe,NJbA-,N!$IEi*fJZR44(62+AQc%pfmbHiVKB3cc%Y
+DkTT5LKd,2KqEdhm%m(Vq1HV+dqTUrjpIEXHVRre$rrZ4PL8#Z$0USi*Y9X&)*Va
+&Ufb-9E9H@cjLQlH&l@%9IG`AaY*D6+58Y!*a(daqM-2AVK[QKkBCkP2EpNhG$lS
+3D&U!*`6)!*`!6,hk,3$qkJN$%Am!m+*bi3)3()+!!B*LB#diLj&"M0m-3Z351Z,
+UBj,-[5Ka(dcIG2P&a#YXbaJ!N!0h384$8J-!!)!08`YE)!-$TQ$$UQUc-,!")Q*
+J0dZafeQ9S#"L`alUfF#B96%,BbUkpkG6V!S,L@2)YZ*heJ"5+2hK[F##5VM&3+G
+M5$+1VpRh*L)1[qR'r[[BRcTA6bLQN38GNEU#'ELMa4UZU'SRT%mb#Zp&cJ8!N!0
+-!!)!N!8)!$3!'J%EL"Y3E'9KFf8JD@jcCA*d)'4TFfXJAM!JGfPdD$S!N!B,!!X
+!+`!VS!)%5`#3"4d!0!!Y!4L)!Pia!*!$1J!"!*!&0J#(!%S!`33#6dX!N!8#!%8
+!,`%rL"PH-#"KF("PBA*c)(4[)'*P)'4KE@&RC@3Z5`#3!kT"4%05!`!!YJeE#e-
+`!hGc,@B'l"R6bPA'0c6M[V999XBrEdr[eAUhlMhriKXD!!$`$3!!k$B0!!!,XLd
+EJDAi"hCRqrRPV5ecdeE0heRBNa&Y1kd$*bTR@GR*V[*iehG%KH"5a(q#'"5q4!b
+Gmd**U)B"*8+!,UJ1hY8&`*1&(+!BY25$@4r[#**R3EiJhiV0BEcLr@Z6"D@&%LZ
++ZA,FjlR#dP4ijI&K!3#3!``!+!!S!(m"F!5[998!!!%!N!1!!"rr3!!J!L!!)J5
+3!!!Q#FJ!)K2N!#)J!J!L3!%!))IJJ#%2m%!L($!J*"Rr%#JDLJJb-SSN*M,b-Ni
+d"MNQCI3b%Q88*!KRr!J%F-!3!MrJ)!%"J%!!KX#!!%!"!!!J!J!!%q3!!!R)!!!
+%N!!!!!)J!!!"3!#3!i!!N!H!!"rr`!!rrq!!2rr`!$rrq!!rrr`!2rrq!$rrr`!
+rrrq!2rrr`$rrrq!rrrr`2rrrq$rrrr`rrrrqIrq3!crrrriIrrrm$rrrq!Irrr!
+$rrrJ!Irr`!$rri!!Irm!!$rq!!!Ir!!!$rJ!!!I`!!!$i!!!!F!!N!1!!*!(!3!
+(rri!#!#$!!Q"!S!+3J*!#)3#)!N)!K!,d!2i##!!#!K!!!J)J!!)#3!!#!S!!!J
+-!!!)#!!!#!J"q!J)!r`)#!F-#!J'ImJ)"U#)#!bJL!J-!BJ)$3')#"Pp#!JC4`J
+)'Im)#"``#!J2q!J)!'!)#!'`#!J!!!J)!!!)$rrrq!IrrJ!2rrm!$rrrJ!rrrm!
+2rrrJ$rrrm!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ
+2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ
+2rrri$rrrq!rrrrJ2rrri!!!"!!IrrJ!)!)-!#i%#J!K#!N!*K!)J#%J#%!Z3!!2
+i##!!#!K!!!J)J!!)#3!!#!S!!!J-!!!)#!!!#!J"q!J)!r`)#!F-#!J'ImJ)"U#
+)#!bJL!J-!BJ)$3')#"Pp#!JC4`J)'Im)#"``#!J2q!J)!'!)#!'`#!J!!!J)!!!
+)$rrrq!IrrJ!2rrm!$rrrJ!rrrm!2rrrJ$rrrm!rrrrJ2rrri$rrrq!rrrrJ2rrr
+i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
+i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri!!!"!!IrrJ!)!)-
+!#i%#J!T#!N!+4!)J#NJ#%!T3!rJ))!!)#%!!#!L!!!J*!!!)#J!!#!`!!!J)!!!
+)#!(i#!J$r!J)"``)#!Crb!J'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P(#!JCr`J)($!
+)#!ri#!J!B!J)!E!)#!!!#!J!!!J2rrri"rrq!!rrr`!2rrq!$rrr`!rrrq!2rrr
+`$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
+i$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrr
+i$rrrq!rrrrJ!!!%!N!1!!!!"3!!!!L!!!!53!!!!#FJ!!"2N!!!J!J!!3!%!!)I
+JJ!%2m%!#($!J""Rr%!JDLJJ5-SSN*M,b-Nid"MNQCI3b%Q88*!KRr!J%F-!3!Mr
+J)!%"J%!!KX#!!%!"!!!J!J!!%q3!!!R)!!!%N!!!!!)J!!!"3!#3!i!!N!H!!!!
+"`!!!!q!!!!I`!!!2q!!!(r`!!$rq!!"rr`!!rrq!!Irr`!2rrq!(rrr`$rrrq"r
+rrr`rrrrqIrq3!crrrriIrrrm$rrrq!Irrr!$rrrJ!Irr`!$rri!!Irm!!$rq!!!
+Ir!!!$rJ!!!I`!!!$i!!!!F!!N!1!!*!)"d&38%`!N!B(8f9R-J!"!*!%"e0PCc-
+!!Rm!N!-(8f9R6J!$r`#3!`G"8&"-!*!'('&eFh3!N!-"5801)`#3"B4'8N9'!*!
+&K!#3!c4"9A-b!*!$!8P$6L-!!`#3!i!!!3#"!!)!JJ!$!)0'8N9'!!-!N!1!!!%
+!J3!#!))!!`#$!*!$)"qT)$%j16!Y16JJ3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z!*!
+(9d&%3e)$!!%"$9-#h0B'NrI54Xe&%fd!Y2Nh,VcE64YQ`QbqU`[IK0f`fq6GGYA
+9G@%!#6LPL2pd"ISD0+Bf([[%R@[C6S+*X0-3qX#ck!"SN!$&[[i%[JB!!!3!N"'
+"!*!HJ3$r!*!FJ3"8+rm!N"U"!&6r9#[r!*!BJ3"8rj!$9#[r!*!@J3"8rj!&9#[
+r!*!8J3$epT!$92D3"#[r!*!5J3$epT!%q2D3"5[r!*!3J3$ep[D"N!C@prEf+rm
+!N!k"!2Afp[hrN!Em9[D3!b[r!*!-J3$ep[C@rhrhN!5"rrIfN!3Vr`#3#S%!pID
+3!rcppeCrN!@VN!0rp[BVr`#3#)%!92D3"2prpRmUI`#3!e48IeBVpP3Vr`#3"S%
+!92rfN!0@rrMhIbTr!*!$9&5Vpb[fre3Vr`#3")%!92rrpT!$r2hh9P3U9*!&Ik[
+hp[Erre3Vr`!!J3"8rj!$92MfrhrfIbU3"948Ihrhq&6rN!08q2m!!2mV92rrp[C
+@rrIhIbU"N!5X9+Y@pT!$rrp8q2m!N!6r+e6rp[EmrIC@UbU"pT!$JArrprD3!rp
+8q2m!N!Er+e6fp[hppeDVUrq3"RrhpT!$92Mr!*!)rb[fpPEqIrH3"2q"pj!%pT!
+$prMr!*!+rb[fpPEprj!'JID3"IIir`#3$2mVpT!'ri(hN!2fN!2hq2m!N!lr+rD
+3!rrrq2rrq2D3!rIir`#3%2mVpT!$prIipj!$p[Iir`#3%[mVpT!%92D3!rIir`#
+3&2mV92q3"96ir`#3&[mV92q3!e6ir`#3'2mV92p8q2m!N"Vr+e6ir`#3(2rir`#
+3([m!N$&"[N&%3e)$!)L8%&80C984!#&9lNDI2Tq98TFkPk@C#reCjkb$V48jAMZ
+Fd(A2QkiZ@qd'6S+ZX+d&h22ZD`aF1&jF`B%,)!lN$%F-QG2$E3JZa#ra1-qER'H
+)ja%daP2Meb"IRcFaZK"$b"cEq[llr$jYIad$)CIAprmj(9Bf%K%#!C!%%3'3!a&
+#$J"G!pqDp[N(HU)c#(`r4)(q$+l4p(LfUCZr"#Ra1aIILiA8p6rlPlb5LBH&EZM
+VDB*2r$L[K)i5FC!!(hf6L0TLZ[8@@@-q,f!FSN(c`9#*kT%er8fR%pm"XG16b'X
+kM38%ir19DD!Tf`BLe9Z$9Vm0j0i["hrf&fIb8j!!,*ZbMB%ljp['QVHm0EM'h,3
+EberaC36,RAcC5DmR5N,RPjfPea-P`9Dqh!QLF-qbXjhr"K#mMMlZNb!J*K`$cq3
+j3bBR6)%Qcjri`24@jlq"MP32)R09mdj"p"ddhcr[EXm4ipLL%%qZr'EmHb+!Ra"
+qJUdj3[l6I`prDRl@&J5abZ+X#!f*rjRkkq53!'-SUcMf!*pf15[iBPr%CDlr8he
+X,Kr+cL5Bij'KN8pM%S2D#B+Gq-B"eG3r-`(,E-%S-U"1CXaefCi5[XlY)%M'4&+
+-Lfh#P(pPUP#PiMprRISV0FcBe&rCa$N-Qr'cCI3+68@Zm1P4rA6NLX6+AScY'a2
+ID2jaT#rD*i*j3Z@4Emr[jL5$JeEhjpf*("&GqCracl(jcl(jcd@`iiIT)YE@mJ0
+eJ'mpHNG!(6"Ec2AA@f+kP8H)PEpb1D1f(cjKhZVLVbVdaeYrq-59V8IP("3Z9M&
+e9i016"jb(-TYN!$lmlXliN3dEHfhhQ*08PD)bQ)GD$V0"ZPB5%[+6QNP3UR%h2G
+GpL*#l0TKRc@T(A6TMra(LG$C3j3G++Sk$U#aNGHdfi%YfVeB4T!!bCKXqmXEBV3
+E*'$mKfbj%[RMcS0$M`SaP9jI+062erQhG"k%bJ)3qm*SYrRqM4Y2[5dm-!L220!
+8FbCPeci3`6YV4Mr3&#I[e3FRQU3!C4m'@aBb2k"b!f[X*NIAZYP1VqbUcT!!hkc
+q5-k@0E+rqK6)rRiE-Fe3l8QBlpSXX*QLMA*fiMYrh#bm)$Z(%[jBp*kpR8$`Mmd
+LT2RTbh08ccJ3P#L6j-ljZ#a$L9,EAmV+(&f"!@HS@F@h3F9a+E*bNYL!2hU1"0N
+24%(!&lkmP)Ycf1@KeEEKcImJ&U'#3B[@IJ4j6@A%QVF)mC)@-@bY!`96IaL#jj8
+)YQEhr!B9`F'1Y,9H#Vk)P%iHN!#h8%4*JCXL#N%DN4qE@K0T-ZiE8kQXb)#3!*%
+"d9PcSVXeVmNS*qe28R5EllH*p&$RpS5)*GX#JXMEdFk$VF*XH[qcpS"jk,hkkiI
+-*T1TrV1j4k@AB8FQY%F#*T2CC"qIKDDHfHAd@6lE"#'f)#hNN!$%Y)Qr0*[D!bR
+IZ2lSACD'Cc1p0Fp'3Lrr'&YR6*f2UP3P(L,$@B18V4L`)DV(9%8@-E(&,kS(UP2
+0HFf(Qh+ELUb)(*@+-LLD@jTYcAFMNq1rQM69XkTRb@2'P*a8C-J8hVNi86G,f-H
+TJTkd1(hi#FAmC*c0Ff*4&,RUQ%mDDV--jPZ$Dr+D2Qbm&jpTM5Fl&hql'#5mU1N
+Y-0BKNh$2L@jMB!,JGRA08`#f'dpmQU[kHZ1N2'Br)m[k5adZZpmBUJFC6jq*pkQ
+V-3+Qh)b896+p,)qG5Fq`Kc%&+M(pAHILiSe2l9dV'XIiCqP6He@UaX1Q[-DqTrD
++D+1TFr'Zc8$m1A0D5'!a"`I-b"V+@e+(RkV1'6qiaKBh,@kHHrLjd*3YhZGkbY9
+m[5Q[q5BLLH"R,P6m4HF-mc8$HbIkS16jTN@U4r"6MBTjXqT&X&66clia@dAcV`e
+$[lVjef"V(-KV,P8Y`Q3Mr@MCf*!!f0J3*!Qr3330[Aci!Rkqd,*qJCrhY+ccfG$
+Ir1Y6pAeL@0J'QTqN$"@,KF!9CfKri&5hFQ1)UZ[AQ*XI0dkYF69[aEBrG!6Y,4-
+20hpKY0A'S1"Kab,9idieQ3%blUI-D5,daPq#b%TGP`,&'E+5GPNT'`P!&e!SS5a
+IFelMD22(9Tie+C,06e-@SNJLkRC92j@`d!Y8mdmEXP`-a2mZ1%R-Mba&N!#HKi,
+%!C+DFm6fUVPqQl#Y%9jcIFfaYVeq+PepFir&0Y'V([fVea*LidrTAqP2ll"X2@,
+$C+[BH)AqP9kjhV)9)1FGVpN#XqK!b&b[Ff(K`m(,fm6'Ur5[p1V0PUh(E1l+"am
+jH[2P6DLUjrEp2DV9[am8)CY[ELm'[R##2@@%!SKTkci,CILEUeZ42BFLf9(p8AZ
+N#dM1Reb++qIG*N*M!ddIQYrE-G!dcIcCmQ0MA[0lbipY#fM41,,e@%VbjL1("jV
+Z0RmIE(2"pYTKYrRlberV#@cmJ2k9I[$iNDf[c6S'92VNb!e!$*qc3+eXELqIm(&
+NqNIEj-JqR@KTVKl)jYRhKG81bJkMV,[K'J"f!if66TdZ3YR@)JRLe8"p5AbE51l
+E*T!!23d5-M*)+F)DEjHcBlVf&XBB*%Cj#$Pr5BJ2BfhqrqAXGM1fh5(IEP!3XL5
+6K0*%@f5dXRV)`-`S@+`Y4&5@(6$A*!TJl8&VN!#1S#UCd@UQ*D(3I'a@R#ka"G[
+Mj6*I96#rGKh-*aA-KeCR9Me$"Yjd4Q(Qcr$-j&a9FI2(p,'1U3T9K8h0+(L$)YM
+d6@P5U)@kU3',!-$3EqU&8FBSNBaEbGa",JBihY)ZRVBie8ErG)YG4V9C3CNhcZ'
+IhbG#GKlmpRQ*d+hDVqQ1j4Z$de&F'peJES1M8NM+-QdA+EFJ5m9(VqfEV1[fH4Q
+DKB4UmmF8pE)QUJ-er&BRQZK#EDZ5a"DkM)%6h6'HI4[e+09$@CGS+&HBrd%14ZN
+DpdQElDQ3!!43GSSSrZRSCdfNmI`D9+#0@A*5Bj&GDc50aM8!fa[6Bqha(M%#a3e
+M-@903Rd9FYlLB64QG')8cER&a6T%YpSaX144Hd)11MfI5e@41PD"3X5)Rr0JNMA
+G"-Sh1X-L%&&"88*-a)`UbfFS8Y6N4X5,&0S'A)+Q(VJd1C3hc-(!GGBSa-Bd9bD
+(k2UXqf#SIX2KFCNbVN(56q*`"3kid6aGr1Mj@B*-dcj,2G"mFiSD8D5f$M5A8Y-
+ei*mPS-6a8pe3UTZbE(j4CBXVKL1ciVBJ-U88fH0aR[N14kANRX$H`&1$c6HYk@X
+ZI@S)"I2$5dT3--rP4I&DAK3,-8pllHN1A!ZN+0YqZX0bSYZj9aU+8P4L*Ab`q&%
+MXS1m0!%hMf+1M'(LXLh1P9r[S#fTR8FMJh[33P$Y$@1E@HRBlU9aC+ENlh26d6d
+L-MMDM80Q@jQj(J"+X8+"I'ZN`$6"%+hJL*SBSS19%"eS6,",1YQPfUPA0pVLA8*
+#Pj!!YAR$R3c'a9+Q4UUf5@@e8mmYELkeYmc)DhlF(L8!J&6Dr%Ae,kaH3[l40)S
+XTiFZ`T9*@ecj`VjCHB'96-$r#N`)fG'0F$5#3BP0XX2i5Qe-BBVV*%DBQjVBj0Z
+V2hTP8XJSm"$!+STIb4DY[`!LBN!5m-THir'$@D),JK)NU(de8EbBR8*`m66&fl2
+PGFkZFJ4AFm'jiNGD`B3S%`[Q$MLRI+N86kEGUXqXkZ'"QbVe!"3qeMr8qEb9QDY
+U2eAe0(dK0@Z6GMU'k5#ElY*11c$YPDE2'%4X`V5E64Y%V-5dMddE4&!'CT8KF""
+iZrpQU6%2XQ8KPKqm03J5Bb'!IA,MN!"VBl2%[L%aa3'3!(3!lVX,(U$U9aPXCFG
+3D3'bRY8Y%8YYcei"m#Z+RaB3q)BR5JXHJ'MC1!8#55[!)%%!cbcKp0Q#-8!GFNr
+"CLT@eF)1C`&-GH&))Bl`ib#1f8bjUR&qF+hLB!Z!3&PP!8'R&9F4D,J!"fTjGAX
+C'fer*lZJa*&E8!)hdDh%`X3ZJ,KP)-E93q4PilZe-9ca#5DU826dU+UNi`8TjV3
+!'PclTZ0)(6QD5B8,I-m#652[C"F9dV,jQilFSN,+@!)a-`hZC'1QcVkfTP[!823
+1Z@mG!(Np8&58*`+ZcpPVC%XGJ+0D0J6[jDk%`kJXpU)CL8qVCL#LUSSfNRN)[pf
+MFfJZflB4Z29%A8VbMXYh@*!!9EicjT%GQMSLc+2aTRpCGiG&0i'Y&G[`)rZIU)2
+!RGbpX!3%NDrSqX&)lb#Q5`L%D%,4,LHGkHf4MPIKdUED$kHE,P`9'k&QC-0Y`QZ
+2FJFdeH&0Qr`aIrk9b0$d[TbY$M!lfdNF)EQ[M!QDfPF'p4M8&b+Pc&LNXMKEi+V
+RbSVLiVU%j[P$'5M)mKHT5L+%*P!%SE'i!C9AMP$GbaA4!6&lQlm%!f9J(fM),5V
++%8ANj&PRZ'"lbEkHSX,QHGa4%k+VRlIe&*5%J6p"&$LSr[DaDUYc4[5,@A'&'IX
+P4b@V")K%6Hr'1CNJZ8A0`1b5*iQSC&T8#+H"Y)$NPJJb6b"2L#X%H1rc0Rf$3(b
+J98*1LIaPM,XMPZ`,0P@dCPZ6B#`bjaEDm,1TZ5QkL-!a9BQp(@EaQUSScir&*99
+4MMUDkal%4!8@1*,Viik)AJ"'MXL3!1'+kDkFkNLIK-Tc,UMXJ!N916BkX+611V#
+NbTbf9NhES#SIC$`A0Rf6SHSClAEbi19Z-#eHFT@BEN!c6*MH3%0-p1(!+"M9p-,
+8*$)!A!iXZ@SG@$b-DEr$a5XZri'!-@10DmR9FPj(lF,G`DBmA)`Zm",!MP-FB)*
+cT&-QN!!9Ved1m5BD6*qkPMa+J-J*2@)HKaY%b-ZRZZNiM04Pc[Yh0"'6U"L0'4F
+Arh[9'N`XZ6,J+[3DQ!KFJpJC49(P9Zh#Zd!K+,H3!#V9jCdceVjHL5hY+EaBXJZ
+IKBeT8B66*3ZG&@LSDQ,#Hm+S@Z-##SXIVCNSAUXH!TL!!UjVVCU+1(2ZGLm(2be
+!F4S0`GM&+pSaiHA6cr%UGI'MDMEYjY1eE0UI*YUpK',d2!$@deb&#D"f(ZK59"L
+*%B26B,BF#"!$!R,6!F&I)+VT4A4!H*H8D,T6"i(D`*+50bd%c""jBULdm1q0hZS
+H"'*[i5DSXSk-%%%ck4#DERX,TUj+8iA&01AdIJi"&,!R4b2b[V&3J*S-a)*Q!Ul
+#"6f&Qe,Lbbh593e(00dj5@1m"Y1)5N*eNl5eBSfQ@b&)m+C(C1MKaJ-m@d$8pX"
+aRP65JN1NR$hi1BU$$4`m'VCc-[+54e(%hl3'VjFF-1FL-)+C%*NS,Ga%`"ULl+L
+H9&$Sadp8)K9dlBhQQIUDLb"UbMR-5593qpGdNP!!M5*N-DSDB%jCCN+c0mdi53l
+EVGNdl$bB0dM$GLV8e(*%TljQ8@&dXUSYeq8YK)XJUX6*IB3)c)FLVedRGXIf+U2
+0!9221BFUVAEZSU)AjY*a5eZZ%)A4Dj!!c9'`$022A8[,d`JB,V8!S1m#'@q+#8M
+,lbB$T3[JbYC6F)@#Md[BNjb)b9mSVmVpb[%XUT!!4FqKQ%TG+RYVX'MVSHZX3J,
+SbNVe8@0k#f5T5k35,`UkCiB0+JRN1RVY-9)aJ[8H&#G(#IcQ`6TT6i5pQ,'cNkD
+9J5KJidA38@,54bQ#fSR`S"C)NTTi!9"X"5"D[!@Ab,fPKD-RVU#C*F4lMPkRcc6
+`pLXaEKJ!94$GK16EVfLk-I!NS,ilS$j8G)(9&$LL4*1TD#j93V%9E8`A[V'[l3r
+IQ022c&"Ml5PSX2B8c5cRLMPNX&B[E3ULEA!!TiC9Lck+G)*(%PU,I-[%T-[(CSS
+h'`SRN!$aLQaa+Q43l,Li!)R!peVRM#dIJX!R$1k!h&Q@Jj6'3(Y(`&IrV0-Il4#
+Ui#'l`qM(81hT#19&[DLmPq,MYQr#kl*3PR1EdDCPVV+[0(U*HEJMm,eS%-`9q,M
+Yp,SXF0U1l*Dh%`b*)jdcrP"kSPY5"Bq-K168$2#40ehP1-`T*(GE4I8PRYNFlCc
+V5!YG[5eK'a-eA`iQc&J!X2cP(+HDXVN!r+qYVYN(mJN1ji$i$,01Q'1qi+[VN!$
+H"82e9YHNbj32!R6KMNp%#!Pk&Yfc9e8%pf9U5UpeQK`!AR,PH`Lm$r'VE2G3`L)
+-eLA1Y@)3%U(BZ1N#2a)#-kSY6(XalF-L+%*ikBefL9$!QTY8G`@X%GHV,P('K9A
+iZi4hAF,THj@%qU0Tqe5KUbHPi9Te9fJPXKLqY`-&I)2mjSq4U6Taci4)1VT#&fr
+cY(3&YQ-2hiL#q'"2!['EAcd[bX3Ypk5&e+,#N4EFPGH(UbY`I-cN"*Qj81kq)5f
+C,ca'Ifh-hRV$HIMG$GH@f8IH1#p1#pXEHhXMrEH,F@-!VhhhR!GpX3)+2L$h*q#
+8IIL6qkSklb+6S%*9bSDMCI9LRK&A!4I,+)Lf-*9%AD`Gf@UcE'2h[3aAbqMXq8k
+IBlkc*ECVU%6)Ijb,c%9LXh#h!6@j$'Jqk*`,pNLXG(pQbKP8hV'mikRRXFJimrX
+cql'S)j)f&X[YaS0`$K!,rTm-Q4DEEcZCJ89Jj(KkeQeBQ2,bL#'3!*&b2)m@G9P
+Bd8+`rf"-4a1)BU-hHN%F4"+`PZL&d(i![Yk)+qC6Gd9rHB)bdf-JfA3&6Q1jQbT
+JLM)-()K%Em$Ul'+4YNRZIJD&jGIHYIf`aaaea6h1iDKVRmHTaUI,@B'T,VK-L&J
+&VNdDB3l')*Nb4!NTSR2(T8C3+eIPNZ"EJe+&p8+GhBFM)ZEMlS1886j0-JBaR$#
+hH*bLk)lC`VlViSpP2el1jXEX+r1kr@[K-Xc0BcM-22aN(J#0bX"H*CPL(T&SZU)
+rLq*'Ca5IB*jhdL8K@"46)ND0-lNVi(qK$NQG2N!J(@lk3)k$EHR[PSf-B"K&TL&
+8SrDBAHSI1+a)5&H"MmrTIA%XTUiHLd@PiE)a("P,!X8i6%8Ih0'!R#Ch[i%QS'L
+jJCV&!2c%#(iq"4JjEKbTMN9GUQRf8,8J3p[4*$``Y"EQQT,8#m"42j,$`#N#NhJ
+j#L0mqE0B521CpJ+rN!"[S!Dh"i+LEl`X@NhRa6CFdZ-)f,h9S9LS1NLLkA@L#Fj
+&pbDN+a"-929F4*+Mk"I$eEm!D`@aR2L!-c4`KKE1S*Df81fh$q1+mHUS[@*S-ja
+V5K&-&SPSp5h[8+)a5A`&2ciYA$`r[VE5&G)QSpMNVI5+"cSSU&`@Mi+PCc@@#Z(
+KM0Zi8RUUqk5!Qk#!5p(T48DY(q6q8J4P*0k!@F4ld!a$BM1K9XHmkXdLJ1+ea+4
+Ql*VQaf!!hN3GLQ8rcp"$XF)!Z1I*&D5jQT4UZP@11a18L@Mc`(hGlabHl6S*4ic
+*#DG2lEQV2VC,VBkiUR[d43J3[YXDK&Z6@[8i'YThedl0%L!R41'm[j8R"N&'NSf
+LM$I)&1Cd0`j9U"jr"mbUV4Mi9B9F`#p@-j`UDa"X`kTjB'Y4[F!2ISA'l))IdH(
+IF+H0DKbZ-Si3fB#ZaI@2m'XpfQ[9'bDX0RPGSP"*LhI)U@iHN8&"@(L"Ui',ib*
+3BYPeh!P4%SNb`1iCS)ZDq)CIT%2me5e)I1$&*5-JNRRB05d+K+Fi`QTq496e&Gq
+X6lpCU2J&MZ+`&N8T'9[91h4S(Mrd!Vr5J0cDeG@m#[D*$@)hVFCqpc[%XT8Lf"L
+UM@Q$IlIHJ2JQYh*P2F!MJ4Z6XBaY8QdM4h9+1%5*&+40Ebjhd`mKS5TP!b4"L+X
+!#E0&Rr!Zk[+*[&P8a0ij+#AhDKU4%Pk9I#%Ppq+N5cI)Cq[LP#daBSZ6f5)"d*b
+p+Z8V5UU)"YB,Xq,f+"%ID,Jp-5X1Cb4rG%Me%a#9Vjb5NX@9NQXNQPihJcQG-jI
+U-cLNV#*9#+p1%cYG!0E0Q!!LmVVU8eBNKD-,QpmI!r'fqHeCmHJLe+BK9E&pLKq
+"1*BSBACA2&DKRm5@GR8"(AYS&JL)0r`P'E2jD#X!-02#JZ"$42MJ#6LN4#IU-'9
+eK#RV8dPCMbjRbST+#QRk&#"p[9ipTRFPj4619bURa!I8Ke4rXVGS'GqLTRcK*k3
+dqi&`C@e[`'&lHFSUZ"D[fJc+fJi"GQ3k02pXeHVC[M"F2BpH%kiH#I!fQ#X[&MN
+TUH4e1!,`$)aMaKfTCp*6K*6mN!!+E6*(bG%X-[(#V6a*hBJY-$N"ac(e,rem)LP
+0f,FB!`T5X5%4h145GD4hPMXk*!*CG'"X[h$djQa+%kf6IhTrp!Sb$BQ-@m1El6a
+V5@i82LbQX%#LCL358epM!EQZ0fmDJHVMLZC$e%2C0&5J(a!M8ehZ69j(AdiNZNR
+db-)qU(EAK#+LaC)@D'qlGQEN8Uc9eYIUIh@*5P8R4Qj!hT0E(-q-iR2JT-pl!j,
+MLFLP5"mUPPYhH-fIcEENc-Ae[NP6lL+kf'26ArajYcR[GC!!3#El4c14a9#2UX4
+R@[ak5@`69$V`HJPFZa$a8rI+FAZ,0#84ihia&k#0@TV#`4)j6XGiXhh(k1qjijU
+@f1l!+f4R-HBIHZ5ipZ"-18i4"mFeLE"A5dN1@AD9'XfTUIh5m9ETL*9R1CCXKCJ
+@AGaHdEkSC(2VST+(X$Q3!+IN+)K8)%1@e")M#%p02#,Dp!E*Ap',$TEC%fe(iG5
+k5&@m2a"cD0RbrRdKCr-b0TZ#VE8b@m(MM#eTB&-($3NCNG)4'b6`hLLL4rIK2hX
+dHS3[+"(UbZM4dGlm8CV-b$PcR%mQ(8IY2XF4*#)0k,-"6%lVQ$dR+d-+9PpldC(
+pCMdPNrIhN!"cbql2kJ0p!NP$ZH&Il"mkCClBh6[BhpNhf0h@ea[K,VpFb2'X#fH
+BN!$BUS5ma)4-Y2926(jRSR2LV&i-"5+!89kfF,1&Mbr15i(-+0#T4*+pUQ#[1YQ
+%KV,'L65-U$`[)M!#Qj3G,k)6Qm9b0(hDM@lj4QTQfLj5aF+D2UKik[U()T1M%j&
+4)8Bm3bQCap-cjG5FA2X&jm'8iqR`F*D2ReP+D"CCbl"GAL$iYL'*UhI2Y&M)G*D
+bjb!`fS-+L-#TelM!EJhIfP@UT1#@8C+iCNF0A'T,80P$9DS[*!$M(64V9BdJMq@
+#0CXb1`jE+(%k#C6%AGi0GI@3!dFQ0Ee$[0K4AE'@3@a&Q0KD,[B6ZZi%C43Xi1"
+8%aGp@5rkF0aq,`0PDQRa"JTD%8*8H9@0ZqX6)2"2''I$kAchCaBd'2B%BMCba5d
+D`@EETDe6-)A)5rLjBS`f2Ami[V[HdU1k"(I#J$1d*r$1@G(5`b[La`ZT%2hTB2F
+T'%ar@bp((9RcC4`Se#-[5i@6qN6Gd'p&a2J0+BSifL9kC50V-r[0lrH9UF[X2AX
+$G)4-3f,Djj1BLZiMYA8JUm%BD$MN[-PaL)lmk#a9GQ)M3`L9(I+M*cVepXZ,F'i
+i&E3aqM&N(UJ6!pN5m#*Y"3%J3XBre0djf(p@ZkAlc2F(U"$hNkS+AiHU9PV(L2j
+YK4YBTTf%@U2Q,)''(DNVTJ0C'%RAUCVVR&%k"e%bE(+L1LU8f2$L[XiCZhBGMN1
+9dEDrU#f%!NK)Fkr5l4VNjbM39be$TKbrRK+,lK%mk&(#kaB36638q"!Tdab[m4F
+V(Ae2IiDQdj5MErG-4mKCd4jpmarH$ai09@ClN`i1)fQU1SR'Dhd!dhli!&83QfP
+3crMFi,fFdI5@cIGC)GamdXPCXD#L*dl*K4f[!IMj`M4SFS1a[X8YLA,DH+5f')j
+J`mY`l)'4Z$4*VQe$F1q9El4GK+#CDMFe2h&K&e"31hI`D(m'%Ak-)Va(f'9**(2
+&)'(c4Z*F6#RFqL"'%X%hN!"!8(N)'B&3[UU*e!5Qee%m`2!5ej!!i4d)U0efA`m
+F&J[Za4E8h$KD*-%9G6eaVYVA+#[M9K#d"Xj5Ka(UBQBN!$[R`dM1pREf4LED+YX
++4GFZ')Y(AqR[%BjY3L1ThMlfcU4Uem"Y",4`%'JAJ*AhHq,f%EP08jG!9`RkSZX
+(4*KbQlB*Ri6)$b4%e+Km,IS#E5%93#JYqJFrVi5#i-d%&)BfSlIm`R!j$[Ie$Nk
+FDKZPBjd6hm(4iDRqh26-P0c-G&N$Smj-bFa0c6c$"DS*$,C-`Z852mQBQV*!N@J
+JqJi4hT)aVbRA!1"Ie[4'[M2D26K*#`9#C+a`0*a'K4k)0-*3q&dD-[F1hGlI1GR
+I*`8hZ)!&aEK8d2Y0C1S9Rq$iQr8TSGQdq#`pm),[cCNc3l`!%l&Ya-)[''F"(Hk
+bYf6aU24,+N3#'bR+-k()&K3ApBC!IfQ`1c,8Dd"!fV"6-Jb!C"8[ST!!U'")9qJ
+l6rJidY[@1c%CGY"+59Ip&1@lkhQ&'(9NL8iR1B&e0XmcBB")eHLbp4Y[kiD!`@j
+0EbIIH,(jrQq3!0NN4i#!C$UlkahZ0kQJPNc)VdC@VMfdjkmmk+&+iHjPF$0$X9+
+"jS-EJ8CMLa2SrXb6Bh'!8Qp,3FMiT`BS)ZA'fDpaFEPUYcC#rE'BLGa@6SH,Xr+
++3[Tdc[L9k)SVA`-)D#M[qS)lf29fjI9!0rThJk,c"lfS`VF*Ykh-ke*pk24pc`9
+A@5PLML0Ld$Q&HSYH`94KQhV2pRG+`DU%4`H+l))'U[,ee8E4P4pPUlC6YDJhTf-
+if0[Caim989)P(KK028A&fej&Tad@!Ub0+KRCA6SA&qU4UVZLhd*i98rmcAT+f18
+!d-',5!Np1bm3&iNTAYa5BKYNl"39%h"ZFK'"a&a[&A+F5(@e2C`C&lljQH2Bdc0
+a,,SlV!K'e,d)jD#C3PFKXk#cHEj"@AKp$)K"m4%0AG)Nkl)0Vq@SABX5+T@h#)c
+mpFD1Z0(EF#K(HT@"9iGPpqF@E(D8UYe%$8HLh[%54crab8YCIXjk-KEDpUSmP@q
+a5NjJ2[d@pRQEj`-JpP+(,%a*2D5J`LHKr'*Fi1e"pMkLE"a&NVjSR%,&bi['8DV
+!K$iSXiS668!jIQHLTdlh'j-6cV-bfqi`[f#+*e!L*+D3!*9UliP(Ak00fUHX8h3
+3"0"@#6L8,AX%,[ES+deF$2*-MH&Lm`4F-9K46)!)[hi2+3l+jq$B6Ki&bk5,'DM
+c046&+2TK9P&FGQ'PC6`1YT&`j+51Ej!!"AC[$leHbCNlH$,PR4+5bUf"4HBX(eA
+H)K2MkBPESh'IQSkHBqMdF&6fG0!&S4kh60(f'SmfZ*6U9F%8X0'J!$hBSY3!JE*
+-rD5i8E@krK0bF)aB$JXVSH-RN!$@B,Bd['ZKAV&86A`me+hj(06#rXkchDG'Y5U
+P!$8&pb#ekDbmMX!%Zmla%K8VGYPak'PDH+`%F-'ekVH$#A5BpI54fI`&0rqcpSL
+ZpmBr-SEfEA&5)&$d'9$K86d-jj(3EK+r-Q'QEQjQ[h`[#DIU),T$EIlXNb0FU2I
+`Q1SXa+)l,NN8*dEUb$%jA+3d1IFb61!C$NJJk`8&#$QN2b-e+!)dmD&K)N36-``
+63CTS0%aiD@)H&ijZRT!!E1bCjCGVMR"bPH8G(NNH454G1Y@TQ4Lk[EGc02+jATR
+I)'@UL4a6MM+V`T9jI`P6CP@B-[[dbVcrTJj*QIj+b[5[8TPq8ZD-F'815S*i)f*
+e9E,*EH,QbeBIU4(Q0@J`,`2c1a``pf`a!1DA"bFQ4a&5Q4EdP6fTJ9HG*M)VPrT
+9dd6,e'aAETTq8$-a"U"r6`!68`eRmb)J,,M8pm6JcJMh(!(LK4!9@2`ANJMk[)!
+h$PXibbEM+PKXmBCXURk3!'c[E'bC*2TTUGSQ3+YH(`bZpNqLNGf,DVklFrF%!mP
+493IpV*Z++"8[22,D(3Yjj+e%`8q,B4jj++)I1%b40rYBYU%Upe"KBq80'b),S(#
+YP3S1&VcV$DCc95VH[M1K-5LZ5'mq[,--9'q&e$")V11&KFHk$P9()DN[['TLL,B
+`4*1STJS9i%@@DI#!i)Lj@@9lfT&Yhmh"-"FbYSBrF6e0cB)ZQ[+M)5pq`5Y*(C%
+Zk8Tk`3*@H`ZfM*F5%$FiMZ-k0cFI"*DE,,(jV)P4i4J-VfMY8kc!j*hG5Fh`RVL
+N&Uda35er#l8`RI6h6KVJ@%626M6K5BJDL3a(p84&C-M["l!Y5kp3D"GEYFe!0iT
+dQN,aqMbZQY)fEU15qR'4i3CrfAH1'idAFTed&6-%&,%k#a&*8Sfjk9)"[h8-bU2
+0M&'a,!&5aMHD1R5rF5bdS`+f#%XJTJ-$,ibjFa'b&CXkHY!&&d40'Ie0(@35f`3
+*Pm"rGEf#R$(%b"PkJj3DZ53+65&*P!3Q'86aDX8h`"ZG"!)c3XD3!*D3!+'[X+1
+%113X4k@pFV9+Z`G9dDM9cd#`%U"FSGm)QVXHUKj4B8e"RA%&mYU+"9Fbh*8JJQ-
+K*B!L!%"PkiR(NP,3+69508QL"V40C3EQ59MV'aJ9k%!5N8Y,UeVI`-FQI,a4hN(
+0r*J%E#KF"rr`3(Mc(i"%18dkIN%,,Y$a#eUXDT!!kHQR3R&48UaN&`h(9NT0bXT
+XF2cB4!b'TZ4hqiG@d**NedCal6Lr0QT9D`dPb+j5aeSNJTJNrPG90+PA-mK`jE3
+29bPih3S%,e)+"V#a@YZ4L8eUa5DjN[bF$1*QBLZBf'5FLrfDQLEei$k-JN(l6*K
+(Uh!24p%!3%Q#eF,(")mcKAXUXq'5)Q)`!+Jr*B8cq*4G0)@,@[P&8r`Lj594dFS
+ZmF3U!B25"9prK&k'!D+9iE$eZfKNe4IYR"jqd3IDM4M!2GE-VR&kq$9qA%0&3C+
+*MXBUp%fSCfE6K"53!!le$r(@%K1JeJBMY9@*)M,aQD!T&S`8k*9FT4H')[2MrU'
+`%R1p9$#qDK8m@K'ZJSAmNY9+rr@lE'V9PaA,iCGpc09YU(pCXK-EZX#J4$%9e-$
+F,p,%!H%iQf-IIcAU%rpcdSq%h814UPJ%`lNClA$S#"'BYVCp#JNil&&+q$eD06T
+d3"@c4Dj%UNB[M3l&L#h)f34RUj!!%SM[VYT0M(jLh(eTpp$dXhN%GVE)96Bh-V-
+8#8C@fXB85"d3qiA0(HPY'-`5rJ8H0(r9ALphfZ@*N!$qjk6`TqQ6)B&b9a%B$h3
+%ZJ+$JG(!bB!aX#G`16![d"5B(RJrF%GJBk!d8"K+KMbKpY#QN!!TT!RG'mS+(3M
+9KEi+[4LD(DS2h4(D'#S0&3D6`I&J4l!V1"JF$GU$kF'M`BA"fQ"$F'C`ER"VF+F
+hj&9l%pj0hN([U0IZ6IFHpGCi&hKIpml`c[&HkphXhHAfZdIF1[FXYpQpfjhK6R&
+Eh&IGMlJAZH[GGlLIG1rbqAh$2Te[PUr2YpYhhRI!GpQh`0IJQqQEkp[UfeRQ+jX
+U5j6CbJkAYC@G,MYIYVqXUQaj@AACl,,kXQPP0jIG9lE,(r*Aq%ImlIiGrX0qKhq
+hrq48SIJ(r&502KX6CABf2-5(q@ci'Kmkf2#RI$M'KKIjX)F0[q*$Q3dIiF-@0Vb
+6$leX@%e$hbifV1A$c@ci)KrHa)CImZ(GE2L[I2J&'ll&K`eXf-b(Y@cBa)F,fE#
+4$iqai4)q6'2$aAaiMJeIjm-6E,L)$c[Cm'dqG,(KcrK`"a[qNJpEfA!f(`kci3Y
+mk'I$k64dPl$KrqE$KpK`"KmqcSEraSGcfI!rq(!Q'hl#KbpJZ48r&P,UETSL"4"
+6!fGBb)CFaHjME-L9kNjM3kj'pcQ&U&SZ+Tma5!MV$H!hI$M'AR)&ZA[BN!"(J9Y
+QSUUdSLSB!eH%@l!KMb,[-icpTrSYH$HbUijaKM[BF$iI[XrBkr#cJ,22CZ*iG(K
+I9)KlN6-X9dcp+jqbX#2FQ,`TE-JM`TZKZ1!SCimSTLlb+CGLkJ-q43Vi#5Q2#j%
+9$%XiJei"h!bpHJA`b!k5!UETP4GmNQeh'4pHbiE2mH%FG[!IqA!''r+!&AbG$ER
+j"KFS8*K(+!3[BrNHITCcKMd+TG4aKLc&N@0mkM36b30,X)d0Z4%'$bZ-C4PRhmB
+BH-!1VQ5)Fi8%e@ci,"q'f2"[D4MDLH8rka%,2F#',r(K0BTVAU*V3ZmTTKEb+@8
+!H)42e5UQ[X@RDK46mrR8(XA8Ir+T,)E@crR9pc+'lq,R#QGSB`aFqD($$&%H-5%
+EBcp#4XrC53&r)22A'h8SUVMbhfJU8++BQX'R0V0M&*P(q05eLLPZMS(h&FIZj&2
+k!-"4$lbSB1"4(eLZQ1*"*Q"46$A`U9bf[D0F5)`0Vr"KK!f2m'%I'elL`ePX@-H
+(1MEmQ!p(f2!U(dECm!-DLL)f[-b(@pL3!%Fl4if'#rR`HUD#,dRjK+c3&i$FC-3
+,E$L2$jHai6IjF$iErLFISSXDm6iV+2CLm8qXL$'b!99A'8bC90$RXaG8m,5a!BP
+bX3&GZBNG)%23X4II`Q#F$3J404Y30HUGHMrbE155"*cNL@rE16Mc,#AX*CHPX)6
+6P*3U4)Q3!,af5S6)!CLC()#jjD6`YQQ68Br$Ff)dH$ki`'Z5rJ9Rmm@)Y`F(1d5
+!(khQ4q2S&1mDlG(TBS%`#ifBKKilTiRG)PfF&jG&ShJ4`j0L*T)K(-"bQXJ9am3
+*-8GmJX&bdF!RTiRj`f2L6P)X&V9B(-ALbpJ"I&k-TH1c,*D,6e2X2$l0XC2i,)Q
+G`1Ief'jmIKE6i20#c)(2rileiI-IXF2iI",V`UFqYJ1Icf,Em*NCDmIRqc%CRcQ
+a%A`qM%hK8aLV`+FijXIRX4LmV09)3ZNf+cBYJA[l6SU3!%i,lLd,c!9BpcUfA!H
+hlCV!c@*qi-2!YB'GJDf"cB(5d%T4(I)&5N))@+)TY$*3!m!['QS4$D'9'&T%[AJ
+1UVK'c"8E!r2&CP%XYJ#%p!Fmk(0)$ZM!C!Zi!%bD!rN"6H#j3(AJI#!'S$+0#rJ
+#b-)"2$!2Lb-81,%iLJ8TNB)*+E%+#e,M)5a5X$L'a6NXAX1#e&L(a@NXINU"%iX
+V@*!!'LpKBF)#A3`'PQ,a-4DNaUYBG'$a!4B*,'SSF'*a%BX@,*CMNF6L*5a#@#a
+%C*CJmEGB2)2&9eMFKm9h+A"L-4q,Ql"!Pj[L$LcQBI%K&YqN`)R&)eM-`1*E@-c
+'BJ%@M9Mm"SYD,0l#JK5`#!Y5`0[-L,jJ4[52h)MqL4[4hGb)rS8EdEAFL+lK4[3
+%0k)(Z"(GcieS-cHLhh)MZSmEdDqj%6h%MHKKEN5Ph)Mq`)hS9pb)RZ&'p$9Z4$[
+e4K6d)Z()cq$@lP12LDp,,ZZK,3V$@ZkXS!i'q1!9*jVh1$k0LrS*&h@MAP4S"N3
+YCk,HCk+@+83GFbBJbX`(Yr*"+hlDmG1$(b5dFXSa'd6ZiY[i0Yr'Sh`E*A`EfrN
+f#[MP4IabPIEb`lLmQ9hqlqcb$NaDf15rXFPKrN'#6@4TSlJ*HBGEN!"mCLX51&@
+MUfUJqYJPMR))LEb#K+VP*563kTLNKipdI%kI@C1'cqJTqRJQ$4mc6BND2V$44eb
+QBf,VbaE1h21bKErd5aqZM!qTfcGD"PFk-rKL)cQTmB-[5JG%&BkRk3GieIDbjAX
+@C`SAm(qGqrR#iqc"Uk9J1N`6Yc`"CM,`HULUQKRU[c*$E@5'ZTJCDJ-ce0R-8(r
+*$(8k-p5IFd0pMK[U$'kSrm!0pCqjSEl($IA(h&$RFN1pLa[U(Ga3rmJ0pATZU(r
+LK[VI2)T[iP&m-irLrmZMH#12iUdmL[mAMq)R@45I3$6p`DkT(%R4Ci9irDKc'em
+FFDkNaCIrk%c5SVBDQGiH#0R#aIk9LhfFLrd,%q[M(5%*4GFP5%c2(m%LN3T!*K!
+VH6F@8AZ8Z6G4mJ3EGAFL(5Ni4XkIVF`4K$*k"Xl""Ahq1qIJM[i)%R6AbSlDXPQ
+8iAYYp*bT$afeqBc6U"K"ecepk,M(K13a(H+`cX)A2Hd@5ZU1cXdI3@*i1&iA()-
+$f$,UD$SN9)dm8ITX'RS&Gc)r9Kf#m,4SVRP08FLHFYf(F8e2NEHYabm+jYPb#fS
+6rY%Mk@ZID1C*dl8LR9iNd@p(!XCMjRUU@-aVR0lpdf)YVq3@,")fhD+#kHf,#QD
+6'UNkelZS8PDN4kE(#98M*`$*'Cp&3XejZ3QSm9TN!T!!FbLTY`J%N!!I0D(lX9L
+&(2cA4#X5N!$*`6ZaN!!GqS4T$$53!&c'Q[!UL36)DY1lR,L$EQpiBLSm*U09d9P
+$e1p"Y#%6h1qm0m'kEBKj@pkR$Zr3@8``XADQaEi&$Uk(AUh+&mCir5(l6VcDJ5i
+N[A,SXESULa`bZd`Z,2Ter6IqXblkbrFcTZ5CiIpqGRIQ3b"3f``')irP+,VV3R3
+NUBX`HL#0[U-YEFG2QkAZ+T!!1,9e!Tfr[HTUVF2!c`G(@q[3I9-d"afZ81H)hkl
+,ljBGk0B&(@AaLI2jhE%LDF2IbXl15-r1IRR(2HMJkiCl6Kl2b-j-5mddNRrMi(k
+TmeEY9Ci0&6pI+Il[`L3,5CL8i)55Rh$fe&@bTh8Hr-m(cam[KfQ)Z$M6MXk$#j4
+-P6E&1FAU#QcTr0d8',j&ZZYi9PC1+VY'3UUPMeM$8GHb$NPUeRGi!L4@6McmNpE
+@1Q6&)1(VGJfKFU)ladp$#49P4dTdL"-LLGNX(H@GNIM4-84hC9C*r,3&@['f$4#
+[NijHTrM4heRmk(@,rjH(p1),a(U)ak[#BZNBlkJ&(5RNVdMdILCk4N&d[862+$J
+X(3XA5J8'%[Yp*"UGRX4(BTNFU'N@YFp2L&Uj(dk&+jmhL`@V)G!"8D+eMMjJDX@
+$fDDNECCFXf*Ni(LX*d%[,TP,Kk9NRRSa0-4e8j*,,a3l`V0@Qd3Y@bbMaDhNQYG
+)5d+2(9V!$e(AF4D*(CQdZ+E`2*,I&&("bbCVmA#V"AKme8JR1M5$ZfU4JYR)UcR
+cmf#6VQ*ShkG[U$NkS+5NSe(8fVdQ$2M%&,U$A""T&!YqT&'T*KYj%fNqQ%EXh&"
++0ZC6%[%D)ce-CDIjR"DY3Rf(@rK433K3QN8S&6)QSf1)R214c14'jk$N6LZ@jH2
+aF8Lmk6"VH)E[iK)NPGpHajcZ(i*C@M4J3DC`"-VR(9C+M)m@Sp*B53pUB9f!X@S
+I6Z)CFQC+5Nk+I#&AlNe,(lb3!*ACRfXmQ$kCMTGj5jF5LqiM)Gj!+E"dUECFHZ1
+0AX1k[eXadQE8-28K5BlDTZqbVjhF(j!!%+"F9HkJVYrE1d6YG,"NmBlJ5EQ*fkP
+53GBq2RG"dE5i+#Pk'9Gd#lUB@mH9[CPe0E%Fh4dJX5pe-##1NL#&iN[d(3pDebR
+8AV)#Y6p%QE9-lAeFlEX8DYr&hCm0DXpAU(fAAZfbp"!dr`BS22AmmC51EI+C#`F
+bXp-rfL$PU`ST@C!!P%%Q8hI)0A$P(XI$lQC+#4ZfPqC,b&*A)8DHF!U)VAE&U61
+C+8V*,%Y)c40AD616eQ(cVRB1*$T(@QrM430!(3kX4+e"RLJ+'Hab8+m!#9"LBZK
+i9lX`UUC6&bXG2aT5UCL3!*8NK!)'G6QP&c0-j[XXQ@qB3)!KBCPE"T63Z3-K`96
+KekZLj$P*&592-P@dk&8K-p"fIG6",[D(E@)(1R$L++pfD4qle2JhZG33"453!*L
+bTMl[jXlj#T@haf(kDSkJ&%NaZXUJ0!K+)kG!5@AbQ`P0iJ+b!5mUZmZM`PXr`6Z
+qj8Q'$0hQDDZ#GR3Xk#@R+(50'c@Iiae`Me-P3*HZS%UUG)'KLK+$$T(IECF'`rR
+G+&#4T"l!61MLR2$Z'(Q43SpHpFU8'$k!4c[kP9hqmDcL*Z%R0qAbUXqI91ZV6c&
+bhG8R$[AJd-R@1P+'l'!GMEG+)Vjqq6SfV"Fb`P9*4C9r[8'0'D*&3VF5N!!KCFp
+R%9T50FTF!rd-ZD5K%'BURb&14f#Q9ZV-YSB-N9A&LSaKd8%[+KrA0rpN[rT'1al
+5U(`KDj4$)pcM("jlLA,5USE!68``'[rk"J''8l%S"e)A5b#UrTMK!AXN),mZI01
+UK5Y39)9THEL5&0A3CS9UB&MPAm`ZD!qE@2cYqBE(9`TY8NIq-+RjC+j1If3*&(&
+lE"$ZXfQ86!DG2$l3DLD$'1LQLJB'5qUhmHTT*@IL8i8,+F"5ac,I0M+%dUJK1#l
+#'S*4()%5!mHS-BMU+FS,20TbdV"GrS"2EGHiV5pCA`A$9r6!Xrj5RLMR0J)QQ3S
+kT3#$JSS&AKC`f`()4H8@(TcAB*-Gh'`1m'j@G@')58(BXL+6*IH+eTS943HL1&L
+rL#IlmqmqXY`L"a4-86,RPKSPH-U65@26+A,$N8a[E8m-A83kNiQe,GG-@Z`PL3Q
+j2m`NcdZ9'LqNefP4J`T9adJKCd[j#`SZ6#'U`q8V4$A-&8,E(eGfMNJ)D3F3p0X
+k(UMdTPfL[jD5KUTD$*F5k)&%84XT-1J[,jTCrZ9&mqKbFpj2[Lp&3p&@-QqTFrR
+fl$pr-4b1YQLSM,DBVN4Ea&CJ3TXBfZmcifNT$fep01qS8DTaVN@TaMqV8A%QhpY
+)S[J3d#cCZFd`q2UpKX(A9PBZmZHU`iTmJ(45NIq(HGHTA(+qQdBLT1*C83#CVkZ
+SCS@aSB[D0*9+iDkfZ%5R"DE3Y)(ce&9&FGi9&KKdAQr5JJf'&DR5a@AUbX9di4H
+V6EfqfY3mrC68LE-5p#SaPeI9cNhA9lAS*QfpUle(ak@MUdFi(PLJ0K6*%J'bRES
+TECPHP4&Upk,$UKRE(fNAH)bkGrUKr1k-#"A$lHI)j9-1'SaeHjHLZ&XR'HcfUpU
+!Y%jLqlEQP5(K*411DI5&G'a`qU&8NfieN582+%5biR2lQ&BN#jLlL[3LP3RFp3q
+C99Bf8RGC$3##-Rd!JY#-C&8-,mkf(feA9$*5*E(pT-iX4e&*Y2#+!aG5491bLaJ
+*Q(,3BmB(UA0(#[`P0KNG!U,a`SX0+[,"I,Pp1DqSC(l91ZQbVppA6P9eZl*+N!!
+PC!&bM5T!,QAaM5CF[p,-J35""Ld%NNJ'T0SB*JkG[P3f[k*V&DjJ[$XaFNq('eJ
+J66L1jBaEN`bFpA4HT!l-R+%VcellE+6UZ@0j6mT`*I1Q9HkfJ&GdDh"J4U"%*h3
+!UP[E1UEDh61U00dRdAASYFZR9k8@ki,cPh0@G(%XXB[fpZ4AU2LII*DDR`BJ@Jj
+#ICl`VJZNak$f!&cY+'[VJ8Y[G*YEei'ZTU(fqFG)13e)H*943@$p9dM)e&CQ!r(
+dUd0bbbPdRrMBiQhZkFG1VVcf@856Ped9lEbBm1)a2HK3MS`mG5Z-+ST(QkX0$c-
+e!-VFL03j83Rd!2)*6IIq`(Z0J[jiJHM@1K6PC"jU1D`MFhf(EC4i!mCA&AjpZ`$
+4`bmeI1b$8Q,@,6l@9$l2QmU&LUBb*h8SQXSCLUCbSEDT(*6)%a-2hcL+ELKXk$F
+*DRUXq9QJUJ'#cq%(AG+Pk8RP&kMP,0[4KTBcFc21b!Gc-p1-QDRTQ4PC[pp3NJ8
+VXU!3k[)3bR6aSEVY()Cq+kqL*UQ+#J1lH0AP4r4&-hbd4-HR29V``d#b(HD%Had
+9IrPKa9mi)'S3ZdpUdK&*SMUXL&JN94ermbZNScc,S)9IT`mkrXk,*bSAZAqfDa8
+EHfl&9e$hDM5XVe%fhmUER(MiHTHKJJfVjKmZfDJBE&B-VT'1rQNXr+LKiLjq+&c
+8GU%Bq"8$Md*X-3Q)Dk[[3%mqIfaqB"BY`UYd*0rJ+[`&NAKhJ)M9DZF*pe&Jlm#
+4[K2GH'Vk2ILKB39[C#33D-iKD#9id%,L#e(0JP+(RT3JUIP#cTRXNmI2C-VfiaH
+b3(!L3P0U9ZEaP08$"*r3(eLkP*d)$a!F$,Uq0,cKqkYY8SAq`-,e!B-HQ%-LbQZ
+NrXTHZCQ**$JlY"&1LC6a%$JNi2FIYDJ$jEfBUAM""0bM"Ilj&LK+iM"6e5)meV%
+3$aS2)hic-[+1F*30S"GV8,5Z"YJi3$`-mDCY#LGCE0Xh*J[YC#I[#R8'1RKc8HB
+Gb*Y)LS3#0)3LX"TGEHDZ5'@84FNII-FhC`[E("+PDEZPBGdm8%2K@M)`BSL6mQB
+8SF-93a$4"eC6#mLX!CkP%#+!3B[U-pbm00U*1f4rIMFRDNX6-hR$RD1YRIa#D[C
+1I5+S@jRjK)MqC@%KGFSUUX)Q0f25U*`UDT%#4p%1VMbH2&RlmTa%+LJkI%*lCF&
+@[NNpbj4d['!R4k6#!*U3!#ND'Y+9#M&d8KP'()+khP38*HVb#QiY`@CldqUJkiS
++13kX)!miR'4'$dR@NLKjGb'DFXN35P,&(l*@4+S`N!")&#5mF3-*cbK@,h+hKa@
+jN5EH5Ber0G1H3Y%i`M)8bc951MD*ihEUe-C2T,P909kS3RbL6Nm3[DYH`D`NfYD
+[-JKU!H2+4#G%rEXXdFGL9GUU%0N3j-)[B@5KM"@6[4`eGRpNmFq2b[5MANfPRJd
+L0!iEQ20Aa+arL!3b,C!!e9&KEH%C)**V3$5-3&#*e+SP6#X"p)q%&fUi%+B#VTV
+`"MNrV#irSSLFpp$JNh8V)+cT0eG4[PP40EUpQ+V43VpLS&B-K**`N!#S+GGd0ec
+4L`Yd+eDd[RNYCQQEeiB0&dP0'$!X,["VY-h[!PIP+Qe&D+V59j94ZTjAUkrlDTi
+)G%V+)Z30VYdDkT5rQ,Rkd&%L6+VC4(3&JDBb3ELmL'#2)m$QEYB5*IAAJ0LVk6C
+FSUUY6*!!U(ajH@#K!5(9!F8@&GHS&S9GFrGU4aFAb+XX%[4EHrQAFaA9D#&,a&a
+)P6Xle+*3fG+`!29bJJVArP8@D4T0hHU)&,eBrVE#P9GNVe69-,8AI9M1GVY@S-#
+TFVE@`9jf+EBfA+NBG+dZV+"d"C&aEaMDVZY#6kPmCG@m@RB4L1m*KG1Cr2)EEF+
+VZjLip'krm,CRk`cJ9*3kP-GeB39C@'5-r8mPiTLXAV8aP"I*8N*VrL![55@ke32
+CLU)r2"*A(3$+$hMK38MerJS)U"ikhPVc#PJT+f"&C030)l[5(hbM2+#D69hm[8+
+Ge95ka,UZACq002R'"Bi%2[*,bNF1PBNHUB'!6LKEH3I@(B'EMQipY-hp481@b23
+Qh,&3UeX1e4`"iIp*15"eL@D)PPBkIN'JUfdEr!NISdT04i3%R6LU)!Kc&8UXZPX
+AL9Fp90fT0a,llKXX)f%N,6LGP&HSEYCA`5M3pdmmr,mq*&HBhfj$KGckmcNJHQi
+@'Lb'D4+$DJbBDeE"CK6d5HF1($)4F41[afAH"'I0Uh&Lfpi%N!#jN[[@kJjHqSV
+Hm[mUIEVZJD[@Q3ZTf83@1AR3R[fJhUpX%hN9C+HR(,q3!(i'dpN'al+`c@apIld
+h8kcIc0Er3jY*,AFcUGV0'%!M),CliZ((5N'3!2A53P1AAjH)*1VD)r6iSB[rp+j
+C,#8dm%"X6!"Y$pLZdTqAK$r9aX%GJQL,FdjdEbLb1@Hi*mGe+Mi-fG1iIMpG6iY
+`C219k#DN+3A#8BC`p(G&q-,[JM#8Zh'QT0b0-pG(Z4[2rcQ9Zd''!19Ze%M+hDK
+CAq9bK2pXbPd2K2AS*ZKbPQ(#Vf9JBU9VqDAhK&hkpqc5R$-EH1&M9rqQ&kj()D1
+rd26R+5ii3RqR4'M6$4*#NXlATlJ)4q[285#[$eUV9TED5Yd3GKjm*#-Rqm%,'CQ
+jHNPGUHQr0fD#F@J`9HLGJ6aGE!0pb)`+YBm1Va%l2-%8pj`M$UpGRV@'R2@*T#i
+,kX+CND'i14FpPeq11HZljE8FCTZiCi1+YPPR-R268hiIjSDY*rH05aGYajp589Q
+9($#4P$IQc%b(Mr([%+P$repHZm)YmfZMH*SCCG%KmY"4*$jViG+0#-`p$NHr"mZ
+*`3FT#ZNKEl1Xk,*T+!$3"NN1e2`23m"$X%Uc$MIiKHf(q&1fiT+Sp*bXR!Fc8mU
+6Y8T4@mS4GG"SA+%SAM4iqD0Z+cMJ5RqSJ(&B)VP'di3R1-HLpK)`I!)LGGaac@+
+$h!YRbK%TQFm00QQ+L-bEmSkIZHh"5N@3!$cam"2Mh*RGTb!pP41d[UX-@GU,+!V
+)(4p"GkQXIYPbepXJ'-#*rF#SF[TclB[r+TIp[aV+CpplSM+bpaHZ$l+@GjABlVJ
+RqfaQEQB+V#Se*b-cGAmk-%IC@8k"6&HdrPQZ5!frJX"Ur+%GF1)#!$a-jVp#GaS
+L&0!9Vkc)LP-4[CUK92bIUNPPaGBUM*li8e2,3f4U[4"jIJ@PS3%2M45NJ%L8rM`
+%C%jDN!!!489"34fFH2Lq,'S'i2,!US08+LYH9bcUeq@)+Lp)k8@KLr+$&KhimSk
+RC@GPjMV6cfFE5T1`U0)ABF8%[!c33cL+HdY9[!01+%a0McIP$MPi2!!2Q%fbQKT
+B$!$T`5AAG8&Nk)+NVe0C$,8e1(Bmkm(M[cq6RCZ$VX,hVa)lk9!l$U(Ih*`-p!q
+f5RjM%1`$B$qBHqEm"A[k+M#lS%%F4RJd)L"1b@r$32"R6f$Ki@*f8#'6ZdS*I'F
+4EJa-9VQLlS'SR)2T'bK,9%lmF2p9(NM9kaYF&i3P@pT86L"G,e0jd+$HPlYlhJD
+`JMm'iL)H&iJr*m)Vrl#K,XXlmGmalm3I-)4jA)GK2&LZBBMe-i`(0m``(Y`3`hL
+`(-1S(!@EcfQMS2"[%!@+JKJ!!$!$384$8J-!9V!293XX+3!UEA1rPhGC9d4F9L)
+LSK84dG5-FF`B4prhhAh*mm[)6-e-3FiY'!(#JQDQclZl!L+HcG3D-kGa(-GTc*V
+'-DHJF4bRc$br'XFm0jil*613!b1NjAkH"9`mGp0mrqqk[Zqlc[0Ge`8E()%%34!
+%3C!!5)TN4#[@eGApC[e6qRP(X2J9D-%cB)l$R)ET#X0K3Q%Z`h5#kAZ`cA-UTXP
+0#%&4j-RGTh+cJdGENZSd3rU&)H2ceE[UC#-32Blr8LfQAbHedcc5,+-fHKPr6ce
+!(bI0dBUN22SJk90YY24EBdbdQFp8CaJPdBra2kL2d(G*Ll4X+Cf@*#h3(TH@'Sp
+'Cr(&DLP06hT$HeVkXr&8G"Pr6CeLH+-2mUPU!8e,QUfCT-('kHJAk[JpkVrTlU5
+"@U9dKSBNhDrG+6eJr$2k,"qN(U@DT,Xde!2M423aEP9$M2,S2r'KkQed4e+`GPa
+US*5NKl8pdN2'mp(lq("eK(%UqMPqVhU5(N`DUHfAjKSjdA[j0qTZ'TBd5UZAFQP
+qdN,YN!!dccJFEH'4DLFM2$UUMMqM*Y1rNMTV1k4QkT2dGffcp%FM+$U"hkjQ8,q
+N[fV[5(mcmU-cq8pUIf0Mp1[mGfS6r5@TVpBSlD+H56rAIT4H0Gk1[X"lUjmE0k0
+[m#r9EqNh5GfeLp)RKMXkP[pAh8,r5(TI5j-LU%I5KeU-p)1a+EU9pe*6kA,5VAZ
+dck3"aPI4+rNjYCZa)RS9Id,pRTj-kU)YPeifYN9ra2qMlU4RNcTSfk@Ye$lT&He
+0UD2a9[4UhP800Bj%Eq$AeE9d*5P-@b1YSkY*Pl3[T'['ep(VHC[U)QI5H8fA%Sh
+lSZ0i['ShP'J(YeP8bDBPFFdLfG$d-*6q"XNdMJl3ih5#EP#G85IAMDXl82GihBN
+k-RYU#r-#4FDBiQAbk(%(9([aM0'kYYUXDa*-Y$Q1)qiDTf[2"h5YY&MADQ'bB"k
+"'3fN#4d,1XI"9!)cBic,2RT'VFYZm$bA2F"(ZqbbX!FiN!$MK29`,#&`KHa8-"m
+3GTb`BpMH'E@kjS&NSe#h&1VD1&RAC)qZQBXP)rS1[Xcbam5936&"%@P"#CBr5[D
+[h,'@j[J0ENY$mTiA,,IClcb*i$aZ861L,!RRQM)YArdBi`jk*fDrC80QmURpPND
+,@fXYYcahH)[Y9*4JDQ[+M2NajK5b[1HBX,!0lZH@j@A6X[XbJLbCm4Be0XEGP+R
+mVd#GfXRjM4Xh,3Ehk0a3,BE&Bc%NZiI38d4dD"kb'-aD2+V0)klk#Kl0BqMFSeS
+mm3B*V%I9$!rN#dl)`4#-U,(N`3$'bEKd)('Gf--04m9b#[H`(@)aK4XZYK663,&
+"QU&L&Hjaf$e-)'F+SQH(Y+TP111U2ZCi-De@5cr2HKiAT#Ck1(*a6PcKA(@L6bE
+AG3XhN8"DZ#S'A"L`f'&9ER)P-JBbF6@qJY("ZDY#!$FT0S&@ZF@PQEL5@,(Gj0#
+!#Q8XBVGkRUeJ8Zdi9fb#448V1%,CNK"[8EL&i9a1*J4VUebS40AU*E)"Q&ef[iD
+iYKr'Y2I,8(LKa@`TG0R0K@3a5ebi'YC40B&4m@mh8b(b8NZK$6dJHD&$l0,&4Za
+A,B@5CLj8R4"K*VEGALKk+Jl&(V-L@$NNJ8-4NL6Nc'+NfJUVK%YLQELUG5[%J!A
+lH,9k9Ia-#U)QeQ%@)P@KQRp&95M)#aA'C6(Er*U"9+,`,CS`5KXM%$j4D6!#$bJ
+#169'8M"`c48[cMQ$-"3@5#[SCl"5GQ#$HYi[3*clqk*-eAJQ&b+ZD&3KJFC,2B)
+9P1YqGVEE+Bl(kqAdEqCDaDTfSGeeLe'PVG"8Y9NU#V0#'lpmP,D"e!ZMfK94#8"
+QJb4&%aM*,$$UY8,SJ`'"Ja5cBM-,&K!,1CdUFVYE%M[aQd)f`'ibA&a4R%bm`K@
+(jKFReP(X$1PITdfTN!$2eP%dl)iAZi$c-`U8(E*9XE+LR'I,X(a@KGcV99ZCqJ`
+Gb[B,"k,DmFVJJ$)@Lb6kU$fX5j*UYm"@$%#0kqMJM3%@98`bZH,p3p31`5ECa%!
+*K3aLaQ@4Q#c&,U&Q5"+h-+X)XBlcM+F+,jD!$LDK$4CcqKGK'#C$Bkc`N!"+K9#
+A6HaA8$0YB"9ic[5SdXP4XCSMY!+$K#Ck,&6S)A1K2X"-SJ2J,r4B-,#)JI#JSX3
++2BT0X)UU"cEe#MYQ@q&BlGLLfV&&D)Q"!h8KP-N4mKcBlV!*Q3"PXb$D*E%5-i`
+ICAAH,diiG-BLT!NC&HSSU*8H&+q(M4A)ZFr*4LiR3cRX3JqE%)S+UmC$Q)P-%R0
+5(RK#MdPLRY!%1!%Ki1SPNdF0%`IN!Gi$GqGK'`6&25UM)3i8*q03Vl-G`TJ80![
+ZFl+4R`NCKq"5r"'&j4&Pi(#b(8,8HE%m`H9L#a2[hqk!DN`R4kKI%DTL5!5Df&&
+mKBV)S0M+m2&q6N@XJma&2RbU3,XIlb6hpe9q-JjrMbDD[LXjU0@0E`L(kE$230r
+PMQ[+#0U3!0NDkrl+(4%8pBjka@G%"GUXU`kEi&(4lqbi0!'li'L[m&,%[JjM9Lp
+dSRe`aUcT3&p!Ic&-X+jprdQ"9Y-!JjHSQZ1UYLS&R5-`UB,"bdHUfSif'$F--UX
+9r@2F#CEbd+!UPD('HdFGeeSN#8UmYpjK[,FFR4d`Q9MRV$TJjA`P+[Rec4(jXCN
+*kj[3m-`-LP!6Ul[JE1qiT#BhZQ-c0eHKKDcE)DXI1Yh&`(K[*XEak-q'QDYVbaH
+TIhPVY5[+(395Z)-LI)Na+8V3`Q(-m4CSFh,%`*Kc'[*U--D,j*ceN!"h8GAH#PB
+6hqU4'T'r15,)%R0ViQ,BeMQ0f'D(kBDYkDUf09TpBZZ4mGTm%H[f+FJ@3qck`(&
+V)R`iQ3(4NHJ-%J2MBm+i4i(fX4NQ5pHqLPDe0k(RQfF,R%-M@B(%Cq4[ENVH'@5
+*d2)C+8(rMiq#Iah-9PhEeNGeEXpN[)NC3CQEhBf#fCl2#,cHq(JVq#2!ki6T#[i
+)9GZHUGS1Xbh1(9%*1k-X'IEmj-2k4*!!URe5S2KiNH1k,d"m2"a,$%3(Y*i00lk
+MUqT-6TZSmS*hYUA!1EZ5REIPalThjMI[M)M+h"c%4"QcMi%P$T*@`f6S@[*L0A&
+lCP@"$G$6JM,G4f-cBjSfCq)p+#-rFr-a#*lY0'Ch0N)XMSQPiDSD%418fC4FpAA
+2%K-+kMJU"VIb)jK89e0-Dj3lZC%"jZa)BhB)0*P9S%dVK#Nb3U"3b#kBF*K')k4
+eBNYT#YkMAJQ+#%V`"DQ@i$9YQf1LB$HYd@&-DdA(,JE'Y+XBSl*1k`E6h`M"Yiq
+3!-X&jd1kMQhG5f,GP`6+D52'!T66DKc'&%q"0U9%$)`T19JEheqQl)H4M*!![PL
+l*dad`6-K[4lXDE0-k*GDTQ5+ZpU*63NeTR$QRUBJ29-5d%&kTL!p-haG%i6lZ+B
+TrCPVfJK!hEJ9TVRJ9NLNN!$i8URM8ee9UdiY-kB@X9@RCQ(9%HM!(d`pES3%Yeb
+e4LV3KTEi9jekh,rU6*KH-0eKEXFjkZ938m'c3bILEeSQHfTlBfSIKc%9"6Ae*jM
+HaP#X-r4i`B#KdSY`'&1('e1$XIqe!Qdka%f[0BC#VD'!ZU(K"GH'4VCFEITqBrT
+aBfLM-E6ekSB[aPI'55[Vp2#@PA9kUm1B$MLHEKF$BcV+C6TmqA58br6qaY$3kUU
+Ef*3IXh0(9%`3DR&c9&0'E)3J,Y[r,MU,B%ETfZXG9'Gq#GYa2L-r13TI$XUGc9(
+*3@l"E6AHm1VAmUp1N!$B0qU00miD3fFE3`%'3b-92N,K+a3HV2"I+2`r#Rp@i6m
+TI,r#rkV`pa5H`l"pm2URm"+&recKcbMFV["BK6r-Z,pAH,2#0bSmAZ'E&,jBi8i
+QX4X,cl$a,SAr3q'9M%p@q%,4"ZB&6#MD+bk&fe6aZZPJCeN+(mc%JIYeK4pJHdi
+be&-+IaYY#i82`IXKNhZ"V6&2iIFU[)dG*#TmVF,rV[$j#YqLm"#&pf3Yr"&X(-h
+5XdF4Vh1lQFCHK8HbPDBTr+,#ma4qAH(I-N(YQ)T*#Rp"iAp6q('Q5U2#(e&iQX*
+r92J*KAqRm&mbe"QQ(&C0VPU[PJfZ-%@aq3Q&[k,`2b[mNX+A+RbJ`[r&G'TMT,q
+0kI3K8kK!i88XY3T,*`UMRF,2+I`YKFpN5dT-J`5&Im)+)&[K(44Z9IK1K3F8IP6
+K+U2)G)Ah9hKAPQ#8jH1-lReCfUBS[*2#"l$MHjQZS2k$M$V[+[`KPSD(f4U(@*V
+6&EjAiDX8[N6KD2*mV2!E#[p'iEhCBX2CraQQ5J-M$4+cR8(-1NE@U`TIc8S,Lpe
+LHQ$Y9kY!C!1Mi)mXNAFceLm8[P,K,c2@,BckqaMK`$TEi4d9rM98Cm86$PN-HQ*
+C1FeK6"BQHK8VM`F8AUr`ja8HT[![@3)J`UE`X`SIT03p49b+YR3+Mc4G6TepZPI
+VB(2SNCN0I4Y65VUZRR'mjkjJMp29,ZIfK,QPACC22rZ*He"YfrTCqrYPM-akHG[
+LSpd[eK6DPAGc1qqBlcfhFNTPMiL"H@&V2YMAIq2`l2CE&jAh[K!5L)qEA0qRH94
+CYa@[RANrE8M4eA9c6[f815+p`rBPackr@@Fe0$ATm$04m`TZI6EYK4mfh62QqSE
+Il[P,dm12GAcV$lIpr-FlLXrV[pllak"[RRlbqcIqqGrB"jCGqrUpNhppjm&(rr2
+4dYrrjYZlC*[M&iIqPEc`i)#[T[ll`jLl4epCqqRc[h[pS8GHHI1l2lhkpY"aLII
+pF[II0`plkSP9Illc(e[Z2h$TLiqIqe[q[BmrZh2"L5p[Q+iT6HkAD"3[5TKiMVN
+)cQJ4I0QL-$%`&RA$',jX83HB(XE3`DUfH3GFYq4BkIKhTDm2SJNFdU,)X@5-LdC
+!jT!!JX6[mTJ3,2TGZV&S"&i&N!![I&G@d8&fZ@J11XJZ[cYLI)GXE'L`UNA8`a6
+"C!XRKe`'ff[-"HGV6"Aje(FAMHrX4SePdN`*1H(PQY4*@LeGmb0!UDrc%i)bD'Y
+342iA%3P"%@`Xa(hJQ,5G%jmrRQ'4`rKZ2MSeBQ!X0Q1-I'Ua#5E(U-(9P4SdZQY
+%[KbTDXdheF[0amBZm0SN#LaZ0KDR1Bc&kp'r#40Qe&bH41MjjQ-6DEj-4&SlBr&
+dSfCQYB4VN!$JIhPJE6A"-mKB@QM8$(jL`TF+RhH1TIA'8M6NPjDK$pSZG4Phd9V
+IPj+P#FE5611Ze)QejFj9*$mZ+XEp+l3FPrDE5%(i'q0,*d-C3-V5q@*J,!9d,Hf
+#rT!!!Qe*RR&A432c,YE!4+F4VEh@Pp$XUicm,Eq#CNZfM9@c*5Lj*5Le*HI%`&M
+5!@-AqReJHKYhlDV3M&GS&PT`+D6ekkKNRjE(a&i6PJaXfI4B81J`&Z39A&Y3kYY
+N%3I'!J[18!X@R+dB'`Z13!N3DJ&D33XbM,['[e+%9M9-a&kRXH#FFGG-KhrpEX$
+ME3-&,#V`dH6'U)Mp&RCd53afZL1LQY`al-"bV%TRAhQ,+b5GUj!!P"rcXk4J&ej
+T&Z$Y*p)L"XM)d%Gq@@XXk)mZ8K4j40FZEK-G,bj@D2CcJN0hIP[VUh6qLe2D[iE
+C[iECL(5MLf++l+eVErF5(5m29ThfLda#ajEdf1)A@#(qR+riLV0UUM`jRJ![DTZ
+I$22`jMd[VTS-meB+-N5LT6K[+``q&,a0SZ-R3i,J!"PDk*VrUqKD63baNYQBeal
+G+6"SPPjB,MTqBUaM3VVk9r![X#1fq@G6HRl!Q&qZDpq1,0#Xm1P@3+)9,XdDUQV
+j+%iVkUX99F++qQT&YE$LeFfk#brY[Ac,Y4QqrX8Y9qi`jU-1cNFacZqZDcrL2F)
+DAE%ZR+!9cY"+2ZX1KX&,NcA5[kje"T2qbS6TI('Nj!XPBb&5Ha0["9D3!05+E-%
++9DaipE2L$FN+i,EL#jF9PG5+R-S+GfVYLQ8Phq+V5Zf,,,k&520#T(RKqc$[iR)
+V[J&CJmAUAQlf)KqmDh$9dPlHi18@,aHkG29f-&@rQe5mQ9K`Y6-j)bJUJJj2i)J
+XKqeMHjfa(&BQj[LI"I@D-MGEN[2a658L0YQG(e&ZbE3FXl`6Y@YR601&S+T2*j1
+ZdZ*V4rA5ilr*-(4&(C[dG@PZc`VhFb[Cr@0V8"@aM[RIkX)BYXT9c8dajJBck*m
+lbf(-R9kJI32d0k@kTPP96H[QjALIPEcm#%EV[6`9XG$,9k[DM4)[$mG9MePHhRL
+IE4mjD,GaU2!d,SHG0$HFhQ[1k96*Fm`jiC95VTNE0flB*l,kU!6(f")akU,$G`X
+$F&(BSpa-fe'A(FBS!-iSrjI'6M[[%cNaD*D-R$mjc9e48IbK+G0GjC!!fLSBUP8
+BB3bMm5)R&fM$-"L'lfHffMIpHlU165B9m'%1rejM'$i3$%16CGK'Q(KGLmHVIh`
+#6,DURCm,mck-(DC%G6T6Q1$E*e'k'YiRZJK@!)!23cdG0NMAl2dVp'[r%YY9Aa8
+(1B`8I,j)J@00fD&VSC9HhYA,1kPDBJh-(*Mf-!S-h1qScidkVQV1$Pi12q9FlZ@
+A95hcUUVCKX$-8FrE-[pR`(Xq,8M8#%YjPqVk)B6iq5aq[[[%Ze`THfph1E3mrTR
+4Hlqi"&ZJpGlrK9'AiZ@$iCU0Kbmk0#p1AkdiIEA&k5`(,T9qCR5[11hZHcSmkdC
+UR9%SHiS$imaMmNEA,LXkB#V`(LapZZbTNXHb(mPk02eabq(F3cPlkhFhl0Rhr2k
+6Tjilr8,P[mrqmmbGafmVrp24haml)8AY5%i)DYlFf,6apBah-[0E0dA%Z'26YZc
+kmF+EfclD[M0ml!a[ArcfjSf`@@hAVRCVrfaLk2@`+qKIZRcVh)!Z6hClSQ[(pUq
+mr*m1chCkT[1rE[pMRlrhr8[rhrAlkqGIp[UKaiHIr2IpIr6mHHpAZrrQmbqMNpl
+p4EYI6rlPc0pq%(VP&F[(LE1R6CNkrBhArQbC8EISZm9,Pbb)R$GriGcVPa0[A6V
+AjFN"6h3Fh2AP$[pjB-Mp`AH%$+fjbeT(re-DU)V$TFIGGf6$QVAV[elh4HTR+lp
+Dr[f+9D[IZRZVR`KMjGM+L-!eZmej2RlBTpr`@HJr2#TPq)-2MA51Z1IHmqm0((4
+hI%XDr25hPM6ik@mq02KdeRZ@1H0Tm!GI'R`cDPM+`m-I'[RJL(X(hc2`lN%YD$$
+*Vl$kClb)RlKf0Y'I91I[RCl)Vb9[*jmIIj%rA`(K2Mr*jeFRdGKr9EZ0#54,[r+
+[C@Tm%5$"K-UD*q'AaR)dAU0*0r'a#*L3!%bGUkJe-ET9r&aeSXaPP'3a"6$Gbda
+M+)p'8bdYSb*-rM*4!Hlf1)LlbCkQ-RU+5ZJabUC(+)XHTA4-$E23BFUP3j4$HkQ
+HGP-$lD&pp$cYTj1iZq)j&2F,Q*IlEpa(p%rFQhBR(DIEU*cqK,R%[kGMQ&L'JSU
+L(C4-#44%cE5C'UQ*0Y,VP%([8#EPidDl644"-H5Q@%UM,E5,IU3,p#CYSipS1qe
+%UIqr#(LE,Y+hG"2cfX+SVSfZd9AU4ZhT@8UN8,S1l"AbSbr4CET&jfJ!GD%R`I3
+%GD@1B(f&AUEr8!GXk8628'Ik&pe1Ik3qp(IU5hqKr[3lkNGrTFrT5qT&2e!2qT!
+!2U(rd[[d$qT*2kIHp#TeTpm`KQM-[U*hk4I8MRj0NqQA0*0q5ap!MbYBj@2mCY-
+dQN*6D6Up3Dr4RfN'IS[S1eT-5fN*,D")QNIcD5(0KHDANB*Ed2SFdhF!p1e)Jk(
+cbp$e2r3!$D(l+CMZS"!D5M9d&eQT6[Qr$`)UCPFib%8kaG&pG)3fd"TD5q[TDeT
+(Ae!UI8BVk5YD6Yr6#PT&UqNYfYS#"2jI")`(!GadTC'GE15Nma42`qK6qJEB@H4
+(2dbM+)@'di2d%)d%d`LkKqi&khXdN!!'dGhBmP)Jm"2pl59"3$"%8ph%31"6k2!
+HcF&[3K$i!hi6"i&[S1d`k2X`0"Ek2JKpl`8)h!0YliDq%`8"-YEa1e6EZ1"e#1B
+D%I+@Xm"&'*h$`JFLe'D`d%i%8a`,&d3iQ#h#Bi0&b(D+N!"Z3V#NDfa3b3,EN!!
+Hcm*N&L*CQ#[#idGBB-H2pfGK&JXM4,#8XU#`X*S&U`L(el$3KB83%A)6@)KQBBN
+)Hc0&U1mM`Zim&Xk)d'!@i83R%D5c)U61&Z%VY[QV35)X6fGK*3XA@HM&`L)4[Lp
+LJ@hq[T'&8"BqBB'*@,9BK$IEXm!5pZER)QaMUQ`VCf%l#a%LI-4)q4%MbRC'qZf
+-I0YCiVGhCU'(#1'-+1(e,,!##fH*$qr0!L0a1&-dbXA#C4&fG'@"UCA-$T,$@AL
+CKCpBB#4)CN`**KCB)K2BKL#@l#"'QU!j,$"eJaMS01mASA'q#%fR@@$EQPJ"0$(
+P0M,5EmaLJ6&YC%`EEl,!LR2MG"%bMV13!-S#8c5$J9F'BmTJK(kR@B6mSb``)-[
+hSaKSj[GNB3S,$'KDbeKJK'YPS0$+PQrGbJ)VUYDq,,$0VBb8V3aB0c%5Eh+c`&6
+Ca!LhLB(&*PDdQiD,%-'+,B+"G33VYJJ'bM%Xf6%-A')B1@)BqG`"&KKCh3bXhDb
+bZ9NPG,-%ZrZa`%MM6Q'"9GTB4Y"B#`X-8'*CBQ)C5-@b5KA,LMD@U4Ml'JYXFaS
+Vi,3'&KLjdhD`X)Z&Fbb`5T,'b*('UQAD%"'f-+@hX+4ZB8RG`JTT5cF@'1'fX'6
+[%X[`A4EKD5blQ&IB*D4UZhV*9&XS8hqBGS@b89SS&bk(F4I+mNfB$p")leXS&`G
+J+J[P-8F,j6`-PUdTP)[k&-SP(3VP3pX+jGdif0d$CN5Kh(!-"J)DZK6+HmTK`,!
+(`Tp2J!(bqGYKHX,-K*N"Ne)SlbFX'T!!jF*)@3kFNZ@50&RH(5h,crHAjIh6CIP
+%Q#bV4E+XC-LbhPQ@liZ$FF[b%C-XE`$$"QaFkiAT)F[VXf"@`Lb@jDq"r,UE,(m
+"3DPjX[cCIKJ)HqZb,)H2N!$PU(3B#)VU,XXl,XTbFUSX"jA"()%")UK0PTX9@Gi
+-38diD%9RNe@@)k"N4$2-6l)Fdai'bQlT#J2P,R5!Q5c,@HFmmZPiMr`RPdIqIEP
+(2S(1LAiHfEAG)qZA2I)UJX%"e4E,P&dXbfkBGX@bTcr-L')j8!V6$qDeBYQm&HB
+#6)pLHFcXBVPf9,&Fe!&Q5,&F8&JX(ja4,$pGAbbAK"I,f9f+j8H1`d"J9PkaR+l
+!c)3CAL`rAJ*cZ9JqI!EQ)J`fjKE"P--%&mZ(X0#K(6"Bl&"RQ0l&FNiPc'UB0TJ
+q-"#@!`AhjX*)-0L`&iGl&aI,pFYKGX&!mISj-21,jGe3D$F@DNJTP[G%&-XRNE#
+6f($bI4JXHSTJ&KA,cd'4jb$mG"N-"*q'JLqFJZPC,&Gf,jE23[&rKKE,Cm++j6Z
+Ki2%'Q%q+jG[--%MBEIYKS%5j#3BEbJFAbdHELq86dF@bj)+j#405,#Y)T()9"X4
+fl)0C"i10VJ!-L1L#F&Fmc,PL1Dke@,i[V9Jq!Z@1c#f@0r3YPYGd+jEAjX#!`'Z
+K`(S8f"G30K@&Q!VKRk8@bmXKr(XXrRel'""K"3jA`9"C3+C+3$V"p!c)JEL!2#i
+Y)*X"rHC@Q*U!2'BMc2b!R,F2*J1Q"da)3"i0aY'I"q6D!-a0Q-N"H9NYc%UBf3'
+j#-)2!(%!3N`3CKS4N!!,jJCNlfX"qH#DJ2a8DN$1kKq3!"pY#mMT8`+b"8)1lB"
+*#FJ0f3(jq9+B)3(jj0'!I!UG&`B(j%S`h@N+b#S8G4b$Q4Q3!&hVB5"!,iIT$$-
+b)-HY$U!b`Q$$NFL![!%E0[3,b'Yk"q6e5&!U%*rp"$-p)'q&iPZY!IR0&3%ji8a
+!EXk$f3l6*i!R!+!"+k`8ZV"d(4A9dlMp,Mi1FeY`m3Dc3(NY2U+SfXUYQ,4CH&4
+-aqIMa'a0V6A5&4UCGCEbFQKF'4J,[2B8ESVMDlb*+A6BR%2,LP4E+CP2+4Shm"8
+'AlVlmMa-J-iVL,mrP-+20j!!a5YGcbX$*eP-p+JLC%3bCY@@fCi1Z[KTAi`iRmQ
+"6[!QcN3MEKX9Pf0fXepQ+'41J,-*R)A(VkHRkXP8UFD[Sj`eG,K-MGp+clXT[F`
+aXA6kNp*Gf1NFAlARVXF(T8UI8D(Afk%l45ehd91BlCP0UjST0imH,4-cFmq8d"i
+6i6Sr*11bkG#q%-FdY[FM3ec'%1QSCI5lDAIaJ`l0b2ADfrRJX1jLAaBA$fQ*+[$
+G`,4YkdGe[,p@4L9HHMTEG@VPP&k#9LQP(e&Y@C6HV$V,+*hhpLGY09XfAI3-S@A
+E(F&iHK&[Sc+mmlK8*rq!LNkTcL`U`Z39cFpNZb0Bl1dNp1RL$HY%G58jP'HLFFH
+U#KiRqlaK+A4[54`l5IFj@HpY5b&,56DCLr$'9Be2&aZL8V1TV)J1QY4EH96NT5`
+629p+Hdei`@T4m,hm@rbGV3)XUU$KTZJ8H$Y%rXr,j0Z4Nj5*`2Q8#@0T85B9(1-
+hq*3*$kNZNa*@*L@X6,*CQC5L6$ViPNPKGCPF%@@br@CeN8aQ4C)YLX64XNJk#hA
+L[@'GrcFXNMB8LEQ4DV0TA#lZAKfrfm`Q80@#@KH90R`eiTeAd1rj+#S[8JFFTrV
+P9&P%KrP9bQkJJcPd1*@jSm'LRVT%0DfTU+B31%5ehF#NH0cqeY9VRcdH9H!l&)V
+e&*lT!fpEcjqT8kh3+FUFpV-8VrfCA,8LALmTQi$+f9kH-P&mQ#J6h(YF411m2S9
+9qC)Ri58*Nj`dM[hN-Nl1(U'XE#S`%HlE1e6UUUiB$,6YAYXX%[jcY2#IJQcG[2D
+jS1LNq,#j0+aN0H@9d,JLRe@D[GG6U-kCK8Y&J@2#Jd$ib)*E0B0TGle#hM)kN!!
+V0Ke!DIU#mPcKAjGJYPfU0h3Z`0RH$8qXmaIci"HjIDPGE)GHN3hE+@p0GH)MKF+
+G[D'4C-QUT`"h9XK9VdIJ-DeCZEii,@+%BLrabHBL4VLZ@ZSVb@YkUE8Ape"iZG$
+F8U4GS%"*96hYL+TX`FHI1l2TG$EYbDCFI%M+TP,F-DQ`&6"AjE*Lld[M"fdqJeD
+I`A+I`A'I39De)0eC*&&a5CAA$XALKdXh8R&f93lX4efF%'9UV%E9&*`A+#hA`L@
+Y+&ZeZ@K-YVm8FD&9*&PdD`UZ-cC[*J@b(9S&8VXM@$QrMfV09+a@+4@1@d!U"MM
+'$A5iB8B3eqmY0`hAVjIJNfbYEdfS&Hf(+(bc+XkVcXT[)5XrR*j,bdV*Qd9jafP
+C&R1lmiA5)H+eQ&$'4kSa@XBRU'1Q#85AqUXHm#CII!NkZ''S4)ShCrNHl2IA22M
+90"Uh`kH&d`C"LVhH*b8VYmECXkS45,KP3S5VSh(f'*APdU-P`VhZ+D@$Z9483JI
+09+Ek#`2N*3DZrNe$8hd!E6`1d$CY-LBGYZ$meD@IRP6kDErd-bfPRhD&@8V3M'Y
+"Q`Cr"M)TrZFT0-`ChN#9CMTC3YrLJ@aQDXLL*LmeH1R34H5#G)MhT6YVkG!15X@
+SK"TUk@3Y9GBkQ+ZBa939h8r%Ga6@l5QqSV$Zh!*E$6('f3@fSB-C-VV!&Q,jPEC
+dIp',1,'PfZhp5SbqajG`A'GbLEEe'$k,LQSCm3F*aIhql4Vmfm6)LCT`U'LV6jd
+@pDj15pp(KlcUCIL4Xh5JPNS9HUb%5RPA4N,V+,pJG1H,Ve,NVje9GAHqkQbFlp0
+QINij!V$"EAh33'dl6ERTp(3ZQ8VSDA19QRirYlJDN!$'3`lJC6EQdPUpZ#Al8[d
+&HLbRfNRLFBV9M-6FT"qJlLTa9HhVjSZ@#SrbJG,jdA`*QD[c,("qM0Re4MY4&50
+,MP,HDTmFM4eMKV@Jdl!5KBU2Jdi9f!K44mmMDcD0pdE`3,LM[UV'iZ@Pa%9jhJN
+N`T'[%F[0+j%SErQNTk%XFmfU&,QRcfNFMk[f,K0c1["bHEli21C$6P9R0+*e%cH
+"6h(&4jAbP1VFC)MIkjEaAY@iB*%Uh$qAjZ0V3QC)KGV@rG,(EK2PQfMM'8TG36q
+@8@S4rGe%UHYTVCILmNLYTD-QZY0,P59dXKle6e6+SlAL)+k@eYC5kMjkiaJ&9G,
+'@XU[*EFIDYX"Z[U+G[0LmG9Bp2S$&5akD3$jF0'l!&5Sk*d6Aj0&Vi2iP%`JiDc
+YH(mk*4bZ''9L9-j'ZPBB,hS#40m9Aj0CYhq9b%caqCR"Ejm#Cdd[RlVfreGSlIp
+(S6B),AL4c2%e[5VQ%fRjbBVQhBkEZNkVfPIG9-f,@eUmc6$fqq`YCKk"&E-K`K`
+66U08i+p26j!!aCd4LS4EXL5RD+f9q-&fV[m9`6PhE2-lI*Db(-BYm-VeNU)*@Ue
+H2hLA6S![m9j,%E[(Dk8G60@ecp#qqLUJDJFaAqBJCKBG2&H4U,B@h'USlmCc1ZS
+#kX0mE'JrDA+GmdJd+Dja,mZV@bCmRcqIQT3HYq"2cQC6YSQ+cP""#BdZ3F[0)6K
+Q-6Eal5'cDL5UGlVAQ6)f3V98(l5UQ1deiB&UXTAQXUVUaDbF,UT@L[P#id*elG3
+Z9F[+`"4r6%1FrV@fZZaVE99I9A[d+'D,TqMDCNcGbFd"%+jqLp(`i'b9dH6J*qK
+miSF9EhX",cSU*Hi6aT8F%CDRXl#5KBXXp'*KN3MI&l&`PS9'"1hl8"eJbVUBEQP
+DS@SVqU[LlP9Ye@)G0i*LX%pe[V@DikjCfeXpH*6$q9B`MbT8R&Z2F!0hdQk0&Y(
+fjPQFfGqmL1F*[0PHf2lFK8Y!N!"XIc-%r@ejBT&Yj6UZriMPYr9KBEJ)(f@,`iq
+1BE&59IXS3p81@&Al4a#KII5ZE[pS0J4q0"I25GLZD!F!%pZcGI[f5NM&I4[BZ4h
+cRA#MSRCJXQVIIJl-fcYMkrBH3)@VYTdjB(,Z61@4D)MZl)jY1fH*E6X(krE`HR#
+',pHGi3Nmh+0SiEf"R)bR*S3[iZ%""4H8a!-DSLa!49d@+#dU4,I[U)@8(4BKCBG
+,aj8QePf-pFT9Hh)C0%MHKbh*,LlZDdm1eqh*D3)E*Zc,`[iNE$6%*#m@"%J`#4%
+*Ch8Y`38aZDS@9+4V3HNUlLM5JZESpL#NhKj8!ffEXh4lmhjXE6l'Rh2BQQpL#TL
+Y1B@IF0Jflq#((3a`PXe!)q#U%0Si@GFD3E*Ph99l8aB%0*h@Y5DX8VX$ECUEJUH
+T$e#pJBS$cb$`E$6VpSeG41pfp+BM+4YVZ+9@XEhH3@ai(I*'0k#eEG+G'H%FMpc
+3-Tbk280XbEKG4l0FX,e6UY[I13VF1r"MSe(r-cIU@LB!0QqiDXqFJC0-3(8HjUA
+PSb'5Km,+2kVEmq0`NVm0[@E4Zk$EmPNkmRX#0dAJ4U&R"69D3@HYY9khYlV%F+Z
+`Q3*R"kk[k2A8F5e,N!"h%`2k6H8mh'(IP)#c6@lG[ZPPdHZ&hZHL"dAbiX3P,E&
+F4*'1#eTL9d5D!*k)cU)NR4'IX`+0Q)rM%H)J*SXGa"aR"c(EG'G-)bDI+2BB!B!
+a!+BBJ+icCUkS2(Ch!&KhZQjh!h5GlM9qE!E!fQd44eedTlZI`'VZkH"+%FKJh4j
+V"RZXKE(M[L'A29BN0MC#S12pD!&1XCm,c'Yq6$!fTjPdHeU$k"e(E`GidRD*S90
+hTXd5DQTT3h6l&U(9&QLej3L!DNZi52q@-"eAYPLhYqlF-TRMPRjYb`Jam4DZ#p$
+j)qB-MX-605iX"deYEa-,[85iZ%f%EfX&mEi9hJHIaP3Y-&pmY86RA6'[9"GICaB
+kY"ZieF1$)`kI8aJXTTVU0UdEPadf6&c'9[Xkh@E[,d6CK%#l6C5[$EA"0J3p*fV
+Yq4)H$Yh1fh9E[("bQ0USfd)V46HdbpI1aml`1T!!-rYchID)'Gj*beUMfl)kmcU
+(pQJ2A8[(cG1P'e9RlJ`q$hb(YX'j3YZF%Ph,@Bj"Ip@jem-A0LMDlU1kE6HV,,Y
+lS$Y#e,-'H+Z$CDUp`3eY'Z$A[AJ"ECL-c[ZUI8mjk,eRQl!hKHd%TMhYeR(-&M9
+PU$EC$6)jjABm#Xm*m(63EClq`'JHh#pdi(C9+`C&$JKkPHUf3$m"DB(Aq%,`QP0
+eTrN#am09R1BHr&#YSSe"VP!%ce1,ZHc,d(`TZUVDLPJe,F*%cL,N*39iF-SbT1[
+J$(63Y(JDGa[9hP5eNR!mMJV)dI!9f9d%QE1Rm%-1fb2(aH!40pm0JZAK89E3C24
+'6&i3VTDR@cLil1Nc!5hTc(FrAJ+-pMJq3q$"+XNS$NYIA6Ym"VZ@BkD#J!(Ri4R
+F+&6XZ88J3biQMqHLYSmqKPN,`8,63eYeqb%"RiFZ##ZUcU(HZLe(P+-YCl8SqT`
+f(1Ad`D)j-aPD9$rlhPbJpdT!lpdKd([Eq'D(YRHaEUYI,K$eZi6mqRkkXhi1Uk(
+eJ,Dm0-b+k#*F`@lKK(BM-mk$+fc)j2-FYSB8!+CY6`3+f,CR1&$D2P6UI8jHPk9
+Sq`IVYT0Y3[,*pcPDB5H$GGXT"TqR40DU23HAr9`mj*e@EFm*2HfRiD0XTp''FQL
+R,qVDk8'U*8qe[A"+E(U"DIG#6e8EJfbh%M9V$(c3@Fc#(30Ir%r8X$&p91e-'$V
+R91h1#qLJe)ihk,EMc,mHRk(EMip%%QicklEEQ"khLEa%+cITY[*3J5M[cK#$GHe
+2MGL2#RZd@D#1iP1UHD4U1cCF!2+*E0efiT3Sa"0GGCXN-Ma0DN4A!,a0kLb1T)'
+kTU**DZkYfT5YJN@jUYXF,1pb"9LS&fJAfLGQ3,!,MYYe6T5pD`TcL#k4GHPi")B
+C8icecp(CT6VM@RPiUH+m,if(ip%G4iT%e)kJ4-`V91H'[M`FCECKN!"Z@b-FM,B
+'lCbe)LZhV9h(JPXXZ4DY)60D5H[4CM(M(VS[,ZUf,eJl+*@e+9+KdMK8N!$2-,&
+p('VRmRCSl4aPVCpQ&YS,KrApI+(XLQaq##UXbPl(+m(H4a(IR-FTUXe)iC%1,XI
+Cj*j`)lC!R0Jk6Q300R1K!"Cc+a[8#)+1fBLDLl)E-ephjS@)KT)f1Je2K8-@'!J
+6G8ph,P[*Sq"aPXh'TlXb2JaYU!1eI#&3"fTdTfN%3aA-C5M[DlTf%#r$!8c&,i@
+(#D"QP@'UF`#IQTp#SSUGUTD0jBUhUXj(2Z!,83'c3!X2j[BrLZGeH1"adkHJdaP
+2"`)!HD$G)E5@$U&CjmN"h'F,[pL!CUIFUMVhR@85RNFE6)Cj(LkN%#lL*0a))5$
+eP%"Jd[J,!+R+Qq,Y5,AGD4)5lZb!er9ieARE2TBKhZEfamQXfT8MIcGb!Ah[SRl
+DITmKr1maZ!!$jA@L4K(IlG3i!"KZ#Ii*cbI!cF&KUXea6&4&ad`4A1Y&GZ'DSY[
+dND)EYeUh(@(Zq%JNJ)+eDpIR#X4kY$'qaJfdMDTYAED!QR@iKASP`1)8E[99YG3
+i"kji&MDlqpEd`qrbM"R5bJUcI-D-'aeVDQS'@81XeS&1je5VGBL`k,mKqX(cB1m
+GH+-96$9@Dc"$$Vpa2Y4U23G%I,!e'-L3!2R@mAmK0Cp1F2b0rk5'R8D'##',3PJ
+-XBDdBlfPeBK[&YI82&$$9"J#&$5lIkl6'H*d$UcJ'$LPj4JElUi4SZqTUER(EVF
+2U9NSJN!Ym2FBilf,lHa[F-hp6Q[0%2m5JiC#`R"RF!A6hGpZG%,!h68MX(e`63A
+krT(1i*U"6UZ6#AhB+@J98M-Yl*c914F5RIB4M#ah["CkHEJB9b&5r([mDLjJqrc
+,I#Hf$445S2c$!Rd2&!6LrZr%k#&d(kMHZ9$d[UNBcUhS$(TB-%9@,9G"V-&h,,&
+H@(l68988+2Ad(ZGlK6hCmBj18Z-!kB+`jk6AAVlRKd[aPbl&5hVmTHjhX,rh`m,
+#"Jbp(*Ei4qQG+lIIdr(k`%'IXb#j1mk4GSlXH-r)BF1NV5`NRqrD*5bXmp$Jb`1
+ZA4rBi9EEe@khHRHpF[f6X$#THFS28kC)b6#K$dp"q"f#G#(-kV`Ul84i-K42LYh
+fGX4GrdIr[EeAJ(00-!2hhrkjJYbIh[$@#1b096Hk*refb'[a(`b+[p%TrMf%UcH
+IX(jX[A(9DEha`lHR4PVRhPJ&i,MaSG0kmchl,2YNqc`VLMM*DPeJYFkarYVqkH@
+8Fdk8Aejjl%0A*18"bGAc`b&h$lPEq[!h&Cfr*clc5[#JrSPAm9-p9kj,NhX1NP+
+P'T62@P&)IadL25X&59ZlR*HZL6,i9PLEAGTLIpC1rVrE*+i@U6Q%fEcaSD(2KSC
+fHq,FbqKfAIRA!BRA*BH`kd+Pe&"rq$#d9fM2a1Z[![e@k#H*Rb4+6h`TVIK"$8M
+6T#6)'bGPfX+)e00Y9pU%I!!!("&"4%05!`!Zm3p9$@9&%3!aCHj$[fe[PMPI`XX
+-qBD3!*1mK$R(6,,KN64(*5jC%ZFbNV&%#GambG4N%mQ50FBdjAT`-6'%D#''&Lb
+A3`1PTr(j$#a3Uak"!CE$&5mhmRbXpAJj)K5NL1@fA+rBe(hqIZqlC!Q@FZrTIIi
+"'kBRj8%3"%!3!+)"&qIa%Cd1,cjFb&a3L@5%!ElqCp-,,Fl'lKBqfHd02Nk9r(U
+Ur'*miC%lRHrprB[e%)P$@TXDHABkE&PSF[T8dqPb*"di"TiicB48I+iIR@HMMh(
+aBjKB93M2%[YD&%+(lQ-&cHLm3r[`85eq*-32[km0lM(4c5-jJ)*qFMJjq%jA&cF
+F*4FN+bM0S%T)T*`ih1X`$PPq&DjiQEGH1a,kli*3!6QT4Qrji*ReU9CZH5F3@VX
+h4+j$hAGlHadCeir[$E6j9MU9MAYU,I1j[r[(p,Ia3[H2cqrRfrZFIhCSJe2pj*i
+V)F02!p'F3&2CP"9r999Naq@Ah,dH02HMCYQ"ld&@X1(!hGA1#ZZSdDT`1BYHNk'
+`AfQ53F&N'9kYm@UmBN9q[$il%-VP[G[MJLRS1D-%KpVdLHe@LPeKE42$`ib--J*
+(r3iiE+'5p6[#0Y9I[f1)UkEMHhba3%cGd+5%fheQ8hlFfrL4(1%*6d)@q'FHS5N
+5eE#+@&Njr`a&SHcGTNM[AXpUGB15TLBDXSS9'0I'G'MZjK%K*C8*VIbcNE"&65"
+TCG8'NEb,U5E$9M+A"#16QQ!J&8iG*-cmfKZMR0pYHJ-L"DEbZP8CRcIkc1%HH1Z
+$b3TU1!DR[&bVQq@!-LFJEV9i0A&jqCGpX8PTq2piiC5HGF@6A6KRpCAlVZ5@V5k
+!QebS$qrS(jX98XIEiZf'j!kkeh+emeNI1X,bH#STp$RrT29DT'8prCjT60m+jrF
+#E28jY3eTV"iNX6VVAr#Ce3hU&C2GNr$fKXhDa1R0A%$45`P)keBH'p&FGNc,DMX
+5I4TVhH@pe8U8LPrfb8MFYDYl8a&pm-&Pa*`c")Sm0%NmJUmLkN@b,baH'Ui%2Vr
+idNKa@RfT2MQ8h`BRU!TQ`X4E-P2"V,ElV-KU@Sq9Rl&5UM+TT-k@S6&!F'5N4jd
+pmNd1(&G)M5'efZZ)Md8pTS)$5`1K03@pHeIpHVK#66d[Kaa%d$Q(4e!VSKBeGA9
+*eD3`8K%9`KA@lGm@&&f+"M$B9ccih)VR&6DSl0b+Uj95LpGSGHEr9GEUA@p#rhV
+a-@a2aFDIHYYm9QqRlr"p&e46rF1cmT'LU8K'Y*'@N@3&%JJCA%Bae$+#9-!AUEB
+AB6BDS36e!B8fSZ6LD!*@d-9c1DkYd,8$hi3V!$aK*$8F8i1"0QmTp'8T!P2pFip
+m#$)5K#5qYN)j%(RJed-9UYp-L@S1F5A4`")U%-N6j+D68Q"UCI0H8N69IepQFjS
+"190YRQU[96AEEdIH1r,8X-qN,SLhKR[$HbqhFk46eIA9JJ48Uq-b+94RD85DCSN
+"+GP!b!1Lh[Df5HN)3m93fk`X6ibj-(M86am#$k!MP")1KR6$"*HlZ*K5S(6%LVe
+'B4c*"*C!%)K43',m1`0MAp[bI$,)5#B8'X"%R3Q"+Bpheb'Cji54'$$aR[jiNlU
+rerbF&JQQmQHG)jNQQmFI"R$bJQefhL3Dr"`ZP'CLqKVTr8C+69S+)rIfeCN`C#I
+E6(Hr%Y([*X4"#3a*a*Y-!%VFN!"'3BS&`rrD9qIZ,akL+pr4$h%&L6fH`%meA8S
+e1KYKp'd`#NJNaZ&qKR(C4Y9IJ4cHr4)Qi&hD5GTF$2Gb*$YjX2[(!-C@E'6VMRj
+D6!H-C11@1KbY"DZbiL08V8QeJI98DR$,EeBBYaBLV65iT@k&FF[&P5jFTmI@q%%
+D$[EKB2+imi-d1QK`EUPT3)Hpd,EP&AA`Jl66U0!'La&%QC!!%'6i(&+$1hdchTY
+j+'`'ZQZf,H%@*+3#[#mD#eYK1)j4@UJfTSr`,!eSlYp!S0TB(dB5Uhk5&-jRR9M
+)KF@p*aCbrk0JQ4TXZ@4al4pXZG(bbG11P'"a2Hd`(jR[KcViYBNcMV("PMf@reJ
+rf0*XHDIZME%+bhr8[6%FA2X%r4eliXk#9@q-CkAmc9fUp5Z%Bq#e!8`VQcYBKCq
+4-E[(V&S""Xh'qX%CPYiZVcG4ZJLT,HHI&!JqJeYliek[PG+kf&3j1HMDe6E%%qH
+(f$CA8`)4JQ(jeNje*ZVeDF5&%9USfT%C5i"pUD8Ere@Gm9R)E*4@1j24f4TA8i2
+19QaECVbaflQaq43U0eirHX['pqVr2hY9Li"F5mQl%e+J!d1eT(#qSXpjfhb6MA9
+RY5@9brqia-5CNBjK35E3Y`H)V)QEmi+Rl"[A,1cDH1a8"bBjTPZld,+aQDE4cRN
+U#P8++)-Ecq3UVJ)),A$ELZaUUl$c@qh4EIUT2phEP#4J3(`EMZMZeVBMh&34*lF
+B9H69mS&q$'kSLTC8l)DLQ!Dhh)C!QVP@S$'B0&X+jbJBi*!!M6biYG$GRfj*i5J
+C`q%Rf#4b&!rV2LQFAQ`E%e+95*ec$4aYAb,Kq5pG''jmraPLdqIFjkBKKJ)ZSA5
+IT5*0M24i&dMT4[2L5AC"@ETJP!Ih5mXJ,T``mDPqN!!@`(88Neqk8[GC1!%h64N
+Z!aE"CQDDDQN$UIV8I0jGHK1Mdh4)DJk!V$KP+hhFdfmJ9")5,B8k(3Q+3LH@[aH
+f*"-Y*a%B8%$EJ+[-3T*I4NAq4qJSYY`@cB%4fDr6NE1$',4%NHiN4c`D,c-1cie
+H*0C9`@+cZ,$&+@TfP3q2Fc*8%V"jL0,"Ihb'JD%kANfX#45Rl-l@D"0$5RZ9km#
+e$j!!D!!5FR1qc3cjmPe[6rAV*@%Z8TG,M[*'G,N'`q'G8IGldM-QBEi[LZBEJ85
+ZVh8A$H%G66``"025JFicf`66%PrD&NNZB'6#a)$iLrVE"A3dQB6i'%#!iq6qbD+
+60l2Y1iLIA9VHmJ)-UNSX31JZZ'-2JX@h99K)CUZ1Q5d4T3pQNFRVrPTA0hVXB"D
+%[F82iLUkTlZcG8p"FE+HUN3cM%JH3qM"Tq,eBRTQ-3bck2Fd03CdIi3`()[lmE*
+iT!5UBFScqSB54KCSVpp-%,k!QVaFUP%"8&UdXLJdFrr+K"Yd0Cpk6Ek1J5[,IM8
+C9M3@4f1C*ImKfd6%e*9G4S*R#J"HJC!!LdNr,5SkmrU&Remk%+#P6BFYDBYYia"
+)MDfQ,Sq5@LJYl89A1GZ9lDHP5cFYqh!bjL[c2Zl,MclkmdXHBD!QfZ26K&'KGJj
+NMR3mrUNkCj9ME5Ep,FTXIZeZKpTjr0*)E&A"fYISEp&Vef6HAI#P)d2"YP#UDbc
+F19$MlSp@*bXX0k2VAUiE#Lb!XklMq#@Ym![A8Uj,k3YE+4)ZFGeHQc(@[EKlFDm
+YSm5NRYmIimP"jhS`fG5hI%k1(SJS%1"1U'IS&lGX2ZLKcBG+3,K'PGAT4!H[+10
+F-N9m&`NZmj!!H"@hf3mK"d,6#4kbmdU%4RebIVp#%jd!dfaadR%8PRBERH&ZTc0
+JkQ)SeUI9[$2AadG[F9kG6-9!AR"8'MDR9DUF%+J54*b`c,H"a$NK1TK)6FJiM*d
+A*-Da4@!h(4d`GF6$a8cmbfRJ#(lXppSiL@-frY3`'T@UhU+(5NrJcb,#Y)PQqhQ
+4D(r192p#J01T!U85HNEpGZUiD5Je[U%#ql`Sj(%Bj5CR1-1@`P@CBrBY38TZUEY
+D(!$*3TXci-BJLB(4&4Kd"UJ*rER15`Pr!5R6GA*Sc#p[i(*f,DSU*YE*20@ZBL'
+3!+HH'2`l'%4ITDTF@DS5M&afKQRjZK`CB[epQ@'MFrJk9h3)CJA6aNN`%4!S%d$
+@cA9I*SJE2Ze#da*-9MQ)45m4CGATiMG1D15Z)*mF9L2@I#cdIC-@ih)qf[JkSbB
+CJH%GH-6T9!IkM6cdAKiRF-!Cp@F*C8+E[GQkI@!`0TNi)IJlG"%SB[hh#PM%f$0
+Y!&P%ad#3!#J"33*J'FBLQdH@#"hSMr*3Uf(!)@R!jb8$2RH'r4emp(Y&hK"0P-@
+fNJ)Y"!`EIjj2Tq63JaYd"dXfe$q4`SCZd0r3hp''AVh5$I9M)mIAjf*6jrcR0K@
+L5&HmF%cSh3"bbSm%eeIHPIfpZRTUJcGQ[qApTe*IeA#,LiLlBL-bjT9F,q@hJZ%
+`Aj'IVUL9$IN@&b9hGEV&MQK#1[4'&MY5&4EA#$ZSF``&Ca9N#0ZbM'1UB#A4h$F
+#K"ba(&i4idd'K&4+)H3`e$+0(B3+H@q(jj-S,hm9320Gpki2Vhr-6A9XbLcl,ac
+Y`T&0A`3p"4(LrIVeJqrAbk193XCdDP50%8#lYG8#IN*IRG2TUVPeP)k0Ur6G406
+Fe6*MR+31U4VTc9H2m%+HaeqQ!+KUkG"RJf%hRdQEeLL9Xed8j2@P)plD@'R*RiM
+)A6UG4bK%X&R+VP8E-JZ$pf`ffG0EdC9$*%RkBC!!`J2pB#rMFaBCVS%D#Q0"Nr+
+#FA-T*j)I$MadLMQIcbdB[H9p9aRLkfDr2HmelHHZ!J@'GlCV+(6[+fFFqP8"rlf
+rAP1U+PaaEmheT4H&2[iL*G98XN!0"GS-,MEG,S!VC3Kd3UT,jNTfi18J!R#8Zia
+jR,UDjJYHIMr#6Q4qapIm'h0S8iGX9lJ4,PTqSlU!QYHIkh`F6[KGhJ93PFhDfj[
+KTRc3aJ*Y)[*khLD(iV9-j0[PXpeaMLV'XDP@ir[epqHIip'%G$LqAUD2FL3`bY'
+eHD"3DA&IbKk)S4XC([[U&5%1J6UUT-6"K!TI1Di@aRPd+'8IBXXHr-NV)Ge"%ej
+34!K89CGRKmEjUL[&dhJHC3HihMM%(AQIIV1`N!!$6@[c'+T!&@`q'm6[0+LA![A
+F,kTRq3p8ch+%$MP,9"1$MA0*$5A!$A-XAhm#aJGG61T)k+TG#U'83%')E6+p+T!
+!L*bA1KAbprd6IJi%dI*@a$G0mRTV&i(lMM5CQ[2Ap1SAjl)#P)89YiQ'5Nj&V(C
++%0f49XX0bdZE+5c2I,Rb%TEhl+@M"pM4LibXhJjX8TNq%kR5XkKNDY2,jfP`EQ*
+0!3eIa)Er[imlA&BUV"c(N6XFYC`5&8hVcGb5CVA6%LJC2jLAahdQVab0IGr13`-
+Aa+-didh*a(P5I5D)r[-B08a++55D`hRXb[GPGYcbI[0eV[-4"8EEiS$BSC%%Y2)
+(h$9@ZfcRPdQeLql8Gm+)!CR9ASBHB61))p&@[KpNP(fAiM!%GZCD5M-ZBXNL!bQ
+6)LNX[$)THp2K8%dL+3@RR*V1j4'cU5$ZekcZ,I$X8Xe`bHh1QTNjN!#Zr5hf25Q
+-B$Q5-GHU)4D5kSLRY$EApRLVp[aF"e$Y@QrSRLZCl$-Xh&16jSJ+KU14d$f[EAH
+%Jc5*ZPfGl@hVfre)4q(i41I-KU+FISrRC&(1c%blqi"l4`C,6*BE6#J%@EQl!BN
+5Z%[*fGja'qGP19!$e@H&!im(bjCp@)4(6061dqmZqh3T$`UQV9a'fM+QQSprk)h
+j!Paqi),k@60FaclE%4k)l0LV4RBiLYEjr*[fVVS`(&%VlmZFp9f-&l@Uf!i`FRN
+YXeTiE&,`QD2+8-5D&48#F-qIfhYJcb-IBP+rD3XA2!*3mdR9H[S'*%EN&r$!aZ,
+(eB882%Z`J9ZH42e-U1*Rc9K1ee!GC1"m[6dAU!MhP`$Rpc,1QrBJ4KrGJTZj@#$
+`LjANJR2haa[Ai'0jfY*UK0QehY-*F,CQfD,A)hh@b&*X$XEFIGSP%J)dd#VAZA"
+a`F-2RM'JR5-P`E[pZHc*MX)$4GSFC)+Y5![R6NU3!2rUrXGH,$QCRHe**c6&KXA
+#mlRm,4*1(NR3ee!J-B981l`55r[Zh0bLl*c4!c55Q0Qr@LH9CZF8j4l05Fme"(i
+VNTPI3S'mFARmX13BGA!N!TG`a8FJ58K!ZAEF"#HL*iC(@A3!p2@di,+E+l5jmIG
+30BXCGS,eBCLM*jYYU90F-NL,BC*5H%e!fVG`0aq!aCN2AA1MN[i+-H0LRSA%!TK
+&XlA9l--M9PbYeE#2RH*(RlLJAD`BdcDbMh&a`,#i`#Gq6%r4U`RNS@RiYmaFZEQ
+!(IMC94+iL*a5#)3`pDaKk`K,B1`V+Y5$i99"L+d38NNHFj9,&rfcBZ&pZr&bd'X
+f+maQ"4-VQ&LKNa8k8IL$0-pMkAP&2HRYlN+fkbF0@b1PL`K"N4LDcbI8hR%&bD'
+R`qBrh-STR$@#0M(!(9NEpdiJX$l2lpZ`i9EH&'!#V@Y[h2pkc9NV9eqrd'YICBE
+4#Q8mS'ecCFA$H8TK*9YFbaC(X&Ki[FCAKk9GUcVK#)pNc&0C)R!rM`FQpUXmVl+
+%VI*QcHXe%(@B8Y5DT[T&pN,'RHU'PhT!U0QG1E)"D,pIcH"##E*rAlUY1ehEQh2
+d`-hYZ8H043bZkh[QjkErb*kHR30iV`cR'CVkdS'1556iJ+$)"h#C+E9RCbLI%TV
+DbQf1l)3Dq4Xc&Y&U0I+Q3bU-cZ0Uf)*YDV+iGMML'[bd`Ua(,!k,LfhilK5F"@T
+-+UJDk50m-jqilYf5B3Tq'XRC8$,)@R@)Bk6%GZimQV&l*AI,B&Z,4d(%8%`SRZ`
+PaC-p2S15e6lPKH--`U1SF16qmkbKiX224kmC,aZ,5!V+G3C&Lf`Z9V4)245Y$kp
+AZ#YB&V`a&!Zp'VS8fKGm+&,2rXBLCV`bI6+jhP6l#+k*K`Y#PTr%1"kVmIFe5#U
+%jML2[%V,B02YF$Vk*I,qj8Z6P%CVA5Q$4&r$9,qSG$c5+Nd$*J*M%M)`)4C*VYU
+V6KQD0i5N)Ca4%hqCad-"6$X)TVTb(jc6q+a'Bpk,`'L%2*!!q%6-K'[qiM,PTfY
+q2jHQ`Z-`(Ad0[IP6rGR(402!3lmCNKN*lISNH'dPP59Amr'5bS5K-P"F@9dbQ+[
+#5+4iHPc(qjBND(abGrbUB!$iE!!H"9FQp$DJfJ#1i*SI"X!I1,5HE9eST9Xhp"E
+%91ZaP$C6[%5`MlD'EFFL'PjUX1dd`YDm&V9Gh,*UhHhBXQTmDR3hBF[S!B5EU$P
+D#QL*P3*0-Z5FhqQ62alLN!$6J+r33p9%P3Z2r#"'!`D8RErX'*+pH@,a94@)H(S
+4$d&FLDPG*JJIm4(9lR8[Za8ZdGMCq8L*3434Vd$-BJ3beY9--eC$-*K$T6XF5C&
+6P@)AbmY$hHc#rpa9e8cZb2i4K!*Q+6q1NA6RFB1)TM!4MES0*)aK%-1GF%+S6)b
+"f#@CPSF2LXjN5K)U%%ccTFjaQm1iUGLpkdK+a-`q16Zl9eYdi$R2F`H1'RT$##I
+M4B8c*r82*#,fd+1aj1U%m&!ff#qTkX2ef+MYc+'pL#T'9TXF%+4%ec&9RGe2*-&
+T$VQfV%G[NDhM'-,R@AGMrAB8SZCK@cM6Dm,@9q0DHqMJK5N8$p,30fp+bSc&F$&
+6#K*Ra5qP$6!mKRYPCQChGP%KVT!!8c6*THkFa'Rc2,k2bqCjL$(hpTdf'(CcHRE
+FY0ZSAFPqj*8)8mb`qm33Hb6K)K,564pK(FSL'2dYh(,jCYl&"Ec-2)D(3FZJIN!
+IG3K0$5LI0#6F"0,,5VEL-BN)bp(XbBbL(598IbcFq'%EYCSD,#6m0IdE*R3FCS&
+-B3I!G3DSBK1lS+peCb$dLDJ,8Dm,MQDN&h4R$)p+dKmU&VNchCN`!e[j"$ek5J0
+DhaY(#Ne2++apd@Eda4X&'dmBTe'3!100[ECi'$qKD2AKZ65pf08T"LBIaBK*G$N
+5R[Ym2Ip!a`$!#EcVFLqh3(R-PcZj1bVJdef9U-%PI!)+mF1)b3!"HA%2)bBEKDP
+i!S4-iXI+e'8e6FR-4S"hk5Z0aaSGNbimN!$TXb39``)*A6dMbF--K!aK`cddT-V
+P0&8Zah9,b!fEP)X(6Kq"3$laMd8miG[+,@HA%-,J"B5"X0SP+cc!5'P91`RXCp(
+!`)'&(LM3VFCMc44mJ`SBjY9d+%f2#pd0*20EY%!bLE`QGlqKf@N3H4Nb5AL@HeA
+di[bCFYjMq6ZH91'@[q[S%F%[!-j*[MqCcRZi$Dm"hSAA&,IJ&HAQj1Fde@AKMCQ
+C(1)NU8Sb3BM(M+F'T$,6+6@N(aIE,dGc$X`Rp1eLJMB'3$'"IMaHKPH-dRe-TCm
+Ik-IQFi3KP5%prq+`VDmCDPf8$G8i3$biBF*NK"kfpi6b"$JKPd'!r"5ZepK![kI
+94+!i!MF02VbIS$R`@kVSDiKZ8Nf'j[eV-c2C2`)ma)E`2"DB)6AIL9QcD)cQ&4X
+MFGKN"N&40"$5!*!!IBb1DiMT8C%VBfYBi"eE1F-DBRK8j%K$lUC8P!RUUpR(c'5
+j[TR8p)8cI3BcHAGT-pQENJbYCP1aQ3c25+'![aHhDQETdFQCSaNCk3GQC[l[C-j
+NZhJ0GZ9CY26iC-jm!kU8AN+),LhC[G)PUR'2YDq",8&Mb[KFpY'FSUXXf5NYUGZ
+YCqm-DcKc@MKEY#m"-EL!Pm"M#bdY@M,LIEXAcmcN&X@I1`RZ-r'-p+9(-fE5Pbi
+"%bkP(G'3!+L&Qd80*(PBlHKZ3(LE6#PGPV$E(EE,CGcY@@qp)"rQGNq)IH`82r)
+m6DUp58(3S"[T8835&3m%'cbZ4Bd%jTKl+BjrH)(3-A*+Y2ab36`QTQTh+jS9(hR
+@bDhm*FrYH6cDT%Cb%j*`T'Qe&&MHZFDKEEl'i3[LkE+A2+[8$MAI-!8EY%YkQ65
+H%TBqXr9#Y-9D)j+F`&!L("@0&04S,el+VT*!j8jT!CEZ,$jQbpdXl@[e0'il(0m
+F98b4iLY+,((`9m13!$mBd)ATf``&Y"r0,4)4(ZLTh8QKXJMV3L!'K6+'jJld)h"
+fc"$qC8!l0Q$313DRHBYqN!#P@,QebU*[Ue4m@UALNU'#a!Xp4QqA",%iR@-Xq%6
+"Mia3`C*&3HTk0G'53aD5@-aL&ahVTlIaX&r%9C!!1qHZ%X+e%EMejC`jGfpmfm'
+@&"5l'-R`@CC3Z[Lk%hG3`&bS'ih4JIl5!ErId&'`9,#VP`HVKVZb"L3%$B6@P-'
+e&-DrEP&p(8"P[lI$LiTCq3G#hJMqT3A#,T*)!22h@UN,8q)#a!i9J6f4rCb&L,4
+lj)I5rM(hXTf(dD'UU)bK8M$PCjp,qDX%ETD)PjK@!k2DD+)3bA$Bh2&A&+cCj5B
+Vh2%DK%1DTc,Y0fJ2Uhpjme-diXa6&lCYiH%$JQmK$bH*V!8X44*SjDBd4TE'91&
+*31a@4lSS&2!XrP@'f[PNUB"&3mJ!%B#`!D@3!$GU6!%HM#m&bJEM8bL%iUe!f8D
+!0C5NU4EL-BlP0`cFBH-4Gcm@4$b%hL&2#X'hL3#1"frQB9k'CUHDV%#S3TNP"af
+N,'h5$8qL1`dA"SP!45J91TQ3!))Kb@@)KFH!CJJ+1"MUAX)EfDH'[ET9%`Pbd[E
+#+(aMhYVKHk*Z021G3hA[P)m@2V([GlE4QVURF4CcIh$)mmlS[Z2GfirE2N60a'-
+IAE69M#CX,9QMYcjI1rVNRqlpF0@IrhEAQBXA,ajkrml4ZjFpHZbl6FmmRVrmpcD
+lEH1KZMffU`mYYc8FUV0e003mrGd[0lFmGEcKMCpHf3S!!%GU384$8J-!HZ!393e
+N9J%3-6AZ4IqrEFia9aNbl'+XrM+@C4'IGk'*YF6JQ#,,X'UQTBCbB+@`@D+b3ca
+H$ap[ZS%mEi$Q8-**kEQjr4+DNkT8*Fpl+&p,FJc3K&)1ek3d!8S6bL%TTB4b#5@
+'LR[rrRkr2Dq'p2Cl2mrrpr-!'kfR+#H#)!L!3$62PiT(G6Uma18Y6JE3(lq!c&@
+ba"F4B%P@2Ke-'%BJ+T@Naj+5rlqMq&3P29#fDHEeQ3qPY0,qNRh55@Qrc1a4'&P
+k8a@8-AA-X$QiA9If354Kq(VkdANK5G-9XdTDU'Md'Ej!($mK+$0--bq!"5D$`f*
+@"V6J!K$+pCcj5a4@CSpd5*k-NmKiMTU'!T'F1U('SXbL9kmqH8+%6'HKY1Q9LN9
+FXJImN@)J#G8)d!NfIkG)lKLEbX1N6#-L[$VQ6q`h*Rir2@!eq3-1$'LAVSM3r')
+4ZKj+l!mfhe'N24RX@1!Vh),'-41'$GLI56GF&I(XbQIR59dZ,'&CVbcVX9a%bhS
+A,SC)b$@%TRT9"I1bAS3`B82Y#GhLCp)G(5mA-8QIhC(U!P29irUakmG+FfP3aeP
+LG'4fThcBS03952*aB0QFXMAaJI24e,RfUr&&d#'eqj!!8+ecKIU6b53cTfdX0+P
+HD'SVAGV#5TI*$&(Q6@E!B[#TN5jmI[)%@-Q9Kl#TAJ5Q,9F-PGP5%Q!aj%aD3e&
+%Z#SVXihe)ae-F#A41Pe$0Y)iVqK1QThSdQZSM`0*,29Kd&iDY0Pb8*Q9+GUDaR0
+$)MRi(e,A%qE+$&SFQV#S0H8'J*,!K[1$P@!"MNfH$'aU'1+*#C&U[iZh@&Yj#+,
+,@4-Z%0!he9EbYRT+d[P#@-`1(*J!HVhrpm("BVXj1#JE'Ie06+L5G%c2Gq%Lc1"
+e"J(`'SR0UFE"jM3,FDUS4eKZKCQr#&jkA"$&($1,lFaqE6qJeE`8LQGr$@aX%ri
+l4)Y))*mb+PbQZKqBBSq1#+-'dIfa1N46L!l%*%4E%IeLV!h4)85cBhC%NiLQad)
+M3*!!PKGcJiS$5!)-MUdJP#P30f*0&9DD%[["J1X$DV0+3r0I[4j+Q3jYmbb3!"G
+M@jNPRrTIK#D5lS&D@@e)L"qU[fBDG$B0HQ2%#[+EP#'Mrf1Em-FF19G&Fd`rVeJ
+NBrk8b@Lh11!"U5%3Gar51S'Kc9PpZI%4#"(#MpH3!%Kq$aPrX*EfCql0h!ZKTdd
+c,VC,kjqEUL[6V!pI%@e!hIkaFD(ld-a4V5qarcY&KlCKSR`T[DY&1Ab4*HS,ETe
+m0*,*ELT@pB'fTMT9hh4&I6qlm[P`5Q5Q"ra2pUPk0$C6Br1,'T[41%503bpU(*,
+UC""a#$X"5U`P9DHH#PLE2-l*%APbMhV+I89G'LB3-dVSJ9,5%'P'83d9j1VF0S%
+#FLJ@0k%KN!"%iCeQ+$,'TA'G,[pjT`)#3-M&1l1kX6P$JFML5(p%Q*&i-fb6r+c
+b"3[1ENa+,fXrFMNb6TY13pMd4&I1mF@f4N+lFL9r4Li#9V2dFXP(VT[bCfajd$2
+0*i8`RCUiUr`C@ajaUN$5,%N,`(%BkMfI%X2YV2f+k"+Kc(3`elpM&*k,M!)j)$k
+@"dji*lm%&"i1)2c(S1Srq%X4kY['#*DAY,iCMFNVSPdN!NP4$)k+810YUqdH)38
+FH$d&9@pq[XH1p31GQ'#f6AJU%-IVi4Kh!dbTm5#,#+Y6+VEDN[5)pTL9PUi)P4E
+M[%L(5$b)#q6QT!"LP3chSF$)#CpPiXqr6d4CB*%(pNfF1X`XY2"jCH+`Hk)C%c9
+A4)*9-UYdM"T@RT@E*$3j9Pmb3dACaJ[#4`Y',-5$CQqa'NqZaXAL`54rJ#5U2$N
+Sf4ENb3kDc+45mHRRcbI[%aG929jMDM0H0p3K[!E80V`be4Bi9X69GL$EIm6#8I8
+8AL9U0Pj'9I[BIC!!DmlKeD11ia96Mq*eA6AMC9,(-+PA(F8VT6EL9DGHa'!G+U[
+1HbMCVPi+JqPFV,VSmck$f@@fI9D$lHcm+,4&'hpRm&j9$I64a&'M%+9d-6l)43I
+eUKIP#bM(M8&%5"R-KU,(c(6"L'V'8Tfbj-*5MGUcQlI5#q*VS%I8l6DVKc&89XK
+S+JiC!fCm(!pGjmf&#KbV3d+hDVFj9%d(Y!GDL24*$&%B+M6'GqH*8+J3R`@Kqi,
+"r0`RcD&KQ@K!#0N"Jied-I88*i`mR(T1'Dj954`Hm$le,r+!kPr`q5[e'4i`[cK
+dr8QcH[c*(XmP$$2X'F%VkUPR9D!083`UB[P3RS#bqNqZ+YhdaPSZUZA!9SCXU'K
+a19j"306GHh#&E[2-m"JMR,M'Ba6*9Y1CQ&8Ze[pFh-K&HMbi%!eqL-*PZK`%@rf
+'+Y%-XISGkVaQ6-4%HaA%kQd!mehbX,@(G5ZBZ4NAZZ@[X"Tl#B[KZ-V'#-4[b3r
+KIIRmNlIdNZGQ,X5RjANU$rC*#)HXd-f"Xm1+b2kAYiUSY2rJGK'Y5rlM[P6(4K5
+Gq'R'%-YRRcb-$TRl-[H0V4iZ-rAK#MAS0NIDElrjhrJAL)m!ME5(69G%4b!j0Ti
+2YjKf2B'1(k+V&6m1r0Ma`mh2'd9m+iVQYS!,#,)0`96$`G3kMcq"2+TdLjS%JVJ
+'S[`9%Eq8RqpY%N%0-QKkr$4$F8#)f,S,`6RkbRh)bXpch8G)3E)09XfIra1$c8D
+cK!cX2"k8V[PRA,0AlJBfbU,K1$N)r-Nk5rJ")Ke!P[H*T"V(+`k8LCF)!H$d&*L
+Ee4DmKLLSYe&3Ed&3(pDp3i$8+Ic13NN@@m$bR4SBV`9`k9i,kZE2%Y'BhSNNM@&
+dI)f3!%'+N!""(B&dShSZmmMa)m(QMElC2Z090%5T18A0+1"fFf!V`DY@I@BhGF#
+V5Ih,hkkU*EVA!f%jXB20qAXPFpmfeBMNDY5p2U14*Vb*ccUej&*c[RGp%6@pQHp
+0QA(B2K1!2*Bba@04$4bq$%AcF`[$R+%Qm!`aH(C![3Q3!),+831h"hED@Ci2"Xe
+d%i*'5AUJQCHPT$3!"Xld'BhmQ6+XRlTaRc*i&)0h"[hcI!FQ$HbIja`B!GK$L(*
+28)hDjd"dhReFP5JE,1eq2kRL-dUI8Iid1U5"V#12C@++()Q@((XQ9qUi#3"!m%k
+BVUV4!&M9QMT9bLp@%eL-[)*&hAaDM1*$dP8KNiN*GrT5"cGkdG#SQiqP4Ph9REl
+elmlHKdQGZN(Ud)NJ9KcYZ&DPHbGem%hI,3DQ45KNPraqKDkifS!X)i%HT[KSS-'
+E6&TXIrdAT)B(-4#433)C@Nfj`j1)i(R0533'N!!L!!K23&"IlKKkZ3J"V#f$(Dp
+QdfXE[d)hM#+dGk)3j"#a*$VK@U&KCj((5@V2"G%Z(QLCG+MCH5K)DEpCT9[a)h3
+'mPLN@kiNJ&dDk0ZUddRq'BdC4e)$*UX6$AMmf-l8@!X9Le$C"KabiA,T)VR2,$I
+'J`Q1-*UC4m%-U'Z4-6kb(THE1JTa!d%la-8pf"1,1'JlVXh$*aINcQ!DQPQ["Y0
+N`3&L3eMC,)VdJ1)8!V%S9#pfpkJeb)6[MCVkIUSfXX-1rkH!B+A&Smj&ZV43YEC
+V#l8AJ5X4-Z)9SH+T*P6!`5TdPB09k$iZe%,9H$dF+JcAKDkLLa9Ldm@qED&,,"E
+2D%4'1r4#b5#f-rN*k&ZCq%%r%m@G"1SlR!4'268XiNB3I*[RE*!!"KE&,cM`64T
+BXJdX64SiTJ`X64TB`X$D&`dETf&[d+$0YN'E*`dkT!cDr1*"#HQ(J3J@"9L`EU0
+%Y@IR0,qMX-C+(i4l&*&rM-5"+0!$b1DjP,qA#hFUePZPZY#`XfJf0PY18Bmc1SQ
+`JbT!1PB!6DXDX`+9pC,M$BSIrRLjL)%#52Ic&S&LE$SAfBDVDK`Lir4q),@Q"N3
+rKk$IaTPU"VS9ThJSA,)YCXeTe(dHD0k0+@S[&qd1L-iFF)6Z9T`8R$S`L+G$A'l
+Ri,#l"pPH()#-Fk0Z1SDb`fd0'HGBXUNp1qIqY**dZ3KALZeKABi5p(Sd(J[@hfC
+Q1R!fGU)B!@B$&I%JeR$J(!X%NZRJpY!PS0X9M-*$KB&Q"5N-I4dC"@-ESiUJJ%K
+e&8R%$L2,q8-qhNPB"2(Pc'5a*HTj%2jiS-4jJ'Td(U$qjB818%[F"kJPcJ28id#
+`fXN(6#""Mb8"R+`*RBZ&,$#kb$'$ABkJN!#f0MD+m)J1l*UkTSjqIe-m1fICPT4
+"DN"#)4-TCeMllZ6XDR3$CeF[3NN19UA`S%!6c5mATFbi1'p!r`e'Pb'JNMP`4LC
+K*M32V2*,"fA&bq9J%"GqQkji9ZV)2i22[@Jm*i0mk%K3rAe4,)m"#6pcl)d35@i
+'`SKS%(%JmK3L583HeYf%J"I-2mBJL'%fm`Hc9['c&3[[5Ehc"m@Tfhi-p"i)rUD
+"IcM$-kbl"QH)$bfc0SK!4GY`'KX10h8dkH@&jFNa3GNFUb,QfT[dc(jHQM-QMUH
+r+&!,GE-,'@ZJTrIqq)9[VX-Jcb"S*X"!D@Hb3LcY("-)NXm3q$0$T48&lcCE%E`
+$aDH%b)D[TrIld6dVZh*jQUC,,NkaT5-!r#2-(%dCQ&%eeT@9(M-M5"bjGB1lJ$@
+PiP+*r$2-m&YH20B9LbT$(@PDMD8GBeh1L4L+Kbm'ZlB[&U-LfK8i6i@Sbr+Sb%m
+k+V,@Sk`[H"5fMZhjN!!JQIJC`)m"2ceJSfLNrFcBVFh3CB**fB!1Fm'J0)"Tf#B
+08&1@EJ"0GU@TK`MEb"(G!(i-q-PN-MITZjLj3##miPi#i!L+e2dckjJ"LF(UL1a
+@8[r[`iF%m3d+,1N)#Z3'QRT"QAS"T*%3*&U"A(`F')"SpA,`)%3@CXD&*@U4@@@
+X9-$eV-aSEDS6ejfX#hK#CJ%PQLNMFjN!5iVCZBQA9[4NTPXb[SMK`'J+V$&QGJ"
+&f-4q"$'S-p6)5"#[k)L'"pKke#5BK8PS25Q,R(Ij)J"4b@m*T!%$,kK`mib0%8U
+IL-CeI'hZ,Z,p!Uc&GL3Th$[e1`a&GrPi`mDNh'`aH",#`C!!,0l*JPf*pdlIA9j
+&L'+NF"3rfIJa'Lp0ZXk"B1)Z(frJPfr6"V489!d3`Vh+)[0G2Z245CdD5diDkbB
+YYJ3P6,91@[B(Qqrb54j,YLbcL#k1Uf25biQ(K%1MCK`NYPTBMXB@AA!*ad5'%XK
+[0rUe(fRh@YF%NQ&(`2qD2l$-i6$iKN)'lc@c4Sfif93GlNj!U`kjBmDaJ$f-cPC
+dRKF+E+A1DjbGkj`XTKRXC$ZLqhTkjccpqA!A2-AK#!l81)-U*F$0L*!!qdC%(m$
+bR'"bK[''##6l1akq4fmde[@c!)!#$%NfBr#*,[qDHr6R%3JYPK%dp)-YBeeb)i1
+Zd`9A9q6-H"2LPE2HdlJlf'h$ZQQ-L)kbBJ$,4Y%acpC8K+E5Sf$8GhaL@I53!'"
+H,,M3+Z2-Y"qCD9CH54l+2PITLT!!J@l8&GdmbF8D,VJm1qIZ8XlB4!abeLCQPjR
+a4lY`S!'&qA6G#VQ3!$[+fD)aqm+-Pl1H3S&a-c9`@E9rjG,!,rj6k0(8DXYD0M-
+6lNR+6%,)p,-53+h$6b0q,J,%KK4PN!$$f"*X3p@!*,hX4MXk1CbI*'B0+9PV2`I
+mM[0F*,#+3jqC1J&(liAMAHc-c`NQCi$6(Kd6F[,Cqh3kC01%ZP2Z)*eik`Zad'8
+ikhA2CJIhM0[P!Djb3309D&MKm5N3M4!cR@J`dR@VA-TiV!$"V&A+H$)6&4i+X*P
+`8$m2f5%X&3Lpk!`kj[QUEb!6fDS`jZ-(DQb-q36q0q0r'c,,c@"(KN5VN5-GL-6
+P"GH2JCU!k,B2J8ACHMcG'(CG"D2PUZ")'hkXq'Q&BU%66ZcIIH&Q4+*33M(U5'6
+RE+YZ'[rLrY[r*Qq40iKLT!iE6$Qh*hAK`+L8!4%[`5K%4'FdmK'LMRQ2VUXU9aS
+CGehkIliaJ8`*$#)*VMLPZSFD!+$KRaA-X3J2JZiTr#5)d,mUljX`"+2c(J`K@3k
+"VJRZbPdq+rqhkJPGfVJ!Q$!jaC00(3%rN[-Iqq2GXb(UI$Ne31bIk`!AKk(`A6Z
+$c0IZ0CQr!GC%@&afj2NCI)bYQJlYSEBI#J%QVUD3!&QjhlUPZ,"2&9!4*VP5#"$
+5"R`JciDKQ#9Ma@!&*R0Q1J$rdE%ViJ!bG!FL9m4j0"l!NGIjZ0!lr"PmAfEA3)"
+H!BEjG5cNJPPcRCJe#*T1CNeSke%ZLU)3ARBZ3-G!mLKP"08YYS#N49BXJi*5&J@
+Pii*CVb8))YFjL(al`,$Gk%`36PBP+&lNi)L-BFBP4j%AE$`M+VABXGRc((ci"m6
+HM'S8BEQK+'eL3m!HUK0r&5ScEibGdN$Q%AF!NGN6#$3$*EcF'@aqX&MBk6!*QG"
+aKAf48#)T911cPrL3!1eTT+)X!H'k%CmAk60&"9Z##lDr1iGK0R@MdMd#&`Q)3`2
+MS`5#@5I[X$`XH3F'`mp&BT&Q"*J0h-U!$k9AI2IlQS5f6`CqVXV`TUp`k`emD!q
+0G@MkT15%DcGV$U@5[#J2#+@8rAVm+,0%%UM@*#1V&NC@*(ci@GdL*l2+VV*YPTQ
+R(INPk6)D9i5dDBU3!!Cf#P5f8)&VcS"9p5HhH&0fbLRHM'`L)5!,b,-A2kj[X%*
+p(--K5"U'bdjaF3'4X!kAJ#"%!T!!,!MCdAc18K"kqT)X#%e8q4PqDfI('kTidAI
+rZpAX-$YUP6SbMN&"`ma(I`)k&8Fi'RV,'r*5*C!!KeZ%i9dTY--R9`Tj(Dl[FSG
+BrQMZ`$d1M89"TcNU9rTVKMURj4qQj`P6ESc9h8*GMNf`b2-HEq&'&j3[V#"r$dd
+c3*LK3()H52acSHDQ8)&Qm(rpZ"G&9T&Qr)2+lrE#VDQ)P3h5q+h2*!Q9Q+Cr8"R
+G5`VYXd&(%C-q6aSI+Cc3H$5S8Y1B0(lT&i@@63PR98!8Np0[hSclG$S"I'8rKZU
+9iPBmjf4e+0A4j*%G*ELJ[0%PkE1JH$-G#S4fRT6df*+k`&HpbE5(QD+YF+@)Q9*
+qCaGfV!MSRHVZL9d3PGa6j5NB@LQ3!'qJ3"B,6I&!-f@5TJ&m1JIrPG`T(L)QqQ&
+h"PcS8IaV`F$3`(eSqEb6erh)NLVXM4Y3(6Be0-RLb3S8QXRC3&JBBJNM501KQ"r
+*-RA#3C*bd)9rQ'jdS$-$q"!bBjZTbL1bU@ZI$LB`-S$)9#0a&@"r6`Cf63G8$dk
+f`%DR3a#baZcbjIMQZMpqiDMRJF-2p&e@Xh2Zb3,`SHJfp3fh)Z[,i#"#+$LcFlj
+UKXJh&0eENSi#32mhVHi"aj!!`L,4KaYe$i6miQI'PXQ1!f%`XRL5eDGT0a3"c$E
+QqlL#4b1FdHrq9ddIZbZLF"QLUQKPAFJmI[9F#`F@[DN$bP*rM+Ye0R!'3VFi1fI
+6h*5K**dAR)N+S(eEXXIdc"VCp18)0pXR0"Xa8"X',feU3'8!1"Bmc99(NAQPbU!
+3eYL&U5R1U)3ZX3[1bK`iYXZGi%3`%aNaU"jd@q(3JJZ*,I9`rY"ji4jN!"RZZ5`
+J,ZkJcMXJKLiK9Y!p3%CfCJ@a#m%mbP,%T-YU23Kl+``(c"e5Vd0M&[1(Q0MD2GU
+HHAf&I-J13P`lX*N`Q$iGJ9Lp51a(jEdPk+Ja$F85'V$2'B&HmdRU`@e#K8J4QY&
+S,40&q2&Tql*k))aM`!8p`rQ8I1FeIC%N-p5rj*-6%&Q#6!SB2G,qU)NC6Q$2-8T
+PFEi0+N8jf91fMSC*(I95Vp)46Jc)4#DC(IHP!NiBI+"SrY*a1&rNI(AA"(B81D+
+"&H0i@hachCMrMeqJJMF033%9jMBp`*93)C!!TjPkKP[VRB#AbB#hFDS&i"ePC0R
+LF(3SS'G(9)LIFCE1f$NCq(LCTh%R1)`L+HUBJE*9kVLE+KNKSji@B1"Bj[Sa+Zi
+K!lMa!A4+Br"M)02d-!%f'YB#G!Xd24*PIk,lCc51)*&-2EI-R$Je)X2(#95R[ZQ
+V6L(V@456l#6QaF*)-&D*Ue,mjV%-+-4G,4NpfMj+X,jjIF0&$,Tb"CEe@pB#bLk
+SrC5!X2ie9[[aJX@%D"XfmI+8`*KpZ"d9JJ+0"-,fINBJB#JmIId'"kcQ@"X)V51
+Lc0AjAXRMbA!D*(+!%A!beMUjSmP-(9%Pc*K*4$2*9CbC3%d0&N'RADRH,!FHG(j
+fGPeAS"@$pP*b1irefSjpHj5"Qj2l!$UACZGXf$J*h%a3qTMBq4!!Gj3!98q!HT1
+UF(,AL+BR4D#kiFZ61YXTL8b5Ki%9B)A+4B`S0XaPiXU!Zf'q'h!hI-+!qk8DMGp
+5()$,(&8kZba3K"DVlbZ&k"!*(bMF(c#0%[--bPNrd-U5e&AeIB",-j+p3f4GPjG
+hBDQ1TiZG2!JbILe`)NNqD9$IPj0`Y%XC)1HbQUI#+B@G6$3TCKB8T1U%dAK!*M5
+*'*l*!XB[KdCP4NX[#bDBF*8'F-KALfQi!`68,$"J2JDVS('T89BN3X4'"MAYRIb
+UT9qjbfIULF8A&)19Z""4#8FG9bi5KJ"mh03"d69-QpL%`0L-BNJ[iD#C&b$H[Xp
+%XeZiZh@1bSj"R"e-+0P(&%eAK+[TLZKTDQ$aPM2TR(@%3((DPR'FcJ9jLbhVq(,
+k`3)%DppJ&`e6-3S")0CSlp'C!j%2@L)'YbQ"&jJq-2-*E-H+JY1"UZ2AX)(+jdF
+I-A!L@'CUh-jkZSA1*,I-r0lS)X(2"E,dJ2Nf,M`@eeq!)Q!Qh1NrIH@UF1Q+JG6
+Qeei92ETT%!)@"PI1-,UcaDFSJm6E8bV'@e`kG3*J`S8YX6j4p0XDQfU,PR62)P#
+eSN&1PNJV*b!bkpf9FMBFQDJiEmM)frVQa%YCA%Jr`pMI`9Zf6h"2*)BH*fqqbBc
+!`fU`hP6YP1T)lC6J&Hf8kLY3Nd`*bU)&%%11Z'Jb(`G)A1P$Bmq8)%aY&%kTKV,
+Y4M#%V,8H$APSm,(MJidT[kc*`d-S8aebp3-@hGI%`2aB"PG09PH913GEYB*4#Ip
+J5JpB+iXA!(%!U&[TJTdQ"2"!fjA#+H96F['URl,h#SDC8Sl$kph9ZX'`iSTSV$i
+Hb2c)BCdITQV8mEIqG(Ya8)fFF,-eQ3MZ#ki+)LX!NMLQ5l96bYqkKPIp@m9#C[H
+LB98QX6@*()j2q9SfYZBf'Sb&0$BYX*RC--4S9*@P-MN5QSr)0[R$X`c*Xid,#$K
+@SBT[X'0'BcrF`j3ZAqB!lMk!Um)bk`h"c+T-+@#RF$Rl33ZcP8-',!ij8Sr+U)G
+`%)CV-6SF3r0rU"'FDCr+BNJICFP48-irGRZAaH&4KrpiZV[+Uqaq&dB'$'$JBe@
+rB"FX2a6GUU4qd-Q#Gi!9A804Nkc)j&IIFR+qY-XGCM3Dk[dF'*RPR'392ecRp)b
+'RqKKT(9PIf8@a0UZ#Bl2M9aT6,!l+9"CUif"#H9B9U#CNS@DRZJmcSkQ@4-6&Sb
+$!Mi`XCHM3+9$fC83a,42j381A3#RQ+0rrDpC(d()4R4fcUBdC-d3G9c-'K&@A-V
+KcVV*3%[9CT)6Mf%"RBGqILm$CdRkV55K()J[NXQ@I-5'C*!!K$V+2Jjb"2Y6@C(
+9pakCbZVpH*hilGlVILfF4U51hqk9XKkm+E0*![A5BHdCM9rE%meDI91%l6h#($Y
+q@G3,Z0S8*E)ibjML,12&d4CfeN+LA"apSMamGrGT(bdrrVZp2LpAlS",rF9`10H
+A1Pfb6hZST!H'2"bhhf&'Tj3&0JSc61ce3#m+HfD[K5!hhjQ"N!#dYCQk&AL"%3%
+&AVqNVA(Fqr%kAff[EMiU,)hUhUbfDq)`fc(+`UT46arer)(+%P`Cm$8%Xb-FN!$
+59J"P,XS6#!!,N!!K+'8",+9P8Y"fIQMEcJmYY[0$fhELf-i2H6YJ!T9+TdZUG+@
+SUV+ST"IAD0BYZ[dD0VC!dXSE8apPG4L,RCRT%5dTJY*53RV8RT5ce15J8IDi,e`
+5'C*k*-eiFXGHbkBDGBd[r%cGN!"dL"YGCS0CEPlM+cMA1#3GjQ@hd3BXr`@A55[
+"JEL1AjGfHim&-H'1[bV-"58%&hXjl*C%`1TF2Gp3BK!h3YT$KPrcCdP*L4J2CI8
+DhZ22JT)#F64dkV$KFrkX,i([8UJ%VR)`'i+&U596XA$16&QY-TJ'%U[R*d[#@$`
+Z,jCD,TkA&aHl&c0GGLJ'#S9Za2@`"-3GAUCFG5k52FcAC*!!Eh5NB#DL,S*-*%b
+S5*jHAp(CU'I1XG1qfZGd@qrm8Galap92kKr`5ZheMfmIM,6rpFKHhiD6NKm6MdA
+pFdjLiUp!M0)lZi8rlYhqqHp2EI*+m8[@RB24H,QG%cKem)jT8J-kR)`fc-QP$NR
+G0(4)aVd*+ILPM9kT)fr9eX'DM[)eGeFGm@hD*m8a24I6cp*dZbiIdqeallY[E&j
+aPeIbA0C['kccP,IGAER(Ya%+f9jIY+()'qe31MKdQp$"%IIq1@p9a3D[j"pjr0l
+"P2q[qmlklMSfBBX`PUAEMXR@Z2I`QIIUlRKADRMEZQ+`X3&AVrMBpm"*UCdffUj
+X0)aU4pdL(2F1DRTAddCAd8EA+"[ph,E4-p5K99H%$Uealp,HIe"TShVDD*[&4Xr
+B0LVTeQ'k&2IqbMGl!fq851iKNTpPNY-frFVdK'i$TLILhRdpceG`!K(4ff@LSi*
+rfAV&N!!!E4J4KIJ4h5jdM-5p1YeIhU)YVk)YVk%YFkGf)Rrl((a3PaVG-R5TLAX
+r1Rl(1laY5S#iNJ"R1!'+f""$Kl*YM@iZ1QMLh[YZVSQZ03(1f",J8Ge86(i8**V
+pckrqAENbE384H614JqZR52CH9,*"8YL9T"M9E8((dEMhdhrVqjLf[iUfldb+GC`
+8MB)6)f'IFjSkMHYfS00ih2[bDmQReT)F$GLfRFQ,LN5PFHqLcLF28$)m`FR`5cN
+CiT4JZ64TFGaEC(lG[2jGbAlT0cMHAVk5MimHr2Xd"B4A+X-YLhY6jmmp4q3H)R)
+h%lNrSQ5&SlI8AT6Vml)630chd`@I&frbJFaf)V09)I0+)Ya+*Kb'h"lhhYANq(F
+Lla0-hPr+j*8"eX0*J@QliYj3McAMlqp++qQ++q8V%NNl#&6YbS!liYi0(pcV*9)
+1%5QEPFfXib4M*bpTCG&*ZZ5QZ1qhIrrDe)dqN!$36L5d%JNriQ5LlGL,cY,8$A(
+I8lrlVhYCS6Q"M#X*+&FUK0`5pdljA[YGN`P*L--#&@"UIYblq$Xr1--E)N+Z9!L
+j6`iH&S4F&rFG1QHpIbf%E&!#REcaUA&[pcrpY12rJT!!dq,HXVpqYj36N!#Zf'"
+,DLFKR3P6&2F'ESA@-b(cKN!F*U4-()p#R,K#aVPahrIV"[B`'H[Y)!k6m5Yb8(m
+$8prbbXQX@r)Y&b'p9NCk2rdq0J(AaIrKLmCTbVUipm`r,r*5%ZqQ*'j3L2GVUH%
+2[ULITJ%!#rrrAd3jm()aeaJh((BG*X+e4aYHpd8lD"S5BZRGShBLaNSQ4[P[lTi
+&FTb422m#mY)N")a2hYR@`m'R[T@[r91P32Lp,pT18cE&[IXIq2qkL9LlL9J0YQ#
+a%KIhd$33DY%IpKZC8(bPQRC$VkZA#"@2VRcGHA%!m$[r-MG)"&K*52mh6U4[)a+
+5-2,r[[dHAEZ9Vre6"G(m`8QNVA([YJmH@8*JXj[!TX'*hRr[h$a!DmYI0FHF*)V
+'$3GG"qRDRdXVrm9jE34jrpkrG4$b@%QJraXPHH9Vbb6B%2HZhj,r,8)H6#626ip
+-5YLjFHqpArVQh46FGP0`Dh!APEE%4D$XQT&AbKHRC&Xj+GPN)J%iThhPe'e#c#X
+*e(rM"RAI-H95)-,LKk)p4+B@*Y2p0N$hR95)J%6TUp2pNC+ZMC*1EiNZS[E6#-L
+[8lAiZ'r@`JXrIJ!"lY)DfX#U#HKL*DEDDHVfZ+rXeCRI)Q643#6El8B@[V0ZJYc
+qbc06L'3Y6,,lEBM#PkZ3!!0*p+rfGGF)6E34QY"ESSPS!`ledk'lS(Vikq,riqp
+&52!eP1#Vh'M#GmB0bXGbrre")P`$%@lh@JL(!(CVm1hdRdJi*&4DcEdl*K21L4k
+)($,K&XGpheAlV%bi[$@%(PDjdB10(!$Tl15D$bL3!$83DYLYS!C,JL#J2CrapQN
++(#dF11kAN81FVQm,q'rF@2iBJp")'kkr%PHE44[`@f`!)&4hajerB&)3`H)+`8l
+bp8%`Ma1XIhRflcpL8P"5qT@N221PQemG&2jl"NAbMN&KKk"C1XP")cNLJUXJmJp
+Ypmi"keEEKma"d90H[h#dA&T9j(h+pkM3pYRl)+aZU"HA8Am%iVA+$Qc-K,fdkTV
+[6ZrG(afkImUkllaVe$2$Pck+T0@lpPjDpDMI-#F9bMapl[3d,`qFd05)ZrINqK+
+RF@M$R5IRq'V8U+C9l2SSi6PqHTT2QH$phCjMek+H8lK5Sc+KA,rPT(Z#`H9bmC4
+-6)NFG!kKY4JL'2jGmE&r$2CI@P@q%PfpdG8rrHMdr"SaajI`APU9m'6K5P&$p1&
+Ui@cih8FRVf&k-df(I9CR!b-EENTiH"[4KpICQR")pmPV@FH3!,AV34B4iRcD,SY
+-"l&6j!bXD*&C+fTFB4[J3qbeG#&5-Zb2+eNJ9!H5I1i&UK"ddlf!+N%@RplClSp
+[Uq-DTH20b9H3!0DiXe51)QQ01p[&Rmi-'MiHGbpr@af8)adq0f1MLeNU8-G1@CG
+DRDG'2H9GZlVRR+haE$Tla!XA"2pP0HV(dV%krmCMHla[3rfkI5q#@bX(0qRaYh+
+$r8@j"qqI2T!!dYK&X$rUhr(4(0r"qkF1R*hI+U*qed($39ji6eNS$f-`,%bMK8K
+(p2(AFhQ!,f$"FS!r64VJFf9"l[jVZAZmTU21rrYMfX2f`j5*LdNG1rG'1mUl#1Q
+p+mAa'DF2lm!p5EFcRee5YKaj'5iG[ZL'epIGAQ,"&TXd39T[18&AM`UVa-aJ-h8
+!SRS`4UEAjUNA$J9dTE9j(mhkVlm53ir!Uk`6TK0+Ic1XHeDSH#d4)Ebq*MaiP3N
+rANY&"ejT)SkA6V52X!1ehKK*l)F6JGeKC@A2@bfZ9JVmb@Urb4VE"SBS'la+MB"
+KJB8YF'I-9bi5,3(EUP9KdHJ@X4P$VY*)94X99Kr8IISQ2a5PCdfN(JRSZpJ)mN@
+`q1(!S"P+#DMpNeaP(DV)Lh#I#-P!!bC'QYdX'U%QUK20[+J+'-"6*ZMB08mm"ZA
+[k&`4`N%K1Q5B"Km&Ha6ZX(Cf*%Z,18beXjD!L6`r!a%d$+,K#63NAI)#M!2"@`j
+94K'"Zf6XR2[!3(C3I""0XA2T%RECD4V21P55KFd[k9iU`F9"Ym6YJT6UXTq8(Fj
+6XX0j4YrpXll'UT%RqQBYBAG3B`f1k0+Ph8VBDi9ZeT,VE9TF!3%6Vi2hceUbTSV
+9DFBiNkelDK1c3Id'fE9iND'`1+[lqr5+Z,5Z,)@)IPH6Z+JBFb`(Qr48fL,$F&V
+CB$Qcm3BrJb++U`Q*q6MLHUF@8DSfa)`JX@DZq'pKDlkpdqRNJ3'@i-ILb-%2q0@
+%Dd'Pd+fT,6jP+-VbpD1bIA'*SHJEL!kqLNZ+`9`fHBR)%5Mkc3m@BQ)pP2S(D*!
+!'IKiDK"++&c[-lTZ(##c&84P*Zkb`A*8F8kN6M#LP"8ahIXiJ3cel%S+XeMY)(*
+j`Y#%EF&e@LB0-hQhXQ'"lZr,LrfXEUjpicSYXR%jX$,I+'!LG[q)#c!PQ80)jRZ
+Cj)3!Z8U5J,ZB[[XN@2eGV(JEr%bHaXU%PiX5*e*+B%aEl'6NYp9@r&`Q0Ic!#bZ
+jZR@%(&RFVZZRS8lpN!!E64(eeB!,%lkZ+&A(j#i``6V#894eUHpENEBB,0[KY-@
+mC#K3&fERr(DU6+kJQXQU@5dhZBH*Y8*4BfILK0Keq[,aG'8kP'HK&,NaJ*JaKf5
+#1iK`EY-)-`(IZfDSAmQU!6CXNQIb3FPK0ARBp-$h-Yf$U$Z9aA&@l6$)%,-C!-0
+9MDPljG1pcZ[+`he05djT+APEkN)q'ZkPM3$%j+5T%CK#FQre(9D*a+CqHi5jGck
+jVMPiD3d#J[TU24[-U#0LU$)aX0"L)hlBJ[Kf*e'0E&rmfbDTf2+65$TQGT0dDCd
+P54p,XaMNTV+ilB9)kJBP0MVcfaCjdk*H*NS6QcT@j5jXE2Qhj`LPYJ8kD6"-4R@
+TKF%i6*9ENXCKfjCUZ5h("#-6&NBET%P''c``US'!(Y!m)lZj$KP6LPSQL3'[!6M
+EaM$&ZFL'IArl'V'B,Bcq`JM5Z(fMjV#8r+!6CM,1X@+aD6ccXp[PV(lVRTRU5Jd
+J+28P-NI8M-1&)&C`&E0B3E)N1i"[paRpMTDALjLT932eTF2$5T8fJ@T2N4HH1PZ
+d6A010BlC1m5URc4pJqAdT+2MK1#PM-293PGqCD!b+!d!U!rLqZ8F$Ce'Y2kP20&
+3QAH&M9AV+YqQKQYS1-e4cpm42F[4$LZLHc$j"j8Imq3'AH90DNLJB5&(ilF4RFh
+4pNm4I4q6QbYRmZ69ZXSCe,!!$Cpb02NmSX8FeBmL@N@AH&1ja'[8B%$$2)ifI)6
+SA)lDTb0D4*1R+C2IXkab)$RCj+Ua@FX9!KeVhJ)X##eA2&pc-F3ZKEIZY94S4NM
+)6@i(JMI!LDUf-T9GZDM890[G*k[VAB99TiaC-)54-ZAH'NMjZB$8+3@N6RI&9"@
+ldPGe&9H5ULkp9&Jj[HUmUl*+#c99E@AF8&M9#lA1-Kk+!m2+(T1!dfrm1e0QRaa
+qVEqfkK3@0E`BB(-SdbFB6)'cE&3aTTa39(L55h*%VFLJVhR,Qr+b%HCSM8$@02U
+3!%#fl*'$8!@Y5Dcq$em#)ZKETk0JR-1PlR4![h121-hB`4MDZ3FZrIl8LFL*bDB
+N&''rFDh+UQC@8ke05F9%E!rc*D'NFP`@jB)&ikap2)aVd"r(6qL5L1k2HL99klX
+!J`q5QX@4T+5HiSKG8NXiiT!!e(-FX8VUFBk%*4J-4D5elkG#b[6D[BbS#ZIPm@"
+VN!#BMjD)I1m@AqJdLbR4ef[%)piDS6f@FiBGbNXqdTkeRk8ZGmV1*!*QGX)lh*G
+HaB3P81',*fVmS8L02`i(eVh'4ZeTHGJkC-Ff(!Y4"E`DcB"ikKKqcYC!Q-mrbdB
+d1H[fqZ05HmBC1&C1ImMP$ch8iir$[A+Cmb#!3T%E"4%U,a$Rb!$r16MLSCNqXNd
+FeI1%+`A#@&A%LG&8LmijiJBA%e"%kib4&*Ci1dd4YCNR)m)+IZQ+ZDSSNb[hkcJ
+UHG`SLee88l)KFE[4JFN'L*(2`Q#%$SMm3ll#'lQ"q),+@AZUGhkGLM)f)N,UA+T
+UG9IPV)q9D9c"(qMP4rL!8T59X,@981bZDb'h(`GGdH8H4&CqXfN56(,PRma-*c0
+@IP6INJHd0ZQ9JS'R5$a`C[T%%ca1-@9%`*AKP1@@fDJ+#H3jZKDC3$"iF0eG!5h
+L0-FLX8QAL9h*5-Q-Zma8b1HJHL9A9H-"%R"Y(Z0#e#aL)@hILlZLN!$B-pQNdCK
+FD6$*,Kka1P0KeG5!!`&l+Kr6H2SPFp9lap1a2!e"U,Ei@kLDb5*Hqq!MTXS+Dm!
++Ca'3!")GhT-++kcC0q'J&G*iq[(!!S83*'!+`Bj8`Ylp'kR,l[ZXr(U-c6he+`%
+AfbP(4lm'#qJk40hdG%')TDPK150$arI59FbFBAR1&a[P,!*938BP!jk!406$jEi
+GSR"NmT)VJ'Y1khiEk(!D,Zm)X"-k$U$#8Yk!3pj!8(5CfF8KGF)TcN2eMSX'8K"
+(pA!3kk4VF#85')d4H[I!E0UUSX(C$49KC!GVkc2mD!IhjXqCDLXD!Z11fUTYA-`
+CI'2#K58L,6Y1,&'%kZ83U,QU6f(9YZlcU*bTYhfHi)G&00N)Q,E&dB9,0e*'T0&
+'HSGXrTkhb0eFMeLifVHCDUZQ"fJ!0%l(pZhC0ih06N3U,p!`5@a&Uf3TN`L-GRU
+3!-0!qQ%LF*)0qfbr,4[i@ID,IY%p-h'#0p$Y5'PK(L)%0diBL5"(6La$J"Sb&$d
+D3I@E13Yp#le`mGl,reIXc6qpdiI-jJaf%fXSCT0G%"#dlNrZMNF(1!c[SVX9hEd
+,I4'YaSS$8)6`!C1(!e04Lb&R[S6UJ&A6m)T@6Ed#mjm99V`L&3kU11MJl@2,U#`
+6H3!"a1m#B6Jj%0Q@R90RT'e#,'@Rbqi6#JRRA$P4B8HQaQHa1&9aMZF(Z(c52ll
+p0T*V*LD9ibF2J#)3U@B"8,4hEfZUVE"EGTCkB%Lq@1U$8Ek[%'$"Y3TA'S#3!2N
+*VZ@L`C3$-&!3%dleMbrl"6lU-D3(3hUD110e2$[RNHR+%%B-SFF3TpJYerfS!D"
+ecYS&%!"EbD8rE(2VYa@MDADEd`NKA'51Rm@cJA)J+iX!6,)!42!!$!,iarNekeQ
+H-U(DC,dkB*UR$J4kU$*%R"J-F@)`T,"J9E,f,Ibi*BAYeXL2(*'chFJB02p(UCS
+CL#Hd%*cR6N5XXMNk2*UMXU,PGKfZ9B-Jp4aAjj%E,YAQHkqB+eU-cFkPicjHF$k
+fT-PM-86Rl3)JSr'[r3XlG$*T"SeYAE&4")%EH#c+C5N6MKmKX(J+4"`!$$G1'%*
+*U`jcKAa%bkUEi4iIeff[43IGYK%9)LeRTI'JQar!IA$#"6SY(,9N!f`bF@%Hc1J
+#1iH,dK[C13pG"M,faI`1Ml&'dpH%`$YV#BSH28GXQA)'T'1FN9$)lcQHlK`qE3H
+l*6S0pDINLK&$9"'cC9)"akj0j$S2&c1ZD"TqdB3@H3*!D5iCB"U6A8L(JM"a9eZ
+4B)&UqAbZkSNUZ$#q`PAN191d*S[GQ2eT9#NN3K11XJ%bb`+*-fK1)a42Q#X5cSa
+LE1*3HKS+4V0hRiACJBdXf-DSdM*!(U`JVMD),-`[,T@$5"&0&jN*r6+*T"-'FXb
+KJDU*%%+Ni3T`NcE8FbEcqDNm,,+qRFk"%6"$5%D)dNp(P8(aq#'UaPVpNVQipmV
+9d2@+mhJC+miek9d"DVU[AmL'"H5)jk351DBd9#2bK5)BZQVLSXh$&FJpZi*QAN)
+3l3c%Vece[&eaMX%#$Y!0#-iTQ1GbS3$Q6GZTmLHZY(`MUMV8&T[QA`d9"'TSHXV
+TRUb!aQP-mi&iLlJVR"IM-TJdGI"QfIPhp3&+F+'fd3"iG*P-%$TUE@4SPFQ`Y%F
+QJhT1*S1UC6+Sf8`'"KPUI%EHX2SAK3#RP8LZdR!1M`3M83G2ArQHQaLK$DKBBdQ
+-baAR!'VcU&UchTP8F'HG3+$I4*'9lV")a,83#JEYIL+K(*XR%JV(ZSJ8)M4+JE4
+&Z@6PmYQFT@C5P0h)B[C''3H"4FY-3RERKCRr6f%FS4J9C+DaHkc6-CC-3c5#BE'
+3!,-$6P-U)D!5h9`JV`Ziq+1)2"PSK,0Z(99aH5F34H(cA##DE!4fR"YS#3fRkD!
+1((jV"p54r(V('*FA%E3ZiUF4#AAHa1Dc*%3()JBNhMcm[)EVXi0l#EfB1@6&-Cf
++@E)fZYa4jA*CcX[9APAEG*[`DY(Yi#akMIJk)h$2A*LMi`GkCHFNf$M0*VND4b+
+-MafCkEaaTr-Y(6!@1)TYC!EUH*Zaa#XpD6YUqp*fJT9d,b15TkkL+)cJ%i-mp6i
+,iK"#R-6q4+iH%fM$81d`U0$X"%aXie&0Pf*QS4jXi3JjjNFBKE#jNjZ$F"iAXS$
+rTl!Xi-Fb`5L1"%bBIK4*j#)QD3f1q6)UJb,6U)Z3!&Q#rEUMr!'A[`&brSmS"JS
+bXEAMf&T0-$,$50-[b!J4,+EDG9q8h6+cFqb2)YMYc8)3ZbYcSPR8,JQSH!K9e9T
+KU,)6U*Qc"P(*3iAIXN!5!NUif!`"T,$Bl#UX5,PUL`0"Hp(*Q*dQJ3H!i2VS5iF
+V5j`,U$Cd')X*QAfQ[LS,Nq1#+b!jMBSKdC+)C$+$hG5$`JCQ"-"U3@Am0Ul5E'-
+(GRR3R*30Q%#B)d-TKXaqCLM99Tah&JSJaK%'(k0TmQ!mT5X#YQ+"qJrrFi04`%c
+LX5G!!6rSPCPF91@jim#BVFScXYRihmJr,afU5#&Bpr,$VB"!9L(Ek2K4CF9jc5%
+Tb4(M%%eaIM*ESX6LJ6!ER48'f6!`NU"jK*mid[9c2jb4ZlKU%aGCR9XS'Zp(*BU
+@)J+J)93,q4$ZTaZeqfc6UV4p9%$M850F3"0,F'0pjfcc$EqQ!qTC-B6!m5D+Z9[
+q[q(",c4K"i"S"jMqME#Je1KFe2TiZ@pC8Z$KBc6-M%ClRqHhp0LZ'PjiX*%H#1L
+m9!eG5Sr(Qj36ial"Te-+)ZLl+m!Y06K9c#`'0,*,mD3#1'A1iia(JKfB`H!YF,*
+5BBUP+kf!c9qL-JZLFK(4!40!D38`(6'#K#T6N!!Y$+4%J#JB65`e1*(FdUf@#'l
+TBLH+K"#3!'68YR44c2C`Vk@rC,3A3j@STEmF%4C6QjA--#!p%"T4rpDhp&@)9N0
+1C,9dSI-3[PC61jN3Ma)M9Kr3bfJFaEf@8%Bl6`+CJNLQaV'ZJpJXh'pP4(ei)U*
+Qe,l)5%`ZiEFHa'BQ)fd6VKU)dlAM9*hd(5bp'Z$*#eq%4!pE9%AJSH2bd*iF"AR
+",-l5-NCH5m[@KVbQ(9H3!&H@#4-$fDkUY#'Jd$C'AQP#39iA*A4Rj#9[,'f)&fS
+cdb4'B%[,C!5@PUJpR+E"&#%M-(5j`#cL2jFV9iS!&"kqJF*j-UXL*8M-Ij,"J#U
+UTaRY6NB-2TG0B-,F1i%*8r!#6*J#Q3R6k('cBA)@mNDC5)YhbPF+IEKfCNc1J[`
+c2jNCNl03CXC-CS#N#-#H&a-Q&p"J1I&26)H)e'cNe-bQ"Gh-Q%BR-kBaia#f98j
+QQh0DZ%S$&(bk)%#-6F"mI!5"L3-8+`-J'QbfRe'-#"@BpJAB2'cF+HUbdXX'JJ"
+-hE4AmS$-*S$KdaYP3UJI-i#L'QNTJa1-f'qU(9jUN!!,jC45+#q`&FUY0pf&FQZ
+ZA#L[&Bb4h)'i')BKMlN[$-!["RC,F(jk9,kLf)VU20&AHTCq8RYikDF-KJLJa8%
+c9heJKXE56b#Qj8&TA9N4#BacJ3rb@@m)9,XpK)S$iI'1jhVKQ*qmTFrX@p"EZ-3
+)jY@#3i9,j+Q2el[3NF'6MB09e!6DF03!MXV'K"S-2i"*"j!!5EkHF@J#q&A,i#I
+9c[SB*[QU1GRNj-,MGdVG#4RH$N"""E$3m-3%A6l2)N%M*!D+T9B,"a-m8U*9BHm
+a3iV0#BV05*!!%IaF`UF@%HN%Ub#22)G+R`#*)QEEi('06`bfDET'@299*F&!fe[
+h9pa!3Xr!KQi-IZCNDXP+6hlSSPdrST+`kE1BALj2"qMZSD'Z4eJP6kaH0[$'PIl
+YIY%)4DYI2)%12BSkZlD#JP2h[r1$2H(ZX%+hH1C,84mhZ!,GrbkM6KS5,$T8!U1
+U2Gde0lUi5)ZJdQF-9CqjSIX90NF2S@UaSUU"Z5YQdXJA&&ZB@3@&'mcfa5iL`6q
+Y,4bFcYRN`FhdQ,)bCI$Yh8qk#YmB`%qf!C(")#CVM9P"$cV#a(R,-#Tdk@9RRX&
+rTSHSPLVQEjCe9fZki*UJCe099,NCM4$Y#j4PZlaPTdMrH"Qf0FjNNZJaN4N)d&!
+Zj!BLV2*'P6@qH+Y-9M6!j,Sl#I4l13NFE(M)9M9)b5!R&DD*`m+e3XR8JL9RY6%
+$diMC1ZlClQ5IpA[i`Eb"LiTUh@1K@+pp`bJVbeNC$NDZ4BIMkE(0PU`3C$jV+rS
+4-'iJke"CBFBMUj'8h9p(S$(cCVUYL0k3!,H)kNT*C0re9)N1$+r(Kb`'kJ$$Bq`
+TJ,0BL-H6,Na%a2Z[H@208B2dN!#B#E0VX`(Heek$m3ZHk"S8Rh!NDVK3)"D+pr'
+D,@E#!02Xep"8@'!D&!Y[2BU+%`XP9'$@,B2`fKB0lI!1M)ICS-D[TBiG[J&c@$8
+14821aB&$@)#UK48PiYHhiY&aQSTM(MiSTV2bC5!#be3,"r+5e!'2mIkNVQXY'jM
+p[q-'H#)Bi-N(#m60Y5aHXpJS,e9@'*!!h)CE3$Nm6DUY-$`i+'rp685UrAL`q@c
+Di[mfa!#J'ZUk*P8mD`CEB*lEI"FV*6Q!mP"MifVAK`ALBa6NeI,deChFB)r!H(X
+eLkp3[51+l'GkJ)hCHELCTlX#6H1RNlSGJrr"PC(K1UMLXEi$%+S+ef82(KRYiQ*
+%RXSZ020KN!$J`aiM%5XM)USR0`rIbafGLpNj1mFc`BUc-#&QZc)Q$-KA(@,(S#3
+2%!HU)X+BaFH6ZV"k$deFE%0SDj3CqC-kQ5b""4UHf6C92e!a(XB-TU3T)SCMMB3
+-GJ0SN!!e`dF2+Z85XS1M$9i3jeh1"qjf#FXQ,Q+3!!3jS8Y`Ri5CQ4!cJ8pCS*T
+#'G%lMG`4+T,SN3$SMUdDJ)cpabPVUPak(83Z2L#+"$j&d3X[*KE8M1X#`e"+Ikm
+i#bppm5QmA-8PH$eBI!j&49Da9AD+8NLl@9j`ZNG4i)',9(k"Q)j$Ti*GG8TaJ#T
+miebap5@i44@IBc@mXm&SHZ(M*MYIdG*heh+)20Rf!!-f'J@#aCf1H9#KePB-`'4
+6NXfrfTM3-*4b1bCr3V%`)*-"Kir5G3i@Pr"4,a@)UF@RJJem("me*KCJ+G$iF*q
+B+KQ)B1b@Z+6iFAQ,mP9Xa)a6SpA0JXE3Il2BEUhYQ)q9EA`Afhd)lQZ[1S&h-(G
+L3L&SC@"J5Jch0Te$fiC6KRmT6hh)1654,S,!@h4*RqrYjm,d)GY"eC-2`J!V,Di
+DYPh9C(&9Um99*HF3l!VCZTEVbN2DKP''a4A$PPFFMBKVKBq1qB&QEYl`Q!i94T6
+XrL,1lLZE-&PX`NS1H)X'Fbd-m5f4A4!S%p92#0IKLSJ"r&6M4hSBJVm`d1XD8$&
+FL3&+0`e&3)N,DANk)fMmc-62q`qcN6F6[6l'Ud&-"EXTB5r8kGiBL'8#')e3Kp8
+@AfGe'&GL5lY$8QdU-Hp1hd[Q0l,G+M9-23pe@Qha!9DRAHVHiKh)Li6Bf0`@hdZ
+Z0`CSB#eBX4$-hXKm#5mN!`3eJ1%hmN%QJ'%*"i#i@Af)3C)$2d5rBKBh!-Jp42+
+,p2"e6#Iea52f`RC4I,c3(qaJPD%3HMa-Rd3J2)Upq"#kh6"U[[dZhDZjLicXj'5
+@8BZ-9Q684%52L-'(mciI&C[TP8qN[C1$K)bQIM$Ma@K+38CkX&128c$#),&4J-S
+2#4J2%hVBa-#MrUhih$1%e!K*N!#!43pY`UXl#eFd'aRT`S"&p`N&4!FjLf%I4VD
+Pe6Qi8h4cATK&1"LX1`2!XJrZX9@T,V2F,Y65%1N)Z*jMe@A&FicbFB#M1c)4-6[
+CATa"'LIffr-Em*-2GU-"$Tl2ALQX(+S-mHXVD@!b6JIEE"-l$VN+Zl2`XpP9f9f
+0RhXY@@m"+1(r`NE8Dll1,lJ5Kpj1JF9R,a6qbK)fHbXE3kRc5"dIG(,eGi$(qcZ
+2`HL9q&PTp6BmlUHjET`rf&!,-K#q5%I1b9ZKL-G3f2d1e*PNPY@cr0$phHpNlXR
+F3hrk3-iZBG)1PrE$805ZHC3"0AkBLmFaP4#l2""S$D+D@d#[!3X9MhEBDi5ihd4
+QUMI-c8aRGkEqpLBbqqK(&[QIAL-(Taar&E2i6#GPNAm)"2R'ZchUbqr#B$SHc`e
+6-$"qS4E"HCM0cmaM"kUIP4BQjFXE3h8HCCJ#ZRJ(,PjELDYk4Mmm*NrQi3Z6%D8
+$El"b(6U-SN-2EE5f%J$K5AkBLdY*TQ2F!F*GNA2Vf(*CIfhhCM428c,GRp#Q%l6
+T6QckQ,,T$YTd"l'3!(#*1pkcEEY$ZGCf8bk6mTB4`rGB$!pfb$r&D2MH5B1rQ+"
+di6ZZmZ#9kiLNmKD1F%DC-N%LED0-&Sp@hUl("(#r$-!p"m!VJ6*Z'#"q#S)C@*U
+'`QH0q)&Ca'Fcm9-#JcV,aPJ!JA[CRjIc4"2BMB&aJ*qKe`aNBi"E[#p@BkQ!0[,
+M"286e$YRh3T5r1N!PFr[3,&[+$CC'!NVC3-2cNI2!i'G(bEA)K9(9D3-4IPBBQB
+d`091*!"iJ`L%L(j@bYA-%rZJ8#K6f&!aUID0A"6RTGA(D`[Ib0@96A4*)JGe'&)
+1@+(JA3q9!4K`[eXFe((QANbIj0b8`j9p`EJSII!D'`AL!fl&DGM5#F1@XK''j6Y
+'RDb`*%pR"PKL(dIj)I![X"NFF(-[6+SKNK*r4,1drm%TF#Kc42I#R#!ECLmE(S)
+"Q[8`53ZQbHpB!DU$*SZ"`djCH!6#lm3JcQ%M6er2cRNHMiRJLJKZ3aDi+"J@AdQ
+$UDA#Vd!NV"`#-1$44'PRLE&T*kFV1dr69PEb)j8FEPG9*@%8pI8#5KbqTY(XiYH
+0YC*B,a-MGVQ*rMb&jCZGC!@c1[BKYS6(`CDj@CC[j!l2)c#h!Xa2a[b5ajJNiRM
+bpkD%DjD`IimIp4@'@FiDr-%EdL0p)J%d%&+'m2m4,aK'fXJN@(i!$&ll4!+3!2-
+D((6Z'5$R6)rXV'[KR1P(GBmSh&'5h3pFkH[Hb8kBhGZJ#R*dhmA)"0II2JDL-UM
+F-cdVhF+"J-3+Cr"9(Ti&BI1H6r"RB*b`I-3D'`'Qifh1`T-ZF$&PiSIAQ$+'bmE
+UK!1Q2[(RH#!M,6h*Qdr!S+`NDKlMajb&LB'kAEN3&+#@Mf&$B451Y4"i@)QScBT
+,#B6$[m2&VBQ(D#''b*!!M6KXrPhPMP!26AGh5*['"G-)XI1EqS6X1%%GZ4+mX#-
+$I#VS!%KVjFFGfJ6TXYYK'@hmRh-CE5JLY4C'fUCh&Fjk9Q()**@JckDEq)p0X(-
+J(PX0Nq5P6&EA3MR)9CbrCB4EahPGUE(%#@lpUpf!KU#Fl1m6'J6ADc,!,6[["MJ
+djZR@SlQF3A4X8*M(!+E1B-h+UHm82EM3aKKA8%IKKja9TB#YAh[!TL!j""9E-`I
+,Vll@hb-Z!S8dba-UcMqi%%XDbmSS3J$%QV[cAf*!fi)2IIF+&1SE$k*iBADc-`P
+I21dP#%S[RYMN)B1*5A+K'arqcqTU-YM&Ih,'H2,*`EDa,Sh(%P39)k-`@8PGQ!A
+UjfNa-MUNUf)3RfJ`e0R*G#f@$2*$0Ih1l+Q&3I8hj8#!a*Z,Rk,J1)"K'U*616Q
+0jD6JRDXBMl`aq+p3P4MY+*&kY,SYX92fULmHl-[3EBJ0N!"VhbK0Ia06[dG6)r+
+#-X3Id2!+06JJ$2`"jX@["8-`&HBhkK-i(SmJ+K*m`6Ej8%`IjHP3cq9TaTF16Jb
+3!1aHc)3,&[cLjh"(H%3chP&,j'K*C)"%9PZMRKT9QD#@3Dh*!fIQ*0`3qI'0B9X
+(,[kiLq!Z4Z@aL`UamXN814Y`T-Sk#'+ME-J1%3eAdN%%5RK@)+4*AE)6iKCm[%p
+SZShqe"ejkAUBPA0$dJrUkPIkk8mqb8F5TYMd,+laf6"RrEH`HaMpU5`+1-4kZ6N
+fI2d5A[mCj'T"@pRSN[a(Q@M''k`d6C+[YR3G!`3lL-T!a3%Z'"Um--B20S!KE5k
+B)&c1CQEcc)Gik&p8rqScrQabd1+69%&MPqhi'#A,iUEa@[b6Qq)1DKU3!)Q`p"`
+GH95Hb)4JC)PNG-M-@GH20H-rq)fF5$+CPNDSLedQhY)@rU6$krKKX%!'qB`Ldl+
+NMRHr$rFG[R+F*Pb3!!FSfbjh,GXKAk&XJlcjXRb0Kp93PRp+LG-BP'ci&dSb3Z*
+2hp$BR+4PXlp0XP'XCYRjq@QcaKB%Jf+#H6#UjKJGF#TjP2mhl9E4GFXIKKSm-Z%
+4SM-[@$aSNajJ!$#0-`+!'[GMSiZG@q@+Gh@HJEc-$Q3JHqYlBIB!TM0R*Q5MId#
+9l+$F&Z`Gk%$*SRf`U#qI(S,3LdGF6@#VNk0`FS)"m&kh`X8YV09,VJc1B-T'#X@
+EBh-*E2%(b$!,(5Uca@aULFNm'*6r2"Fm0(UaVT6r2"Mqif$J[VFi(mDYi5"DKXF
+h`p3e9h4m*VhiSF3*E2!m!8-T'91+FZ)-&X0TGTc4&`$M"m8eq'a82PI4Ti6(%4H
+)0LN6D&lL*PH!'f)K9mD#RZV3U)F*9Ab&Kir0)#1#LTL`G"-fNNhZe9m-F",IK)Y
+Pb(JH+Yj0A*d*J!4MKdXh-I0*[B+NEH02EXl1qDpm1"q#P8N'HVFKH'r&$mbVT@h
+L"qAMSj5$2*4fQfDHCq"aJG&(RdiNLMm@3dJQ%@YM&dKbpPV@rFm1Z2["m8B%YLR
+69K!j9J4e6FcQq"BM0aim'1,L9bB96m$2mdj8#DH&jph'ReS&6,JPFI4LL-jfX@[
+QFrc`J0"*r[0E)Kjkb!-rN!!U,Nkb(G10U&`r)3LJ1+#+83ALI4$BNG9(5T5AX`E
+kfDPm*LAC%#PM1%(`U16P#rL2jjPBU*!!d94rprq!3(!Gf@3Sc2R9j"KmMV)42hG
+1(-a%4TSqKF8r!!!aL8&%3e)$!&JL$e80CNB4%#(MlQ(rEEq@U[6QllUqZClQmEQ
+ZUhUUYRT"md4f8MF'l-S#[@iQXl2)RmI@mT!!MZZEZB83`KAYjjFGF-U-L%k21"F
+1%fZ5m6cVC"kh%&l2`RU%F(S$)i6P@BI4J)%Qh56[I$-HkqrIhrrhG4dJ[lXNlb8
+[2`!9GeiNmb!b)K)Km3!4)JCIH9dQBc(mb,jQ!D5B(-!Q)BKQX`H"NmbLmmfF!l-
+8X95#lmhlmli*)rMlcS+-ph$eYPU'2+,4)ke$(aPkZk&&6Y`1&bTLXGrpJK82JVP
+f0GVmR"(XErGEI&m[NNB3i@YB-C!!1Ye!&S@"H'%JK6-)T!Ymk3NQFEkFfSU!X,5
+r4CELL15B1&a'hV%qjhLMIm!r!,$pBAmF2jI9VFea+)[+D&"DI'-`dFVL[`Cm&ZB
+$X@3%V1"bQ($TC")QE-*dpm0X%&AMCGlX+IjV@i5,C@L98J-b1$eae%FYm6%Z2U)
+Dm8Fr-Z0!'LfqeU-ZCG%[*EF#)+i6Pd-J+Lp+e64#[qr-+FHA@acG+BBpJl-Ae9e
+Aa!2DlcXcbJ1GqJ2DG-P4PqN4Pr&a-U,+NbTSRl6)RJdG[QCe`Y"X,E)C`A3c313
+33FGe#,(UI"PMrP'E`fmNLl@T*4Re2qaT9QZTq+1fTEZf!6PZ'EI"F+Z-8(mA!))
+`,d-3jk2P)4,)3mE'`@i[S-D-J"TCV+K!I`H@fV-p$%B-ImS'rk(&8f)%93)T8pE
+"TD@,'B8Nm&+%FAD%F&ERqF,bVGf638jG)2cq,(Gh[q8*Tl%F5V$9Q9GlM'4E1d$
+MjFSM&j9(SPJDf(Yr00MICB3F&X#kjfk(e*f2IU4U"Hhjqj0*CB&I,$LlbdJ+@*m
+-Y)B0P-2)3NjU-%1lVEfahAH&64B*4+dSXZZ,lNL$CF&Rj+6CGS+++5IYE5F+qH%
+F"a2Cb+6%0*@B*X9dFVN,3-*N!*IQX-2+S-NB$2E2lj1UZfAN+`J5AFc)m)V6dk(
+8k9M-Pc5SX!%YRN!UU`F-kF2'aYfXQQUm1@RGHD+`j&fqdf)X%E$'m*Dfd`,ST1k
+L[+`"8V,ba6pV890,,mAUr&QA"2RTAYDp81[@QVTC@%MGD0iiLLKXL'lQa5C5cQX
+b$!-+1,TjSCQ9+!I&"2Hcq0*"`p+ML`Zjb[3#%`A%'m685Y1kEE"q9SQ6%8c0a(4
+#6#HPAPMVAP3+UbU(B[SXUdmQ`edNH2()`iVJTEa1KH4M!IRXSk(GAmc'SHlPm$`
+A`qX@G4Y9)ZT64d1m`5b5([6!Tq)"YrRl08L%N!$!YXhc9TV1EEGJdkdXAKKHYj(
+2Q4i[AiD!mCYc14N@S1#8*QAE#GkBIpiR#[-KeCr*5F160&*Y(5aZ056J3Lli59b
+m$jANiTiddD9CGBCjLP35"2F-$!GJ%U#9c3G33@qDL9B"PMbkd1pbP6)SmVdR%J9
+Hp5FUCR5'bLYFc%UKmSFa8DJH[5SA%j9fMbkrd3+Maq@QVVN#8KXX"'pJ+S*Lf+3
+)Z4,9Em84U(iKVf*a)Ip,UlimVH+8e[M+6UAULqN3YCiBB*MR&9B8+!U)NU(RfJa
+YGqC1Rjq6TP#p1qF#iarYEUIJKjQKHaNN(*6!TmTB3JT)iqlLlr"SIL6Da!&Bq,T
+ABqE*Z63AhaENi[+ImpJ[4Gjlf*1j&-92aD8JIPcUYDXSQ'Ff6SC)V8"FXDpKdrD
+-9(Z2I99p@RQemYKAP5Z89mDaVllU9Pk&D'Z21ZkN1RL,[R!$!UPrN6'[S3e9`k5
+m'!UcFf%,JmMQC1QiVE&MZV5JlEj[6!(SXQhY,0c,[4ZV'RXh9ZR[3[9[T5QE$b!
+dQ2)VmiX3iI"'&LiVF`+-F`3H$l"DpBbS49GCD0TNJ-J5Lc1&UYlPE4HNqYV"AUp
+l4AQG2pMVVfj5ARZ2H3d)G[1#mM*%l-DMc&LN9pi8L6j(`98BP@CALl622!X#SKa
+13LKRFMR)MR#5MJLI!EB$6%`3qS'2$f'5C9BjC9YLN!$H%jEYd'TiL3RS[4(88hL
+$lK+8cR)9A-Dlk!$h!91KBaK6IH16i8Nlb2@lX[98`pFI&aY)1%ZX!1%dBG*fBAT
+BV"9&dCec-0PPaMbkdBVXZj,$IaXU%HE+))3'I#@Y#L%a-p,I!@!`bKh+X+K)U0#
+d(6rQVqp"4@K[)6drpEGKUa,mf5PaAF0*0ZIC3F+lY$QkRJ2lTFf4$c'TqX-"*,9
+J$T%cIcMJXp1a9MUfe@Kh5lc`SC29!&#Y0FlhML2!YLr)5&DS1*&Q%Th-DSjhL"3
+&*i!FilmpF&ZBfRr&)9laUMJ!FbSYeXM!f,4@NTQ0NmRGKI(je,1#'6ULT"jHCXD
+km[rH4l'aSZMZp5)%-F`Iih1U4A+ZXR)K02G5V&SGa`H62p`1c9A'eUQ,HP(-&V3
+@0KKaH(&bEhdS[eh1fF#J9NIc`9JSAijE95HkB'@D'&lR)VBBbjXih1##YK#a*9B
+TdLVr&rm[mMri,hV-Id(P2`hr"I#IIP$@JK55*EM2X'b'mpA$q%233Sh#LL4B8"L
+daSEm$iF83kljKd-(0H3GR0TP3ri[,$SCZ6(FUL6TkP)iI,ZFVZ$*$f-,frlK%"k
+i1)aMjL+TGLR,jE6"Nlq0,9K$PPJX)iZ6cpHhYBH``-PGSDjhLSe'@J"aD4FMUSY
+[`j*ZSqT-5TJ*h`E"RJ!d9fieYC!!DY'NFKY3VDQ@[iDPaHS@Y)XK0ANabQQ#f,T
+BA88!,%b)!YVlaS$SKR)lQpdM0RBHm6LTFkfNcZ@LcZ@McR@C1TH8&d$Z'X(BraY
+[%lVYrr@I0mj6q&eA3kR4rpm[PA3c+iqmD9V`U(JNd9fmiT&(12Aq`Yf'f#@8YE6
+YUDfU*&H3!-RP-)aNp!hd@%kXKVQc%f(MBTQJ!M'TF1*UXh`$mCK8*hJ5BF@2593
+@2T-@m(!5eV5hb)rCJ50k,b3CJV##E(##NQq'qF9541*B2Ma*KdI9U#-ZAY'552(
+(HpIlNRB#CZ*il58&ETj$qY3kQ2)P-K&'-*HkP2VC`f9rqEdP6ZT5"BlCqKFZaf)
+bUL,aq)8m*L&hK#GclmVS)JT``i$(Uk6M!6jm&f%YN[Pib8c1PR1FS[jZASE!lTN
+q$[XUMf$+Yi+!d(EHCcEMM%4!'Bbpcf3[bqQJ2lc&S2%+&)VGL"2XX3`ZR#!q-9[
+K*VY5H&+FP'1h6R`mJ-2ri*24DML`r!(Nc'$b"T*Q"i&+mR'UM1i&UGXa'Acq2S!
+CQh(['B9&q#FQiK0M%UkG'`(q2ac(%9`8J$chE#-QGbS5P[Daf#0FS'hRLL+Na-X
+i`-+4Im#Ipl2f9"lK&61dj,6#cM$EJMqEBB%i,&IP-b%PY%i0Kk*,Ld*3brHZ*iI
+"p96JSe6JemKii1K((8c+[G6GC+591Km!#!!0lUbpq)mDPd!HI9PlElkifVB%JYi
+fJi-C!V`BII9ca+$H0qjp&q(iX*h"13"jB@-'(l4&"M*b1'5#$[&QlBjmFF4bX%1
+UKKa50I33@D*[4,kB[T(Lb*!!3qU'(&*hc#&Vp)h)'qNE+Bi11D4fb#'e3`j4Kqf
+$T"8[mR#pd[J3&SPRCY(#bHEGDhIF"ibC)F1%fmYl#%AF8Ia%931'Tm&!V%00Tr)
+jhA4BC$BKXSQpkch@QD@#h0+qpElchY0,XHTK1hiUqr1,PY3B'c"#k[GJ1L9`)Vd
+*dbKRGdrmfBFrU`%,lZ2d&c14XAeJh`jaQ!5`C3lUDKq-DMY-H4pZY[qBNf4`Vd5
+i@`rfB4R#jY8'ZQYXaHihHmme-4aS8j1T@kc!I2Nc%R$I#MA(#U5A3j8pc+ceMB0
+FP6%*kjhLcYjh(TrYlK5jJjCJ-bXfi1KT@EPIfISe"(p'FGjfc[FD,VkLN9rhkYf
+"$iFVAe6[%030`)#Y4((Vh8#"'k+T!D8c*)H$qjC3G"Te!J6AAfhQ6S!LEVe+#G2
+0$5-2"MXFZViP(3B5UALZ!J#[NjGPBDV[[(2+j9GlFERA*d1&d22hbG5[$hERL3R
+ZcKN*d1!QP-*r*cJ1(3"&q0R[JV3#YVAMa8PINJ#XNfqG4TVf0"*%AFCmBpI#0rJ
+P1YSB&Te!%66KaS[#1Z&Scb!j$#"X'ppHM,ckT6Xi-MZFPDpZ'Kl1bmBPC#3)HRI
+j9mBCjRHGcmj[Xmae`mch!'`i8CKbRFI0JF8+'4X&E+)f&`,2hqH0c@@cFX2!V,B
+B(!0%dS$,,NcS,rhZV24Y08)Sm(Ta5G$A!AC[bQcF[3Q%ZS3*03(ij3`Dm`1iHA&
+dSeT4#&b*(2k55%JJ53Iha%+!2Y6a"bMQ-)-IZ-`0l%"bJS'+b@,+rZk'VJ@E8X!
+eh2hJ%-8AU+&(@Q)[5ZRS@SDY6XYBGP"NeGYe1*D9pIIbe@9&mUele5@M`E(JC6N
+c9Pe&j08X$YTJa0@eq&2$!CCarT%5b3Tp`$Yqj,!dBD)Z%K$%$B-ZCc,3TjZfEX4
+PI10L-bq"HKq!k+BmXb!ZKJF'(bYIHUQkdQdD2rcMIA"AKXPaN!#$m#q*cZF539b
+X(+!!`kUY1HNTm!*f4AIpUG[dEZGP4JJ%J4GEKCYN9@VN!8aaLSA$j'&VNdKpSYT
+RUrG-"Tk4N`5L,Vr14JLXC+ak,jXfUPNZ3NR$"F$!DKqV,Q0L-KA*D`#%Y#fGk2`
+$LM2Eq2I1aXl(mQ$Yaq&##D2ff!PQL[Ji*%bjimCc[$NN"-H93&U%03iL)#0%1(a
+%4Ya%2#i5kEK5[*%)bJf%RqFmaF8IikHS1%NIZiUAmdI9c89HA39@m+G59YHTMbF
+q41R$51+$4KqQ%Kr#p+%Lm5&#(h*M!68$NfkT,P'0XB!lbL*AQc'0d$59B`EXGf)
+CUZf[,R0dQc!5Aa&5['8&"iMmidCJ5bH-c[AVqe)UbR3(&hl"G1I*P#d8lXjrf$%
+CC+D[V@05SQN"9($E5B#Nm9-06mfbQXe*Al-4jr5fNjR$(6pQ9jVY4pk!'ZdL0GT
+m@HV-"YaV`V`4MebhL6BNC5e%dFV+dC1NEIm0ZR+j#0'&8#(X-KEfP-aVEZX,L69
+0E!-NYR%5fe3D1pe,BZXMXGdPX4@6d"`NY,XN0*9%eUXk%X)kP4$63%*!+a1Lb5D
+%8S"3[)T3HK*#-40##3QK1+QE2@U$!hZQ%1K[hh!,MRhGRPD$LXLlFFYI(RmTeR[
+mQkCXHZ0)2BTKhQRaGrNQ8VIB'ACD(2-hq#6P@Q1M`m,G(JedY#Y5G'@eP+&c8Yi
+AZ"-*#!fUJGR&X+0MaDhE,e+J%kNZZ6fK3#k!+,j5ihU!)k`!r63QFX+P'`ijF&Y
+MPI0m*`23f1*BGFhTFlCcPTEU@UFPDSR9aQ+iUA0D3'lb1VRK,DP@8KRaJhArSF!
+dZ4#63aJV03S1l(##Vf-RH1pfCTF8a4G'Gf2KMT&``b6@'I8b(1@4@L#(GA*Di!U
+pG#Tc9B(J4Scc$1iN(NJ*4N4f+T!!AF94$`$#NMI&Dq83km%Zm[*qr5+Hq(I`QBV
+1rZZcX5T8(m33S#SAXCd"VCFYVJF%!!Q!m,F%"kDP9N`LapcPr%K*H)DrcH*)ZA6
+i&F`!#3X3dq5mf$"J+rjS0AT204@ZUY'LK`KQ'`6-1)K#8b-d-5NPk-bd-6cf*FP
+aE5N&(4ITGC%H,-9'&0M@J$*@dq%Tr)c*6,%&,%c4*0,$'pILdYY10Aaqa28!#N"
+UZk"5lR*ATKqVac8@91F+'lIFeaRQJSRdBhB@#541k!)-(R#fAiamdXdZ+(+EiI*
+R)QYmdIi,MPYSN!$NA08qr6-4q#2"KJpSl[-3`,&&1&Fp221fZ2KMI6"0AXaUB!4
+0)kl*98E5-i%()-$(9VVB4ApKjQfS["'BG6%q&ZMME6`b'QR"KfEk-)[L'H@%QSp
+0)m2,UfhF(@)MGrE,KkK"cd0p$rLP`BGPC1QTKPI2mZ9M)fcU[(R2')l0b*j6$BX
+fmFTl6IBBri3(N!"U`NrbefGP6MEM*bX4r2(a2q#Ej!ri"4j#"p-rfk822f&jeJq
+MpddN0TK`mBppkmlqb"U3!'efp"Ya*iPXVkDE#EVCPq'EjZq,"q,dm8#"EdSISBp
+,*A)92VE4!mAd!+[r%5,lfhP+E'ij2H#M"rD)KC%@`5,JK9H`[(46S*XDjD%2&@H
+M%IG0d8L+EXl5$H$qD*M%@LUBPXEf"6XCQbNJJMiB#&,+6Lbbq8h2!"L+eF`'ShM
+f'I(LI0Xj*N!'J22BJEB,Z,'IDYLrA5&'-V,2X$-FDpK"*Yl2-&&krmFA`"CrLm5
+lR)r$RcBFHBdG$4%ZV-AL(PVXKZN[`i@him,1`RbdRF%&"Si!$YKj%T@HP!!Q"0#
+!KmXT'E5(MLileA#iP-&Hp1)Z8Kh&A(8dR[#bdVSpbr![LS`GPrBCVL`l"p9N,5$
+%eq#!Y--G9e5NU(SV0kSbl1Jd+q!%mAj6aj%Q$L#8LKeekC)e3bip3)D$0,eRjCA
+)9BdA'+DdJ(**&&TLSA#"hPb%aFdjqEf"f$)ki,Fq$6FU8Ji!'@,,2,h+TLC))GJ
+"iU`idX4*b0KU*eFTrZ-QUP6m5U5NrR!pYXS2aRN5fi0(kT4(UX4(L&Y-6%8eQ,L
+8A,GIA"a6AM6L(dAA5L%j--TGkqQe)p5eP+kHJP!AZ(XqIAhN!@jZ$hEeTkr3TeR
+4dCqq#IEb@D%fRRjYj!%69&4+pB5*R2j@E9CB&DUF[mNRb1a18QK*8N3`9f`ra%S
+Sc6NV+jVAM1pZ*MGr*,SQLSaPlE2$6$)EZhbMSr(RZKVDTk-hfJZ",IFjR))#L)1
+B"Cl[j#$[ZbJ)fHRi3))FD0I5'M1BLT[d"$GBif3$@+F+Yp&JQCh,c'r[,M*@i0M
+AfjRB8a#4NChXY1kcLQCRa#5ab`T5e16SB4%0dF*T$Bj-SiL5[mlf(pbM$B66AY)
+'S)T6IrmPU6hbKM&IC$6LNRrr"Ji*$kBhVGE-S)0)R"*!%mpS5&`Tl%0XQ"Pf0+a
+Me6AV2qNE4VHVSS6,ib"I*MXbrI3-2e53!,l#c2b2d"K"4[!$B!`rkf43jA5MaPe
+FFUSc@C!!rRDIGA,qf%Y9Ff*dJNQJeAU-Jd#iBSb6r*aQGIBLi@3[q0fYMpM1)$R
+8Eq%%r@K`lep4`6f&iUi&!pTC#1bqcd"%0YjiHX(15F['dp-THUJ@$cfPcL)%$"l
+q%K@qfAMkGUQamA!p&cRI,TK'3$PD2RGVleq"&!iqRZ($CYN0U8CC3TqQ*m!mhN*
+6KaTDS[&P),5RI$*f#C0Dck`4f+d,PF'kZUL&@hpjNP%&F&E[CN1F*2F'GUFeB(R
+GiZb&5fFGQ34-VQ!b5Bkfdf+6!rLSK3qJTMAfY`"*rUim9NA&9BF+Tf*I0lJKL%M
+R9k8aEJ6MjpL4(f`Ha1p%8@H+!1GNB'`bLiic*R186UpK&apQ#ePB)!#9F$KVGNF
+1jHrqC#!`hMhq%a3jNh[6J550F0dLGl*+[9N33B#YB*-RrZ-bS26DJZLfbB+H"$j
+"Pr`D'aHcD+*KKmcTl0UTKYhA+@dZI5ScZ@#qHiajlYKHXr%FR)@Br,5#l!#5lVr
+!&6ebNVB2D"YG2UFDKVhAdYLa`!3UepXLF`MDDhY2UVSc9G,a"S-F#0PAmPCm"G9
+-('NqhmR(+KG1$9jiYT`B0YeCB!qEkaJ+%`@CZib#a)-C3a3QTqC[S5Mhd'HR`3j
+0+%jUF-cXFRLT4,-cQBA+EfD9RqiD"&$5UaF[03FSXdS'[VFSbABdhVR($L!h,P!
+M,B,kB'6B1#I8#[RX[)"JiH`8BX8eLJEa2LFj-GP*),X3XZbk'&@8D5'RLk8K6Xe
+!6(DI1qTB9#&6L&2eYR%cBD84a4id*fAPH*rGF%ieE0QTN!$ealR$(,Q!JN!L)C0
+AR93mCPYhikhE3Shr3KhRMcpX8VA&(rkQ'jZX8JUpP3V06!JmP4"11m50PiiQm8K
+MLda0bqSG3`+81N@0&'EZ,6)c2*TYR`PL-QDfI`pK-P$'X*j'B!FZM`19EHD%#!0
+N`m*a0Y,@cN'Vl#RN6BE`Sh"m%kR9hb'*AqA(4irim#JqP1#K)!49PjfR#eVd&!J
+jPCD5bM$C@F[I6Jh8i@6'lP89RrUD&p(-ARU0qrjHcb9&F)qV$RB'1iHZLZ*1RC'
+P8R8jcrHHArQT'FGPrPfB!a[$*lIB"$CBI)A&EZ@J1jkF1-L6-NGPK#TZ8DdcJ'A
+9Z*)!ZJmM330ZZ"r@qhYp"4LK5@b(h4eGY0""e)"-G&V&658ka$QTAM&qEXLBJ6,
+*ATCN@L[)i(-'U3q3!2e@N!$p9S1ERm'9[YJmmKF`qRSM$iD6JDe0DT)#b(VmfD5
+i$9QK3"Uap4j8p6eXVBFF#$4h&PY3mI%I85ME82MXUZE%`Hqc!U2ZT66R*mA9)a3
+A'&FIb-q-EV$+`!2Pj,3`&YZ%2r9kdKrXacqL#8XMKi6SH[DVTZ))1jU$b`4!LjV
+BH`![Ym0&G8qX(!kkZf*Pl+BE+m(,Pf-eB)H5#L-Q)e@'h@&T[$8lJ10IaTrpq,1
+,Kcci*CFZ'A,T4Eid+VLG5-[,cHK1eV(BHaXdhi3r#$-kX!'I-9NpFmH[HD`E0)p
+p11#i)jSZJ$eGpYePF&D5-+8Dcc$r0'+j*`1!1a+VB6FUS"0[38(`C'`EPJSR@PS
++f"1J@pRHF@jXUc*6@pi,d$0V([a"Z)LA`CLfdm@mbX9HpPJ2YU%C!C`Zie#&Qil
+b*5#qA#'Z0d',Xi!A"`2hf2Z6bdN*P4-6$+$bpfIed%%bHed(0E0F+#PeJ-c24-1
+'-Y%J%bV#Q9!i+Vr@,`4Qf"bXfTcY0k+*AjP[2cE8#M9N*6*M*&53!!%9C!J9&+X
+#3H%`UK,0HfSF*`[f$EHQjES2KbLLpET,PI'%E-f`m`U(1HZ*9+qKlV+T5(5AGP+
+1lF2[#UG#2&!['#88dr['P0*G9KbN1bbMlL#$hi"5b5TGSP'9`3qTd8h,C8NXd'S
+'hYQm621+Y%V&C34"LDlf8)ce3ZA&9K6bFDJh*3(D)aUb%Ra6)'KZP%#j9p3q1[S
+6#(5eHRFQ#0Ak#IkX9[fkQJbH8P4q&lS#50PdUHkD%Yafc#XfmGAL3$@K9S2-mRr
+LS5lKk)*S@Rl2"YRbPfGM,F,YN!!,5P'p2m($Um&kYFiF"a&VdBNB3Q!`8%KFA$I
+J`!kQ0irA[e#D!qb$ijcjL!hT@`d0&[CY'&KSK803U(&JfMi+f!D0"'S2YF6@Ff+
+J`6,B@$pfb#ppQVrIpc1`bA$,@FR&&@R)Hd,ZD%2HpaSRH@"m38T0(D#2B+eL"jl
+Ra1d"Q%'+Ym*T+r(j5!Z"!VDX5@SE+F3cdD`J1NX`m6Er04!E+IHGdCMYiQ6cP5"
+5c@&Zr-j06I8MR3bTlL-(5e4*Z&KZX6aUBkJA6&mHLd,r-4*Vmi9IDB9EKNeP0R8
+CR!"qJNVYj!D(F0FV9lFjThUR9VB5UIPj'UN453mQ0Z&A!R6!0S@FR-J`40m'0G!
+'Gre5G49Y2i$YahPcD$l8FLD+6Xm`K-erh&IJTJ)H1cjYiNpRSX6%rMDf4Nh4p#&
+-C55PU)@0#D8`Si2H8!108*aC8JXf8JZf8`frke2F@GI!X4d+NN$Y#k*MF$T4CYA
+6LRVBQ+BFa%9r`4H9Vj1#f#M8!`X&bX(')Er-JSR-CLfr1Bi+l&)8K+'EFErPK45
+&c2b1$bU"Z[K!(D@NKHM@HkJc$fAmbM!XKe8(D2KSkKbbNP1LDiBfREGD5A@BT$T
+5#YMh@B"p2J,l2LG#jjqk'F)%1@VJG+CRJ-,M!B,lAXN%9@G"8q!qhV!1q$N9TY)
++pUrGdF(J(N,A(3F(pb)qGT)YLYMD2H%NJG652JM1m9!a[*'2-3!3!hp)EMd"GYP
+P#(G(+kN92m(l&d9bAfjL9AAeAIQTiT+A8J"[1a0+$(,K*%J)V$iE`#55R0r--+(
+-F&1!PMr,`VUmXV$S6lk-'Gardl"`$!YIqE-Yr%UYXP"a0b8B1Jh!b"`F`0!%J''
+eTJ-BJ-+8TPidq-JSUC-f,N))fmi1QZ-[bA"X$`M$jBbI"pDi,$PNcJ6l1p3a",c
+(EdpN![dGSpTcABjZ"+mp5)EH9a+MdFEMXmfjJ+1,Aqrp+rh9XSlT6ic!i8jfeml
+10ajIN!$"kpc4'ip2bk#P`!S6L3!dN!#BB)8*05'$0eQGdZ",Tk$Jba9&KD&Le$J
+Tqh*ec2m%KK(,X"UQ3fZ9)dZ8!qZ8!qY`i!le%"4@15S9eipLpSJZ3USbqVVSZVT
+lq@i,91YfX)!@5TpS8(eJ'1EiSH!HbdSC[B-fZm(S!&U2"C3Q3cK8"$h+4T2qISq
+-VZ80BN[8S%cC8K@fY*IG4aX(&Tl$*!QbXI1BM5NU2+S3A+MPm0#Y4AE4eS+d04X
+e*J)$6-+V"'Qa3E4Qfr9#rU,-"IHq-d4mSIk1R&EHlHMDq`l%&cTm2`&93(bF8ZI
+AHpr4Ac9!I)A3&BdK$3**)-$))B**)-#)VFp[a'q'`6l[`,CFJimb,+C8DBG5[(&
+4LDN+mKK-S5UmU*@U%U@UV"jDb"A"k'NCmpraX@%Rd3IXkKKAGJl9fh!('jR"4Z+
+0Gl#445%+36l&S#CBB2AIBVFIA[6SrliS-rkq+G@DCSbR&m*N1+GR`ijZ)plB[E#
+AIq!B8-*!h-dNTemB,PF[mBG%K8,TjM+N3X+a-),UV%aXp6JhfD@YSXMN1k)ia&E
+eaEaKYee!miT,hD2Uih#5D(-(0PM!)'J`'fl!ZahTY6LRbY3+(L!X'fF`EXk#X#I
+k)cL8B4,%*)K*!"-0Nc!Q!8`qrK'lN!#K)38Q'aNSa&!YiP,P3d-dFPLh+LQU&*S
+,D'"UY*apE(lC,Fm%9$2FX)a9'2VTPXqjSTXq!GSc0[&J8,jiJ3%r'#bfRA6(0PJ
+'KfkbTX&*D$c3-0(!J*'4clMFj[GY9q!DB$,B93AQX@$Nehq(Q@@R#`PUIka5Kcr
+JARGC*"N+IR@4(8AP$S)L'B!mlH*K[9U9T$'j"lrDbB0XZ2FFX4PK2&c[6MeL!fN
+#qGV+MpcM!IT5(4""B(S&(%'EpB4Kp@Bqc'GR&3M63!L(&$8!9Jah9Cjq1cd1-93
+9(-GIP4I!f,hLMX`a@&rV(5p+rI`MGaB$mL%FmBlh)5(+0h!@a'XM+&iBh60j`i&
+Nl39ZL)%K[h$BqP%MPGDiSSi,Dk9SL$9a44ST,P!-qAF($@[@RQViSed-hXd&H&L
+S`qG3C4Hc#6Xl#dYJlj1qak%QNlk[NG+XFMi"JJmShBJ2@(jXF9M!TP@C$1d`+&2
+j$+FE)HM*H3a#pjj`rmN'aQf(,E49&iIJECf&r,0i@+B3rZ'ipAk''6cLjMY)H%i
+iF%'$2d'K)@fK$9C&0!9JTm`R9Q,MBmim$m'&iahkdEaCMpD2(pUfRDS`!GBQ*@$
+Ij1Dq"fP0&LYek"TG1!k'L"PXGM0"UJ#"X%5&!#4AVa*!XUq(#5fp'U2+0Z2P@['
+5SEP`@N2)`8'Z'&4+2aiheTYa9$!$pj4+,Ql$c&M8RNQqD+Yb0*,&eH2+C5mUPp9
+I)V&4R90H[MC*fdQm4%1%DP0j1B01"8&mVbpc03&d9Pab&lZjUfeNpbm6Ml95fMR
+%!N*hJ@Ja1'#Ge(l!5HN`!Bi*9e@4)%k[6++)I(d2dJUPVqp")N9md#+QK9c*XF4
+#VTD4Z1@+a(RlV6F+9j9YBaLeMBGF$`B,'QNT"Sh$D",+$'&+E5EBac@6IcS[V6-
+!F6MBK3Jq`qa,h`1pFB5jD!L6im@#Q66"62E#2"jRGH*R0FP+ECAbDUAEqAIH`VL
+ah*IkcB0A9N50ZD[M(b'"cUN&+CmdqSePc2BLS3Y@UqG*5M1(MIZCINipmb"#25p
+5iVK5*1RC&HE604M3%3bSE`D"5+ha(2rrCAB0qI52P5%I2r8E9bHP2J$NThIjGZC
+Y(&BP"MhNK@q0SpVD6)jB3E#9Qd[k-%5KNI3*S2P&YGG)#PA$(D5TFqSb*r1Nm4e
+fcI"lTq"LNB)D!3Z(6fK5)aS36D*aLlZ9*j`X)rG,T&[BS3&LZGl(U6'Zk'NNaX"
+i)j'['HIAIjj&Te3hKl4EN!!,6lJA'*pa2G!6Am)BLZ5cpb)IiXm0Yh`f(rRcQAF
+MDhq*B,F*`9,+Zj6%#dF%h"64i%heB1rp5%mra"embpfq"`F4HaQ,R8N4YRZXi2H
+FDJKIiNEG4`Rq%fVBrXRIH62M4ZTJ`Spd',dNr,8NmK-NF!c!DAf*"&iPZZ#A9bM
+#RMA1kd-eHVFE[Im%J8I@N!$!8@aIrPT#i(cVd`Aqj6!*[!DJHBdlrhGHEqrRaq%
+S%$jk3h!4Ch2XRB&l!B$3AMJ4p,#SURE5i+*Ph1"D-3`T$h%Bl-bM8eh496kDUL4
+-K*G([S%+`DbX"MNSP(Pllaf1[%FQJeX3Va3fNiqX-NbHb%0`YDB8%RhqB1CCCbq
+6AEK%V*T-JQ49BRR,j-ILaPhmFaYZ),,0ECa),NLB&5lfSeSf+pmS%Qmh)bhS@Q$
+BdJ29r`1RT'mr%-d+!92Zk"0'#**Q6*%49JN4r+Mqi%C)#NR!BXXpF@Fr%61(BA)
+cN!#0Rr0S43qTf9-0S9N3dK6B!!FRcelY0(S&JH''4$cijqBRBA6pkcr2L5TZ"-m
+'TeqS,qe#c!$KS(LKPjhN84eaSE9dS9F`Q'`PGeGF#"@0I!-AFKac)4XkG$mPY82
+'6GQ$SB4lqE+C&lJXJkQ5"QNKGcK+8)$B2k4#j35DB!##@9[&c0VJ!+1YL5'fQ)%
++V4C$fIT#a"VY%N25mJqkS"8LV50'LZ((1RG11(&NqYhA[Qp6K`G$HMa`$a[SaJ!
+$&0!cNfDBK`8V9DZ`8YF6E&608$EU5N40B@MLESr*E*fMJ`a"EHbBhDp2Tr-mU#X
+a68eJQZB8TUPNN!"03NFE[#Na"!2@S6",63PQUICJc")A4K%+3mX`Di4Z`-2FpJJ
+PMXmEQ-982Q[dHCd)a@0e8*'E!([!I0)kfmj8pk@chrSA!26G6-SmB6@&jTFTqTP
+33d@Fr'V"-!6bTK8#0!'Z#AM&3NFmJYG0@8eKSkS'f5JdrNc5S!T6a1bF*KDYqL!
+X@VAc2,X3JP'VpM46Jm8`h'qKQL)63VRVV"LkRT2B,pj'NKN`X4'$KPSfFX*K$80
+QYhZXUACNJ4p#5MMP5H%ii5)hkRUJ%!)8KGe*6K8SR&J9ETZj5kB9030*B1'MUeN
+0"4GS-0ZNTjL+%STphD`S5)r+j$TP8BV3SK5KRiT3ib,d$ca4-DFTV##85eY6)Fp
+"mc(-S$94B'N-SGc2$'(VN!!K#cJFiUk0!@P29Pc&&Yp"0m@fP%$VG0Z&60ieKF'
+%8qb-l2kM$a`VVlTM!&UKNYrmaH,9F3Dm1jm*[2QkrX%h3Q!8$l9LmQ$4"3YhaS`
+3Eclaf"b8LRpbrXd,r!P$L8IIM1(6$`T5U(Tk+)iQ#a$G6kXBA)2DBc88@jEhD-q
+%hRbpi63QJ6G[T"fJ$DD-G4FrraXBC$H-TD2imkF*9XhNJ4liJ@pM10IB1PcNaF*
+9%$PfjeN(4UIk0aLQeL)R+kD[A$Slmb`HZSJrPpfbr[-Bh*EF5#LjF!*TUBZa$`'
+kh*MK!4Xr#fIjP9!C&j!!ZVU-"0Gbcjae(J1fR2Ik!B@M3F,k-Ai-$)ePE3U*($5
+)qp@eaaGLkq(%fM*ppRC4E)f2)ASD'YQ$VXk$@DR1a'0QiV%32`DR",S3KKK+(1V
+C5BY"B-`,lNF&8d(Eh%B2cl(,ED`9Mfq$1M03,4#A#%aM6Sjrj!'lE)lSkPB-NkZ
+V@lbD%8-*Bm%*8ZBK*LHXB"0$"I0,Gq)P%Y[1cb3@pG',X#!d4beEUErq06[hD@N
+,ME5&iD-@4SFX6,ZJ,%PEQ$TfS6`dC'(+Q@J54kmh$APYTKel)HeBqe((AKUbd$j
+i,!rG[Rbpm4Pq%D8ZU(mb-[L3!"KmK-PC!5PSq(c1&f&3h'`mPBr!bF(PGl4[k*L
+ZhG!aUaR*p-&(H'"SX)E[%62-i%%cXBU0#%cba!+q+iUEKS*@i)6`iT@B-Qba'$k
+9S2RBBcb!E'6VE`66!4E(9$VpiY9R00(&H8"a*K3!(8*ABRLm(Q5JK)B2`9$``mX
+L@8%X*VB,%N)$mGk8jJJD2i)CU[,qFGqI#MF@lJb+!SA+R#L$bS65#9jlH`J,bKI
+NlBZ,SSXZ-ZZdlL4F6M'*P"1l*eieZl2%#-lb38RcEDmBaZf&MT+l"2ZjlNbI`SJ
+'V`dH*eHjA84BA@$h8X3F'fm2#Bb11[#%'%!8l")Ul1e(`(&kl4L'PHp(8diS,hD
+'jB-dXEAD&pcDR!L$eK&l6q#)bfYajfNV'J+9jH6#JqT(DcL`K@KZc169(!FQc%4
+AlY)V*#q)BT+[iDMB#PDFH*L(*iDL001$9Q&fEK00B5V*"EDbB+Sp4&65#-MQ$rS
+Hp,F6Z@Rhl8d2BYJ)LG(XGf+3!(LSDMm2!bmfp085JL(N,hRimiQ(RdarQ"Q8dN9
+bDFEP8edLf#biH1MhrjcqeH`c&G+Lr(-%!-%%59TjP9fQ)QF&qd#$H(-U06NU)%,
+mi`B8GP5GqZ+6bh*AMG$ETCPa)3CHkY%(A"UMm!D'Q6+&)I1"AT-(fF"`'e0'+0e
+i8jQ4"i864Fl[If5NlPUZ90Sk-RQiMQ[Z2Kj@qkl&eZ(-C`$lYTei0LqD+0'8rQN
+3QTSFPY,86N!d6kfBfQRDLUQ9TJDQV64eBQV30)1TNkBj6$-dc@+DSqNf6,-dAF4
+d'ddV-&fND4l6#TS1B*URk6LQ!c5G`R5FTLj-TfMDLkQ,TRfBpY*d"-jRhNb!QJ[
+*Ip8bJB'1C`HNL6pfr,(L6b[q'%CJ#(P1NKKpaEm5BR4q4Q(NVl04i"mVZ+#V'ef
+*9Pp+$'R%c85iZabBA+kE4j!!NdbT!YJ%-1Ak#aLr9T[q3LIVUbp0Ab'b[KCreM"
+Cjp$58icE0Yk3!$Z#iH'qq-eQhJ5r3[IZdKIrblGZrqVSaEjChP)e0rKV3rH1JZ5
+ZMBA)05"&!q)DD1T4krjiVFU%eMH(M`B5SGX1YX`G1rJb+2-J3[81T,L+R(RKb[q
+aQ`b8)C)fVk2BqI1rL$-)2UKJDqQaVK'##USYI)RUkfJ5p`ic&p905c3-CR8AAkk
+DNm(0rh'fqRTXK#lr'Vp'',q!3q[&S@[("+[)`q$$D6e")%M")'QZ%`UPf'kFNFj
+HT3&eh@JF!aSYpV(cCkA1B,SX4$bQeMX(3hb3!#-)Lj89Q-X,81S-S@VBc%JK-&@
+4jG&06QmpkEdR9#`8SX+54bV%F$qqU11@mTR9j%Z$Rj(H5"Up$S4%I)P"CR,&D8q
+F,TK+)h)(4+%icR)a99mLjNT@lf9AJU%TiU[@-6&NFe`-'i*%E[2KqaRleSl#29D
+AaN#1K`0V4LU&RC8a4!fPXmjbi1(SjNFDZUE,'VTQf4fjaqK@I8B[$r#cV-1h1+U
+jMHFXR"TdQaLbEXS)kN@PE,1553B+kBl8+!9e8Pbd!1EVfH05q`)ZJiDXh+!Pb3!
+8K6Np4KFAJd&ZcqPTKU[NY-TGmp+efH)d"FY!)4aSB5!I-PPFlaG3@`%-"&`N1UD
+e$4fha30ZHQ!S)ipr"Q45'@*FbbQ*m[(%%5Ba#BkYAm,)3Hr+fFCf1!$lMH$KcZ*
+VEHIdkLS(aF&DhC1c1YJB+LEcVp293'L"2[`l(`k#CYF*'N0U-%-93IRe6*i$H!V
+fA+2XPP5*a*I*JDFa$`JH)Q,)F1EHBrGN'(q3!*4j$-8'Cj!!X#G$EP*X@#B'GkV
+J-)f61qXf-kb6NBpKi(kB@SI[&#fD`+,N8BXBhZ9&Rk3YQX#LRL,cNBp!3NJ01ZT
+4'"[lEc&M%EYj93`BL3S(9P'BqHqLZS('%5,eEhiZIIJN-6LT,XMr(#V)%Pf3!0%
+E$"@3!#",&%''dJ8C[832(#2)k'XN5)"1d9NKb1K8iJKl3T!!R0"+kB*mYE2B2&D
+3!0&Q%Q4+"a'e$iB+8VZ4%'5*!X@)P&C03TMK9i8`cD1%DBFC0MRC"+B+cr(rC'S
+C!Rj650cf3$MQ6"irF4+8I3i'i"NG+UMr[25[[f*"9CDQ#FS13H%IkU*PcA`XPXB
+2XT6-iUYPD8ZEDDP'5kh+8[Y45d%1DHN(D8ZY[&3HSU8pbY,QJbbp68[GD8YlD'N
+6,@e9PPU208JX&GZG5e[DLU9hD@(T#brmRh6*cG9T#dZaX"4`HS[i*dB5aKc@MEP
+D0fBfS5I6M6PD4XCF-Y5Ba3!P"B,VM'"LQ%F"l@e9$@%1J(4kYPZqh3kfp1[B!JG
+")I()d-&(VLibk2GN*d%YSm`D2hPG#C0D`Ha'2Fd!K(J!UV#j$*U-S(83h$arQN'
+Br13T!VYDhBB)8M`XQ#!&(4SGCqfM)%DH*"DrN[ma,9N2H0I[1Mm@[mcKh,`5cTe
+(-rCEdlA,E[PHJb1#YZ'@cc8Dl1f'JJm8"AIAZba$1Nb4XrF(82!mC#)l+EM1jcD
+UmCPlFqeIZ-IZJmaXdT(Gdr[a8+GiD!l"Q1-#T4me-AJ+E@i0`TL`aq38de0a"!B
+$r%%243M3#G0,T+X`R&`&%`R2+(FY``8RBhZ#CGFrQHQIm$-P@2QR8LJ-6B&YUh3
+JJ3FC`mX3KFN!!TNjH5UN#%(+2bFa52NKJ#abc)-"Amr!FB8+fh+US6C$5qfmm*X
+$R!`4PkXGaI%0rlb6AUIdcrpF6Tml4&"1LbcdkC@d6c-iTRG)eAU(9'Z+3@JZBKV
+Z6#3(Nq)IBJ*8)q&XlerrhcK%S1&6HG&h+18@0Z*L+$1'Bp,JK5$"eYCQ2-5$[3)
+)(X1r+X%T1KbkIR4`3$CqX2LRYR2&2FrAmi!jdA2X[h,*h2+Q"F-L5j-rS(NaA"q
+4PK3Z5kP"B*crm50ZZ)+2ad$Q88X`*Q@abIrFbF&HXj88pacp'Pe4mMq(amhqBM%
+fNTHrcU%q!k%CC6'D*NQ[PVBeL&pDMcQ'KdP0LDi,D!!*-R)c-G&)"!f!#DkBJ$Q
+h)ph%M4p,"KX$T`r$"3!!)aY"4%05!`"AiJp9$@C%!K!KiZj8lm&*6VcD+lQB+m2
+S*cN[&i)F6DhM8UU!aT`R2DjJ+H1km46Z6ScmrKD3!&,(cC`",@2GVKShihBb@6H
+E54-E$','d&[V@Z0N(%2YDDcM@*YK(1V39!de"b@Lm2IrIZrhhAI!iCRdf@HIHAi
+!(@Bq*"%3,a!!%"!!%&%[PBQrD'V#(r'M9bL3!0*K&3jFPbcXNEc'ej5X-@8h[KC
+*$(V54"f)TX`aXq@6j5q9@AX"R,-M4Cr0RaJ4lDC09S35'aG(%NGk`!*"@Z"R&cT
+X(PMCZ'ZJ6!5Rl""PVqP["PBf,DD"fkE'cFL8cVKSklipKL*LVqiNKAhiY!,6TN-
+)KeT&apFM&#cU019qpKU3!!NJh`$#EMV4GLj5p-8N(QLrAAPqdUAV`SmaEJS9[C0
+Q0T[Ua(PdF"P0QMec$)&E&$Y#cfD12AIeR66@U82TT&FkH5+*5#NkpD#6B@"H@p$
+NrNB6HhUMl1PfpHRFGp)kAK'GT!cVlAI5)SPpEh-4k-,3HjJbJb[U2Ia-al,&fJr
+($!9GTq2R4#6aB*le6AaLiTm&k3-r81+LGP`#SV4a-`EfB1*46'cM%rIJChFNdEk
+$2ZJ5HPEl86G#`Gdj`K0C+RASA-QR*UC@XbZ6kRclqjZD'$V%&R4j'PZJQeE'&MM
+3b@PXJ@0k$l)&EH*9YU$Y84(dJIKPX(LXXH"N[h$&)hbaK"5XQh#UT@2k+$jSf$f
+Q#qk('U`he'2E)dY2MA8!19j8H6jTU"Krc&eT-q*YDE6G-LLl,V622$28M!+0K"C
+c![b*QE)R*YaMdY%i!q@c"EEeqeAXb-5Z2f!)X25h,qcIjeZ#,ALC'%'5&k8NCr6
+e4H[5SdR*U)X@,IT@5M6e%qGDL-j,f@PR$qCND"Rb5NY,56kE(&dNpRi"$r9HXIC
++3@EG5HX`MVA(d')Fekk!#Ef%a&!!c1Qc$[2&GK`b'%)9Q'@RJ5qfC)jT)F-CiaP
+R+-iaSB6LL2f`f5f4K0MN"V[5P*J(l&m8kc)+IZ'mM5jFk8M["QZ[K"2PQ-P0JAD
+JBQl1i#+L-$J#aKAmbT3Mr0K`4(4V)D#'%@+bd`&5NP0cXR9DHPBf2JqN*fHPpQR
+CfM%YpfcGQC5F%e&48bPmi'#@,LIp6$3e05Y9'BTQkj)[+Q15ULMSUi4jC@SE0F,
+jS&h4"5HI0cY)KE&K+ebeT"ch@"@UDP8Z-5a"CE"B@!M``)h6N84"YPBShF)GHAA
+m-J*!GRc%MDDj9i@&&",h5XpeI*hq*c8T,'Vc%!JA"`HH4,KmGk9`J%bH$RF'C5T
+P5,qK"9Yc,+dd8LM)3mH`$J2Y!2)N30B9L)R$1N5JP'IG"(A$J)Fr2bSG,'E3aV9
+D8qi[&LV$TU3M!TpEL@(L)h)@URRJq%b!TYah2X8%V`&UJa#SUJELSLPh6LNq$N5
++jUaPLLJ1hAk(9k0QX-il*dbj-4-qEZ++L0,PMq"`NMUKmbcHm3'`f3Ef9)G0aeR
+8%Bqqe03dcdd2NkYiB(PJFAI,Le#FX1#2!aPq5@8"K3'#e-h38M1VR5,K9B26HJ,
+)T-CEqFK5B[[Bff$l3Xlf&8!d5fc[keABAZTqVCN#PCG@NMX8cSJJQ(r8b+k54-K
+mLJQ&2553!'84ke03GPP)3*!!1r6Mhhh"h+@&iN)dSf,K3UiIecaFb$he#lQePkk
+3!$)N([U(KmfG9N[(ecR,e#dJS$P%ciRCk,`k2YVa2KYBM`mkeN&L!4-AmPLU`L6
+8@3XT,S[,Ce-JGT,3p[@G68U+CQGS59NT@YD"C#h,V+@HcGC&r4CCc$U6C6l$CbN
+LQq46XSZ%YjYF-PmV[TE4KD8(TJZU3$Fe5YP*94dbSK%"8)F-B-QBN`-FKjUj-@3
+Z$fL6`B!%d*5-jH$X@Je`9U"Q,!R+Tj4"jZ!#BSYHZ,PTm%0$#`rjd1)"IYe@D@%
+8'jXcac+k0Y4ZE)l1Jk*T'!948flJZdka-h'aJcJfFh"qRaj$1,XHP8Y!6Z0D(0'
+dm5KJ*-&2'rdr!C!!#D*!FFZ-F0B2FS@#BCfXhhD(UfLGNrAE3UU+H2GVY3313DL
+eMYL*3!&J5M51M$S8G91'A1k8PPa-GV1*pe!ihqe@-k0YP$qe`jNCEIh9RVSAD*i
+55XC!L'Cba-[Ek-$#&j3$6D0*"CCA&'!*dXf$DDZYAI`53@a2iUD#6"9JFK&43@H
+SQ6VSfX%'AM$"&4X!5N4"Vh6!lU%9pklG*8*8ZQVC4p3Y8dK6T#A2IJ0BiRAR44F
+j5aK[+YAllI'Q8L)eG1hFT+*Hm6Im&-$LKhci5PL`IA!["aZZGV"AUQeeZ1C@FI4
+m*q+L`X`h%@i*+38-@cC1M5BG2*XHV3NjRM6SU2m"ZEJm-8)#i14P9UAp*Qb9YX[
+2+Qf9Ae@D#q+i"Z!0"MiRY``XAlDDUVFA6F*,3(!4`[B1P,KNL`[+BP#)%#e3X0$
+B4bIlL,#2FICKB"pkQ2U-0C@BkLc)[LpHBdp094ZBS'S&V,3'c,@E$Jj`HBL,+)`
+#b[1arA1dN!!+"V(c$(bH)JCN*$4e(#35LC-m$*Jc&XL0jQDPrN6,bGB'8P1Lf6R
+TcUJ1L-+qHNCVCQP08PQTmMY)K6!mmi,3-q$jDIM3XimTpM&"(adkUK4rRdr%!99
+qp4))Qf&dTPBL*d65mAaAEPH50pq9G3(Efq98N!$2U#JS0NfQS(91"INkE488dr$
+X9KJ3DVVaT12Eq-AET)Xhb5kfm)Y,-''3!&eFJTp+QH)EC4HMifFlk1,ma8,,%Z*
+QG6@%!-UcXY0mAri''+(#1N6C$R8Ce%rpk0#DHi`"0XXBB#1V,K1I+3`3ii9%jd%
+fb3j#(3FP"J%$h%!P9dFUc@&PSZcSMlA,"l252p$#N!$q0KQX6)[@jD3N8bdSQe[
+e92pB,LFl*eRXPFNDlmZFc4k!hkH*p$G))3'2p6PaNKKUp*Kl$-Ccac"`$-A(qe$
+3TU1qlZH%pPG,-+MKT`m&@MH+Xjf4T5-#@G`(%bU4Y,pll6GhS*!!m3d4i55MhP6
+Ae%5'6Bdl)8`HqU$3a*dlV'"+`k[4YEeM"Md@56bAQ6Q'LQ(hYKQA`850@f4-Y*B
+bVa&-ppAC8ZBeJMNEBc,QA12-20k4+S1YdX@hYh*#e5JYTdU0`M[5*%+e'-c6JZ-
+cY!q%rQ[0GM&CDkk)(f,G%NB"XN#d6a`4hKYUYhYfDD,M%b"rpP&`F926j#e-,2c
+,3de#QMSk(BH@(ME`KdA6"$XB+61K[APU6$A&mV80@@jd[@NrhR[&mk@CAh"mEIL
+Ti$1V(r6qSIf21[pbk`*Y8IH,KVR'pr82M6ihGA[%1['V4hjqjrFRrqc)IqVlEIq
+hMqdI(1MBGqL6#qqD,S@ZpR`R-ZEqj[MNZ@rPr5Mccmrr[e2rppNcmE1Adc1LCYh
+&R--I(-c0cNVklkNTb3I5IPchNa0rFI5r[Ih(VVZ[eMEIZrRpPMqjpG2Vrq@(rq2
+DdZR2crLI$rccY2rkJhrpm1rHqrrcrmqRrr[MIhcYkkqmYIJEEa3YHDGiBF'XPrp
+Kiq[jhdhmKfhIfrbI0reQedHlrrka[pRaepXIV[cGUPm%PUeiBGh20[cYfRpEmmX
+p[hlmRdVrjIjIYAjZjlqAIIRTVkaI[[,4LUpZq5a@A[M&NTIQ0FbHdpJNb8&@'QU
+`!pPDaJ&H`,B*0qbGVChQ1D05B084'K9h`0!h11K)Y,rY(NX6j+Mf#9i-5PJ6#QZ
+5Q'p*e4m@KUNESA[%YLLqVQfhe!P[jq60"5#A'+XMh$5q'*A4U"M[1BbE,S6ZRKS
+cHlM6"N)c8H!H'`&5Hj1M3k'lCXIYGcQJLe'(A`fkaa!L[C%2!mmdAcal["E'6kj
+Fm`R4MSHd'j2hB'b5GaS2GVM(M26JN!$X`Ah1"bF#)'RiYHE&D5*ddbbDTTb!lD[
+cf3,+'0NYNI"+Q,TK2NalMML,+`f"51)2#$bYL%[KPSC@U,32`#1SK"`jX8G&qRE
+U6L)q5X8f$`)**j%&*c'F$mCI5`X)H6ZkGXSQ1j!!98$44%1AH`c6qM$3KfN[BeS
+PZYYT`!Pb[+,QB$X0@Q`(8im(lKTKKZ5`T!i8hbAAMRNeC8*U#KR8*KhIb#ZXMEc
+#D[K8"Q`@%l"TU)`NPPq6J%e$*AlHN!!"Qm91B--lHMQ`34&9$I3j)N[IAGR3qZj
+A,(Ep994'QE,$H50,*edrfR4)2$-SlR!6C1I%B'3T3PGN+L-IaK3p"B8XXN&X%Fm
+DE#m1S6#KQd(X$F3iMVFTNRKd1Rd3@i`Nf+&Tq%-+!Dqq6pR+,X$M8+0QUdDMi*P
+H&$2c3-#)MY3eAeDYEZ2UfKC*V,r-e,802ar,UY8G-R@KieHHjZVLl2$3+BDJc(k
+-,BKG9V!&f-dlNbh!LJm'+B`1GZ8QApPCbGTCY8V8&,!4c8#--M9k0RG[`'2Iq$i
+Yr@)drB18!lPDENj+lYRNp)Zr*6Sr#G9ZaYRNXeT1LXBUEcp)1"$+DaMTrHpK5Hm
+b2dR[Q&qNph`!`%VVN!#4L[JmN!"142L9#b!K#iJ8lQlKT2Bqi@$NXce8kaic%iQ
+fUJCTK'VckIG-Z3dYM25$FIqAYV*-A'G,qMeYT%`%!4D6b#j'GS13!1"N9kAXmYd
++qIGdKicm#mJBC)mYqIIPlC5i3#'lFHJJ$kqBAV`)5f%2,53Mi424e#`Y+a@NQ1j
+XFNjD9,Ym`'b1TR+ULLLP$Vk1CPc+4RC1FSk3!-GZUmc35f2bh+e"K09cGepI2D1
+R3rEV+G--,4!-bZS@LEJrrLNMlR[V)qkj16!RlP&411khS%S)ER4G(ZiqM+($80E
+3Tb0c$j2Dp%"4Tf[09J'8R3I2%%CQJZiJ38pUiL,Zd9RqGV%)+N%Gjb&$'$B2Fi1
+rQl3JpeK58c`iL38pK`V,ih")*Y,b)hCU,%MMU"1b5cTNPf3J!9)`8CYKe)DZhE0
+51-h$LrJf4p5,"c#&MXK$EAb$U9VahDMPdj(i6&5J[Gh(KpG1ZXccZJH`"FmrSr[
+D@RUXFB0Qb364CA'DIqF@#dP8Llm86P5,CrSRUXAYISRUM[T%eIl)`2)9TLFMUMY
+MYU*k2*Q*d`CE8Geje'p4I8`4eCh6`SKUUDfSlY6NSLSA8@`NH2UL1XBKEcfbq[N
+39[RY6QQ9$jqQZ+i`94IAVP[qL5[%dF'&Y9QRebcADUh%kRCEGSIJ1T!!e)L,Vcc
+)bSr"QDGT#DNB5@FXcJUm(T'eFh&l&8G4K"31)4,DQJFMjY6cJk9VI&S2GmaiE)p
+'4&[m#,NSH5F%C1+MhBGja[XKN[+03(L-6!ar(PB-lrJTKS0qL@%&a,#%%RmB@H$
+B@&XR$&FlB,BGDYDGebb`-!9&M8"[5C)2)Gi5)RJJ5%@a9PkBkb@$NIXYVl[LAG)
+R18ki1"6&(ZGG,+p,*Z!Ppeh1Dm`**"UE,5bCYmDE2Fhd41je6UD"l)ACpe9b5RQ
+mFRI#)UM6BP%cP,X6$(U,4@XVEB(TZqI5Er4YXjVEQJRFkLGk,!ZE&afb@23,e#P
+)eUCREJPb#aQQ,"CXX9[Vb@aar1(5TZkfKAIElY*dZV*lSP2-FKR%C,2jrN-GG*(
+qM)cG',Mk3M%G`h54L2rBda!"4Q63*m`F$!biF0([d%[K[aS1V3[8hD"13X!QL!+
+E9mFCGIMTc$%NA3Va4a*$5b6"qN)U%kckA@#0eL%+*5-EQU5$2[8KUM1I8TfKJZQ
+P"!05e@48945#)1JkmFH"S,S0@(k+QrT3FL3CUrB`9[hcX+akhNp@0I[$UJfDVI*
+RhT%T[f*Jq3Z$L[*I'24Eq6h8hD"18T8rNaFX'"#4Cd&[RT3&AkUS+JZ%8e%m)e4
+&VTBc%3AcH4KI@K4b9`A[1,a5eP'@%F-EC"Q3!-Sbi)r$CS$,c`bilPF'e$P9aad
+4B2JAGKPDjR*hV4E+((0ZAeA`9UQ6T$6"PACUV(k9932H(KR`CNUSeX94(EccBi%
+9eJAhILcU*"h,hPc9X4E8I2K*(%eb@kmE$1qfjS3K"m+Bi"RPa#'Q65(TYai"LhZ
+SJ'5K%$f)8h*9kRUID6iLaQXhhSZ@kSFdLc2T$fH4DBa&rM%XLlcQ*iX8q-8L1f5
+C`4bdXI2BH!%jFYhKXU+!C894l0cH')36ZNXAj3L,X+$BEp'1kpV'PbTJ$`BVMC+
+Jq"4(mhfiHBFNjJ!iR"FT+MIbC,%0j23UEqF"&imZ+8f!)#b8"UAYP6mb$J@E,b!
+ieF(Gli3--Z4-G3KN)a*C&T@hK3541EUC6VFGABe(lh-6TL'G4jN8Qhf+'5[a!fP
+Dk05BFB&-19@BZT3ImFI84G#4TTb-jH#-CFTp(8'&mTY'lX!XC`BZj5FfZYaM'9l
+*M+!mQ3eR'j!!%"RNpM%!X*QbS$KrX2`LZ[Ab#CIjK)6SVRN"N8AN426BC8Fj8Xp
+4mZJ)8CM9D%2M,UXdk'BZA&U%$#BbRS#V9b2hE[NK-T,"BBDj+CNL&Yb3!%`#THA
+($#fCYNBY-!QKbPp$C[0,m[3#BJAhI[T*-UhKcr!Ykc5qa5SH'5GcJ1f8K9S2+J8
+%MGD-dT*IFee@,AKBe[3iNi`5kdX-D@3#8Rk+ZqIej'LA"VU(TP2QF-GhqAZCNPP
+%3QcJC1D8Fe+'CY1PU(`DZA$l"HmqN`iKCbY5[Tk"&`S*`m!%i$%HiFGqEqR$Q[f
+qUl5&rPrI%QKTG4Q*G&Z0ihV84iJddh2$akY,YeHIX230!VGbT9Xj@#6(#X6@XE!
+5a1qec*E-2ePBD5l8,ZR29$F#eM2!Kq-&!ID%,mDh9@`8#6JB,[G58EJBCPXCc-$
+!YiFAceUG"JDqRA)$Jr,&e26(LRY)($Ll!!UlR#FTE'PP[C[9%!k`I+k&JJ(,0ZR
+YfL&6dLQ3!*N8&23p4TGb-0bVIhkm0[-k!'lK,h'BZ2"&EQ0+8`c"EMZC"X2CAc%
+eV28JL80-ElrIA(UGrPprI@e,Dh-)TX(QYU1qE5#)-lVfh0aimr)mQ2KdmB0p6!e
+V-)GpN!#+2pUlTU3HBAd6aI8#p3")CU(Gq+C,2jKN6lL`[+PC!V9dk%A2H`3*8+$
+CZ6aRXmbc@@ED,-rE,%rC,*q9,Gfe'kp(VmGRbTrPeFp+&0mXqE8C"Je+*$*I8L3
+TN6E5,da*GKL$cbRMeFVh3@!0@prN'jr13q1m-'#iUB6Gdk,FQ""Z2*K3*Y[D!M`
+48`#VKi-"*e0f[DL")HFj'C*AR*YCaIP`f)UcdXq+FkeI&@GCG9,KCre9N`THP95
+JSJ`QGD-SXj9!@VTh`50NVLPcQ`"JR4U,PXN,9,,0YV,0IMAXCVIiZGP'[cCESKM
+l)CQZ*aAZL0#VkHhBmVP!FDFBCd@`hPm*Red8[aVG@Bh%Nm"QSMaYB2QD"!L(aGb
+8di%IHhJ5JhIPa&jj4P8NKLPhBDqNMS82KP2(3UprkPKSm%FGXldb-K)9D8@b3Nk
+D,PS`8'iB@2j,Ye58X6KSi@jK5hZp"CSMe'QZfKQIGUR`3YI&CNZ%9[R'UJX[6U,
+AiR%bdJ+e'&,K8Kq@`RG$YXH1l3c9FN!fc-)PdV5M8U8N8rF%8rHh`kVlQ*rU$[Q
+PlNak'+Ujj3``SJS(34@,1lG!!DcbEG+KaEPkeAb(,M'dF#)Ja+FNhM5V5b50@H'
+Y@XA598M`F*K2IMYcE,r!!TAYPT+*"5V#c"!`Gp[51+&@jidV&6)#5$Vq,55a&@b
+"BL5-$p!)"SViiY-49*&SqJ5ZGK#E@pDGA("Z6)F`Cq0+@CMc['*+X!aNrTaTqiH
+B-3'FS5pkZ6NFK6V2fCS6,+0N29[hMc61N`lEYCd([mMNY&FK20,2CT0(+JZ'TTS
+jjb!2E9l!"dc!-(BD3Fc[R%fh$@T##BqIVK+JJ#eSUSF[V2hlmCrd"iMe*aG`YC6
++e*+[U#A`SBeDN!#%[lY09FY'@l8%Z!%3*@4KDLq8e-k[Ilc'p3JC"ikTejG`JiM
+%SSr9keq@ABr1[pM&P&iS+Id'N65*1FAe+$dGmG[ND$@e5k0242(KXr5*Adk'#l*
+-a3BY*hN!-9N4#%XH#348ZZEN!MDN$qh,j#a0aYbUHRX8Tm#U8N@p2#L*K"(D"9@
+p%9[(`+S-8LqV6Mc9&AS`+i@f5hl3DMXRe"2Fq(TPidM'k8#`G&4iVZ%J4N(0Hac
+NbA&"2-l15P08-G6$331jbRQ4CdXTQ-cYfGIdEe`CkfA+F#Y1M0qY8j9"ESb9NF5
+#2P8CKf`G'Er,*'933(FC$N)ILN+3!-mC%LAQe!%0IVj8`)13!$#Ejf()Sj*#P'f
+hj9AEpNj*Y'`f2+jXZ,+eqSDhKX*YZ2+LI-2FeD#b`)p6Fb"+dTkP$I1K*lEK,@T
+PNr#jZ9(k"FkJp4KR9RE+(&X`9PRj)A-q(E0Pi)FrjTZ3!"T+mXK0mf`jGZrQHG@
+2bb[V2&CCTiHYV$2mV+b6r+UXkj5JMlC%UTTV9--c`j2)'QmqU[KD(Sa+C!4(#kV
+dB@)L9Vf[PNp!XejYbX!%QITXiXqlC"FF0HA1MT1E3VUXk9Nh1ci'VK-5*P5j#p&
+dAG-K'HT$D4S#`EN,Ab%(N3cj"N1fBB('*jSm#K+UQ'#UD(&ZQep6jk1`FTY#$)Y
+0!m[h6,'N%X(k5@$U`)+`Mqf&"0l'-[U[`fEdGMmcHS0I'6h0KVchmQ422(N'L)S
+!MMkG"A1pYNP"UQe`ZV,"0j[hXX(lE)12KYeJKCmER1hA"Pp4$dX'TRBbbmB(JRc
+-DGNQ'fk$fd%#$*dSpTIa*'N5bU+LMJ#e5SDbUkKc3,dX3cP89"*32q"X*U%d&A8
+G+*F-0DLL`+U0CSRK1-UPST!!L,5aKiZB$`fcPM,hI#YcY*64"a3`[jkX3QXe+TP
+-er5T5hTZ5Ph5XEDU5cUq3eh50Y[8*G3a*kBZSEBj1hN`MJLM2B`)RkMA5ED&ZB4
+(4CRCJLUr9AAjH-RPib(R@1pPi601r,DY+p+!*,JD@M2)&*I&8I'!+"D9BLG5mkj
+1DN+$PU8)""fD5ddaSY&9IUA`hH'*`lD6!Dp2cj&Y+Y,,N8XidT2NBeHdSCVVG"l
+LR)X3h!#i$+JMXZ-j8DZ!1ZG%ZCfSPi&+FU*5(B'l+R)DN!$AC8K044i&kK8CDP"
+&A3CUYa2943T5RUYHH4e6+UqrMmX-jfA'bF*Y@hRYTX$39LPcP'SVj5HjPl-1KV(
+`rXkj#pr*bSJHl1[64Id`p(B'AMN3e$KKk8(3UT@bAKY#iV4485S2Q")EKm$@cmU
+V%'B@`$1p0Fhh$$9*A!B$J9,Z`[DCZq$8Eidlq,,0E0H'!Li3&+dEZ0(0R1[1VRK
+qKp40YkN$6!%cK&CE!b0'$J&KTUTXX5K9QPHd#H[Q&YJPJ&E`6$L!9V$D2i"@d1d
+A30Y8)fQZRa8b+R,()Zk@1jfTUN(Am+3VeIF[EmdGN!"#2M"J(YBXNmd`UZL8Q@-
+J8"'ShH#58##V@ZI#J%LZ@TRU4TMUIKY@GIeqUXlNPqV+H+)J[QP8@AX8*bAq"+N
+KA6*[SB3mD0l1mlN@Uf#*0a6$T$8eL&`)cLi4*Z&1h&E!IY1L*0a4`4a8jA52eM!
+51Jm,TE(8M'JU%c2EJG-a$0SUECBC"NfMV-kX`X9(MAcfk!&F(+KF2($bfE[*XHU
+E[)ZXpR5AS6M#&qDBdf&'i4cY)H%*[#8F,f+D"PF0UA'J!J(XKi4Mf69#&lmPJZN
+M(@q"Y%H(lSI8DpZeTp!FCS[4a5rj9hk&p-K1TdZ0KlSmSGTFAJeZI%9BFP@"P$(
+91FC8Cm-be@8rQ5VE(kDDBj*#@VrZGBDdkR-prlUhUS#bkMj2G-e$jaiL*X-jcJR
+0M,YDUb+e1(P69,k1%3hN4YSK2ekiKG2jU9EV0(NAUpD,bPG9DIT53XB@9+KM"pM
+TTNDF5eLKNBE@U0QPQ'88P6HU634`3Sf'TC!!3Q%IDpUE&L2Z-ED%q91KRJUH%SU
+HB8Y#@EJcf+XcFDFc$A8L!ae1`H-*,FSBdV'ALcV0q@VL"'crP*SabR%9&E0M2LX
+lFUE0NFGP6jAB2$9BimJp94cj`PiZXMhb,YQ4ej0c@h&Gm+3Ej1"GcbqTN!#-aXU
+T%IAeK#LmSeiHBiJ5D9(Bb`iXa')fe+fj&ki!`$r"%V(0CP2S@+[Ce0RUe+"ZLJd
+S%c[$G[DBer(%"e,Mk$&bJlBp*MY-KR3BmeBfX,V'36e)E(*HhQ5(SSE3md35XfX
+94F4NLUL3!#QL3VBYfb0kGG4XfQae#cc4Y1N$#S8@(UlChEbLihR$eFaEFd0`ZGf
+Ulf$mfD16C+iR(H&9"+)UR%Ql4@D0C2CaaI8U*GTQckI"E!$9fe`hJ4GHj%%SZc"
+Tr(Qq)-'Q"Kiej4!(N4E`mqhdSqCNKHTJ0ZAq1Lie`&#BEcT),Q[*!9"BB!aPr[4
+p024Kr#P9TH6f,Rb$+hk2P#'&Va&VNpN`Q4Ic$[0jKl9-[DmK8FY@Y[L"iT3[R-'
+'IXM-3C6-D+%%lqC!R"F&jUbh5H`Y'4#(C2p-3U150GM!+9l`Tfc*GcDI)(K33E[
++YV2CQF(D95NXB$a6,lKPaLE8a!92kXmCQKSJS5'@5DAB@T`bdZTJ@EKE0N&L+iH
+1A*)10LJai48T(&piH(*kM3PHFm$f#IN48IfGB"ATpm0@T#eq9U3cr+T)NeK&QVD
+ALM60[iTd9p[!mXH(+FNbL0@m-0ATU0)*a&'H-rRb4ee9'8dhV9%5%2!Q-#ambT4
+481*J*!-qUPa'aLeCf5GmAblL4180'8QC4mX0VRS)bj!!3PLqrNSB`M,6PV"mI8)
+K,1QIG%$L1jDN)&`Lh3YR8j+I6%*GU6&!fRBD*GHBkLMZ9ciXl-212McX`m%qJZc
+$bcikhE@H@Qj`[$'0Qlc#M++5b-9[ZRMclIEL*G6dXLM!"$eF5%MZ5P2(Lce#(I,
+9''UV-648BmK5BqK'MD'Z'N0[+N-`[N$cEe(4G$%HV(NiZ2Pam1K1$%adA%[c8G2
+!SU4T28c)*UL6p[2qfB(LrYR[SqP[[6*iTepJ8$cNkVHJF-S(Z`pT[qUh"%LaKaD
+jqZfM#Z)6)1`"8[3R3(LQ&-3&)$`"8[`&)"`M#Z*G)"`"bSKhJ3M#6'B#VJe#JA@
+!$!BSFbi"kHA)%SBX!G)ES!`MC#IIp[TF0%FEhmSlaPM('$Vb,I'18!$,eM8X@kH
+F5Y+6QLCJNTrA2H%4,pCfmS(aiKj&EHX`N!#RNI%41Ta!8hIm#MF-+LNaD3F5NhC
+,L80Mdj8%Tq8VR%P'Bf6%-N`2DMI'lq%K`e2&4j!!6S'Z08lJF-hjp%`a*CTANT9
+b-$HIJEQLX'"ZLCpJ,Z%AQ,YQ#kDqG`SJD*FIB'TA66#e1AkkB'VccEf$UB",$UB
+#VUV"e+`frm"8`Dh6!e16"l0qr'6!9%2VraS`eG$k(cHBDQJp26$982DR!8`eP*d
+HQ%*bk!T5K&&LNiRhNr$[`9MBTjdR@+42$drD4jm1i@#I3Cl!N!!q[F,,2MY&jlY
+IJAJT6hc-'1F4bJCUY)'5HZ[4K%0$K49JMMFI9S4rG`F$6P")`#+kLMHDCZ%G!ND
+3!)1XFf#8$#,C42f3!2%'`*U$b%[cic6P+#@-KRR%SpR5dc"V0E(Nq!4#+HRmHJ)
+%&G0`*6+!2E'GAmXI!+$Z'Vq*!aZS@3Re5-%S+e$bkieDPl1j#!C)(f1!p)@`J(5
+GRi#de#p!QPr6*'eCem$bIdSfY2aHDVBZV$%DGC*!D+#NbJ!+)mePcCDY0Sjc)h)
+d&-FEQj)eA&Di4fViEGP+iE%PTU9Vd&`F1fM"YJ9+NK*j8h&,E0f(["%p*3QF4hG
+#D6S5CV6YV1Q[@Pimj!e5lE9i@'IEm*GHd%E)L06+cC8,p!XN-c*f*0Cm&@qHN`T
+#P[$0e`&#(cLB6'R50GBBTDceb5I@D&6"HXC@,i9PUhRqXG@XVUVC+R4leS0Q"cT
+59YiRa+`(-mFBX`8!)KrFGfKIcLII'rMC`%F$haVF02#eI4m1TJeqIr$eI4X'l`e
+Q$5CeA"cmZi(4I4phT(4m2("5X2m!N!-V'd&%3e)$!'Ql%&8,C*N!@@f6lpCZP&U
+@CJc6@iDmM&VUR0Z3!-8BMX$E6DA@XC9Zb%*)@VHehA6Adl2V8`L(9AFp$+q2cAN
+-'!iaKSJBe!9e6L,5L$F4m3I$'""L3!4"L(TlFR-m1f,Xmrhrlp[VfkDE3-kjIrF
+e(9Bf*!m4%"!!%"!!%"!KlYr9+e'2"hm8e44bT)39fD8Lhi5,h&+PE0V(A'33rM2
+85kiC%aQQcC*J)MBTa)44dI,SF"$1`C[dpBF8CheXm%ia)DA023S%a$6cG$9``Ka
+cpkPdYecbH1TY+5XmRVZQXC[r'+C"MKBbC[Q(mU3iam,k'X@AXN*42U0EVqR@b@l
+G%!f%fV3B`Ll1*#P1G!-`2!$qMGeHPQ1hIhAkk[5FXRfPDHRfr#2TfVhCA,bXVjp
+E(k1Ml!)6*6*BSecYRU$BC#I@VB*bqNr2HiIJX"fR9)Eci,E@i9Bm'1GTM4j@c(`
+j9c!UQT2L9!*#KDh4c*8RkmR&4SGUJe$GkNDRTBN3UHU&p@Ef%SSp1a$(MlRHHXa
+G1aA4%D0Y"2laX"Y,DI*ZT5f[deM@L4mcIQcimH+R(cmqr$4&l%%l(IAPdSc5#Si
+D`&PPakE*A51'I[)heFdk)%Qd!@8R0%dk10b94JNG"3bm-N)LcEX1+%l&58J9jkU
+'3XdF`&`KA#[XpL2TTR8El#'YTLFY0b0(@aE)5C@q2r3RZldiVI")XGCHQKQf2b5
+2[rUd2D%d3iA[A3fdl`he2&km*F$8aqSYlS06Rp@NK#f(K+RR`ShiFcPiF1Uj%&5
+je`A(2%Gd*(V)2I@Nk'kBIXhi`HP6ZbmZQGSGc9cZLckR+%H15FUAG6F30T9%M4G
+-Pf[FR1PicR3FQ)i2MGCEM"K1%0hHkGFm#BD6`(!5'%D)i5p@qc&F6Jb$YdF)dIm
+'hfF$3kLh`Ae`lA1DbQMQfQ+DpYa`02-aHRb"P%`h,B"0,LZEYFp40F'8[r)TAjU
+Q2)r(,491q5ZE8R)V65NaQkDXaq2CLUD8h#T0+H46MY18`kXB@59P01A2EaP-+C5
+QI-1R2'ZD!V*+p"91qBC0@ANh69RCBTS#XPBf964PjGem-qlJmSE3p180EKHfI$X
+[,PPH4k$LDKqMDHpZ`FHR#"M@MfFV,bjC%k2MqRpF[YR`SaU61c1Aepd49HVB`jS
+B2BLi8Fr'PN*d1`Pa#f*e495#lMUA0'8c$F-b!3+4P@ArBR`F3d#`IM`crZ+5Y8%
+kT[r(0I--2kSa'53%'$RdX$E)b&NEl)SF2Q8H$31i!Z4XKa246*Am6EZpN!"%bp9
+qSU9Z"`61hQa606*e#BX6!'D%3V1JcNpaJ6)P#M$)YmXhXeX5rhLX%lrY,&I-RD8
+3U"h5akIi4kIaac@aSKqAEcEqL%&Mk2MI"bMA"ZAE0I2BVF3Q8(5j0@1+XPiEV)#
+%HFBI!D3SG6hqh3k[SJ5`XUS"$%)qSR&fE(&XGpFS)kUc$)%eG@iP+Bkr1)91D36
+LQ(FKMNIFf#"8dBXmL2k)[+"VAf&a@VV@*2[qJ29+#qfDdQ*YIUl'[Pq@JA@&j8G
+5l6QT4dTcd[(CcVT"*J)*iC&b*E)'lL99#b2N5$jE-1aKQe$5FRp1IbkMF+a@kqV
+SemY([hZ$hp'[Ii9(,kb3!*V#aqISNef0"c2eY%@%jD,P5T1I'@"Nl2#&SU@CqEQ
+QBp8pa&C+cdR9(XQF2*6PlR)lkqa3[G23PHHkVNhAjY$8XH!Cf&qXF2-[er8(B`$
+8KNQfc1,kp2+drCP(-TiE@cj)([%3Spb--QfUTMKYreJb!N)@8KG+MZ$kZDMD!94
+XA8S(!U@&0X(MJ4VQEFGLMPMNJ'+1rbNfGGSE,,*)G0fFq`S@P`m4cMp5H%"cT,4
+iE"MY0c'k0Lell''arp9@cUlV`9JVCpFm!iA&Y9'YbGE4F&89Db*LK6EFLLS@fr+
+LV6S5F0NHKid8+`6&`[C8ZeKeeDV#)DUJ@&fc+C82`B)m[U9q92&e2)*0NLLfmFa
+CF")8jkQAHVBkR1UPf2EeTP8L01M[h#Q1L-j8-@ZheMQTfY'#MF*Bji[Y#a*FQX@
+GkKX4XYbiq59-4SMP6GYlYJPXqhrbL1)VDkIE%!B%Spj4J10GapNAP$1@qX6kQ!6
+!I5NG3583&rD8Z&5f"$!)p4'EM#p&TacSZDirR"l1cFNB+cAU)6eLarBC(pZ'BjX
+RHfacj`M5F,SqpQBFh'`kYJ#QCKcD9YC#Nh&S-cq`eh685MTU%MYUHh!NG1(XU0'
+"pIc!22A!GHhKG*9f,!r-U`fU(p)VN!##1)eA3jJSfJ2KY25aiFKHr&P$mdX0$Cp
+pD@&Y4QCDQEESSJGSd660@0ApBS0erNc-bNT6*l0m9iSYQZF0dlqP`lh$Xea895Y
+!Gi58(%Pa0QaI3N#US1bpVU$b0LRf"i4L(TB3QJHh@jAE5lIaA,NE4VHrkqLrfA+
+,Rf*[9ck2Xr9i2(k+[ESfLMfCVVYRrf38ZmV(0Z2BFmNeB$hfMIUE*-8f(IYkNh,
+ED")1EGjZS0VESGVmX&$Yq![EM99l8fe8Hf,'5Ue9ZfZ1MjpUGlhSf+Pf+hF)!-'
+U6ZV)!m0*`j4ifcP-L!qF5cV(((AU*I2+qCm![8DiCkB(dr#[1SHj3F`rG@a!SZr
+0p)'1a9l!8*!!M'4P+dca1TJ)VHa$aJ*ki-(Gbm%SmLY&8`IBP0*a9Z&K&"q#`@0
+Zl9(f%8[DA$"eIZ95T1PRB*FbS%e1S09DI031C2GGjRqbV5#l,r[9"*QLr+('!'5
+mZ[L$l%qe"YPN+NUYeG)!C+FBb)`"CU"JQb4`1HQK)R"CJI9rS9CTMjGDrC)f0(5
+N!NK2Jc"G&"V@Q3HpG"Xr$'Ia"EL2eiX*35p5dR6+D8hj`A+Pc[-8rh2#MDdk96X
+f$*j#8J)P+h$R"9`,#C9HF5qI%1-T[BXFLR,9`EfH#H,HHmZ9djiIK*&5ePlYqF%
+HeleUcaY)mh`$$#B3Jk0E2ir$m#aX(Bd6HrM`5G,`5AciC3brM1(MM)E[%42%!&a
+&Tk[0p`Bm9ql0m&ca2)PdQbFTbGQYD-k+(q2&Mm+0R0'2pVJ1IZc*m1i@%`i'X+8
+Ei-YF`,3,RQIJ"Tq$$eGlTQ%lT0Vc$*mbEC-,'a(H`@IS(`ma`Y59!*8&c2f0lCe
+95U-B$m"%2#r`2m-!cc$5jRm*d2ih`(Jr!2@#C`fPCPK9!KeC(cHdqf"Sah0JrEG
+M4)bR`p5BaBXJHla%pRL3!(h4N`UbicQ"bd(HFNV"3`Tf4D6e5Sjj,!mhei*)r,e
+(FF`T%VXTHebhUTA6h,&aKVpkQEpiHBp,G02b-#4rkGf09eGlhZ)$IX`"mKBIpQ-
+1%!!HLT*2*UGkbEYlX"QmY419DGe5GNXE#NR$Y)%HcE`rMp$empi3("@5LlS0Yc`
+pR4iAHfN3Hm6!68RF*BVEF3$E9XmBFTXHH!X$i'5mAc3GY1PJJLHESh'fK-DA314
+,UBRkh8MK'FAK4c8e)'6fYH9+JqGeE2'p2X5GL0M8DKH2B5Z08QQb6BSl)Qp3ZIC
+TLR26blZUKa-,eUXNHL4"[G3UHZjEqXT&ckXYRY-H4r(-dU#c'fd@T4%Zf,iG5cf
+Y54HJ9+fN9!Jj+eRK$L)mHN$4QFbcrT31(p)NSC)@(+%IB8alJN[9JTqm"*l`L5f
+al4I"#-RV-"$,1V'e&r'HLEULHP)rZ1K1K&cBkU+YXaDNIfc9AN9%U2SS09ibl'l
+1c8J[,pANM+@lcT0&5N!S*fG&p+L"Sb,,kUL`)M&jRJQ*18"kT49TY1Q)SlEcbI1
+XNf'm9[Th-8PXJ5h@3HKQEM%KHDqI3k6UKbVL$Q&EUkFi#R&-'k8PZRqU4&6HX)q
+%K1),0T+Bd0M#RSL,YJ3KU-IVJ&38IQ!%qe)kG$,"4SkEX&Fr#U(@k6i%9fZ6Zkr
+Bai)BbGdD-c%mMT4)L$k%hSHBilA-khD4q&0C"jd1QcQl8q*1fNUi%aA0G'XfhGS
+'X9J%T[fZ[BU6&B)"X1`'TRM9`99P3ea1'M%#SpF35-%+J&4MiF!fZlY9A[GSKM'
+3!1qh9D0`5,r'LCF4$X46lY(L-hj!0*k`KJ5ldSq+%k1IVedUdG&j'%8b$MILaGP
+8-qpLcSJ(%)Mp86'r1HaS16cNX))i&Hb(AP$UR@*L*aIccShebQ43-QM%YJTSN9R
+PVkP@)Nm6Lk3iNjJZ03KFUSkLX3YE*XRT(hbMqrU$4p(4EpEN`I'Z$$e&(EPLdr4
+,0b4FR%MmYZ&P2VB0EP(Td0PX*R(!4"!kr`@mmer!4C((0,`1M#XpP"$bN980-(b
+MT!L6M#T,)aKXT%5qHc18lhMQmkNE-%L2Rk[`mhImV**ZjN--%4%E*,DfP!jdNqr
+KjbEHZGp%hB'N##4)c5KmJD-e[Jl6D,lRll5p35R-4F3S"d$M8icmaZa"Z!fah*H
+$Gb,Y`%)LR!EIl1-NhX@0R%HKT2K$kDNJIJ&%rPdK-K9QNG%3,&GXR6[reP[j)Y)
+dU!YB9*pA2jF1"1*RiHBZIT!!4,pMr*F2MP@[Nik!lZ!5b)qAMZ&c&%Z#P#Fkr&Y
+Vf-10aSpJ50i&%K[P9pqGaY-jVJF4LcSqU6B2hPRrU8cqT8hmC5F4L24I9iKF%,r
+$%#T%jMH)(3dTiG[*0F%,6f+!$SGb9(-3pKF"B(m&"&D(+-e[0KRH-#GY5)H#BIU
+hhKA[DEld(djJrpaD*Il9d,eHp6S"AbVIBSUN)E@T(Nj!')HUQ13SFHE$BF#hPR)
+6aT(c!#kr2(VT(D8(9PK5Y,!KVNY&R,UeSJ09lEKFe@KMM9Hd0UCSPSdQeddlZ56
+T%DMAHHKP#DpSk'MNF-41D8`Im@Vf8C+NUTBf-(4k0NZZ*5H3!(3"2cH%@c$XJUB
+5J0r-$GGRBAaZpT3!p#Aiq'`iKQ,"52T2Y4$V4#GBhm#0jBCG*-$FEbreh)$(Kc"
+eQ)SFSiMTX'*$jAREmak4qIX-chXH$kpUli'-'+qX%bM`mD[Q9dR92-P)h&GlVN*
+9(d!U`*!![-R)MlD"(ff$I,5K%Lchrcfc11YaB"+@L[NqJ*mFk@D@*!E'5FYkH39
+k#6mrim6pV')a-23CQ-rb2-#"TcF#AKpqVZ2!kq2!dh2J63,`p*la!0jiI*`N!Hm
+k)q"GC`#mkb6JZ56JZEMcMm$fJ!5f"b"HeZ%)afAeAlb2#m#V!R(&Hkf!#5UNNJ$
++fBSUIZ2*fbeqe6iVB5$Fq#9e8l'-,lPi@XBVm6+)TSdQd66(ZS!1#a4d[F$T*ZI
+YHIj,b'*0Yj-%fm%GRYpa&#f5#N(-i8+0&lcar+lH*L&SN4q#rZX8#EK23@E0el*
+Jde8Sf*lPa9$CdP-330i9L'-(JP#ka0'hbJKpcq0R)dIImaapUcMkaJ"pUj!!3Ne
+TadM1PG#hd3Kp'`h3Ye&#hf%*IBG0k,Y,3YpGQ(E#8(Kj6KJ*VhfjBbHjXZ@8-@C
+`NmKJ'rC3A,lYXC,%"3VPHGpe02P[AM"986P*U"PYDedUXV&@@r2r#CNFpC*CJje
+Z*#PhN46(!GP%!8qYdr'HX)S),,1C"CN8eYh'%`3Pajk1hqL3!09-j!"TFX"Tm-&
+Xm)(#,L5N+QC6D()2#dfN!A*iFSp"H$,I5KDaK1*A(+*XpKriHi3TaQNmVTk+`Y'
+*`em+4rpNhlYMj+,brd5S16&h`eL%QUlMTP$cR9Fee(brLU&Q,C*#[LHKjSKaU#Q
+P0$eHSHC)V8209f(,jh%)0ApR%'U1')HD%K#0*f`U%QT@1aS3DQlh#c9eFUMT[qA
+hTZYl'RL1[+,!mpAH,T[L&hL1F)0iNmC-+68`c8lD-M`HK*aRT"ZcL"F3293-RB@
+8B4M'lkZUdB9XBKpPi85''$FLVk0!MM0d5T-ZF50P25DYpc03Hb8PQ@)3K[C#X,C
+G#pAbh-#REX'Je8CKk*Fm"%@"@FR!fH)A`2d92rrNKX)r$3a3*0LcJcD1J`RkMmN
+%SK*!'[H`)c5q))@L"BDK+#GcF3@Kk!hS%KE(9cd8A6c4824k(1'iG*3cMJar!iJ
+)jNCElq-FM0B9#8BEZJK'ceC)BYIKD)("K&U'Sj02pC,$dHe&`p%BNFE#cDpK9['
+0HKk3!$D-dS1T%P$M!9825bG,Md&B1L+&TC,D14Y-JDNhAJT-'h5HKAKePPFr#%#
+rX(3pVhMVNdb+DeR+cI00XRPH*1AK!RFCX6"e1a##M8SJ03['qLE2'UK2$!YNmD+
+rP2a!4B`@'*RX#hKDZG9XaqYHE2DmVCHfHib#9K4pqXMc$KhKS3c21jk&f$Kj"`5
+Qm)Vp"*Ci`NmNc+m`C*d[KD`4[j!!G3XrpKEVXBGD8DdrmGc(Q8mc#PTR58%VhG`
+R#BeTIN(4Er#cJJZ0&8@%4V[%IJaHhaGe)9&b&JI[kLl"fiHIG9)J5q"GcF%l"H"
+GlAPG!Zm8+YaT!Zmk)r#Z+`,HGAlJ03KV(k*JQJ!l#i*U839"lA`%YG%+JPTIa5+
+NmGR*K,8&"Q'Y9Fa9&0CfY84JV!,EaE81E-miUVX3NamCKlCH,dIVBU2`YSkMq-X
+Z8I`mG9p5X%XSrT+Mq'@Jq%[2Qa++AmE2QbB8paUKZ,F)LR[p8'`3qJ,&Lcd,Vk8
+r*`b&C#h#hSQQ`aZ&[5-ml'AGH)dTm(8f')5pfa85N46fNZKXU%hB1l&3a#MXIH"
+l%[BqX'%LBHr)+`PlHCM%`Yjh(VH`prfUKld6hB3e$RXA`UKB+"rPfQ,1[L%Aa3m
+d4`Ue1A)4Z-+Fjm*DiQ'hdiF+`bmr9YFrb`SA',)#8E"A#l0c%)BMUDGVMN9BhV*
+eBLch6jbP5`jZd$5M$@NAam),5e`SPAdC`ZiH5N+J&!8Uf+pHmQ%q06l)%a5@FAI
+A(2@5qhmCpS4FETpQ-DVkbb'A3C,#(*DN`'iT33(6H%-D2CJUQVdhDT!!![(K&,i
+!&UcKKFmq6ke24,U#bj5Zi)13!2'biR48@$k)3MK)$*Q0*!DA,J(T)Ll9kE"&2pT
+T1EllT'ZE@N&cDYX%U'LPiZ4'AJ&[lN0Qd,B0kXU6EG$`(JqYU2'T#rA84-q&HKi
+5P@e(BX`SQV5%N!"qGrVp1rFT*-3Jc'29lpCrbJS#'DH13%(AXE34L0X(hG1RMP1
+eK2"(MF*q1M-CUYBM4++Fr&jHL+S%M4pN49!X%!I!Rmk$8bI4)G$)%3VJ64d[ZT'
+Sc`[!fTGa%`0(fd9(Uj'10SdkGp24qL"+E@)lIrAQ`FbT%p!03kKlAZH0,L$dJ2"
+pXkXNCRl%#!KD`dbK#JkjLKe5&`[fQF4`SA&je$rp`C6,J&+CAAZET1qRMa56,ZD
+NTA)Ae0I&KE+1qVmc&@ePc@la*YK#3Dr1FMX9KNYN4E-@#b8$e'fAG3C$3B6#0hf
+!T'XJ9daXkd1!Df(KG4N[SLihQq@+3eX%T5pSAl8$Q%K&FKLUUA[kbLa0,$4pjCj
+$Q5[hV-`+(PbC*4i,"L)l48X@4$b5iLdcKa'iQb0K-aUUS5CNV8@1)kc)X9Hpj*p
+R)Va,8#qCf43C&Sr9H)-AG4F0fGH!I@@LQ*Me8m@T29ZG'(SDc*6k6kAL[RVH%HH
+a"Gr@9jZ4+2@a,S#L`F'%*a5RaLQ11)BkYJ5MZTdSrY[1#JT,SKK&i6k2`lB4'VS
+9ch'LMiN"+Q)Aq4F3lMDT`ekl[EDL8JBQ"(Kj'NTjTD,8EK%`&KJGY!"J,*J)',1
++J0%'0a4hiBedSRN4+`Mp@!1%"Ir()(br+!LVf%98$%P$8+ib1[!UJ(,9f)0bj`e
+qS24M$9#ZqTm-b[eM#FVD&b1IQ@3Y4Vlbk#X[4Mlc&pCLj#ZcUe#-2)XDAkBQ%&#
+BqKR08GQ"2IM@a58VTmQZE6)LJflH#4JiX,%-6b2-'%-LP*ET`ZPYj0$QaE'I8@-
+"8l-&KF9(dNQff[e!,4HDE#A!'RH5rUU@SNG4ljK-q[Y"0"h8bP+hCqE,"NJ33Mk
+D160IQR+'ZJVMia8KZe-Zm2R[Q8F1D1eG8bJh28T9+#Je*JH6U6r58h+K6(G,Hch
+[S[FQLHk1$cV0mekMIdYIfcJmDrIhA6iPrYcDpCr(D4I`*%QfFE'p,!hCfhC$#GP
+$46RSIqE8I+L"[H'PLM12T"m`)S8em0#13lDXh&!B1Dci3"K)X6&5cP*`D0(hZ9(
+X4*-(%Ml4cZ*93pSi!3(TK8Fb+UDLLq8CF@0(K+SS%ImU%j'4PP0l+RJ6YPr(`FP
+e*TLQR&Vl59P`ArYfTqeBSk*e0PJF[0Kl,iUl,bZq2XZX0(brcX9*Z%(F'4r('kc
+0GA@#K*bdh(!B&E`#A,#9UVV3dSNYK1K`FJY"[-&KTdY6[*eT+&5d[LcQp89GTr8
+r@DpG*)lSb!eh"aMY,bh6CP5S1BAdrhl&AeeT`i,8&BC32j!!GAEYqM,IlCCEcX$
+jci4T(8)XrGVeJ6MYE#-&hB@P-SkNTPS$fL*+@KJSj'LiAB'6XFR@dkL8pF[!Q&2
+Fd'"@D-Z!LPA$c$5(%DJTD%Dq`S%@HH"ar6(&Te3i+-pi8*0b4[(QIBYEFX1f1k1
+lShqTaPB@0AA2&[)QdUY+4BpQ2-0$dNHR2%AIMFr1bC!!**T)rkc#!9kMSc9-KT&
+J00!KNA&*Q9,&+B,4`,2q!hP6c#jTD!a-A@``EqBC0fmbDDCjVJ)%NT*!bCaN9RB
+1hj'QY0$$l*2m`DbBhi8LSV$ANiSC$Dm[Q9P'`IlJ0R6A1k!DTih$E)PV)49"kk,
+#jRpGE0"`a'PD,$)-ekj0CB-EM4NA,b-JLkRbQ+RE9B-,rShmQ&E2PT`jU$LST$j
+88YhCpZKSp!-T`FT$eG4V85rjBc'f24Z3!-EHf1m+869G)1lN$S6*#B0#dRQUA99
+GjT'*,914+2"EjY-',+($8R83#T%1Z'MpZa9mEX$R5M+E)Sh2+kYhPcQIEi`N"UF
+UBQ5U8TQUZ2H!8hI0d&F$BI-D9b&5rH1E1d1KNqh680MLFAJ)l(jf3$['d@,m-E6
+lf6hDTGim((iH$Rme$Tq@Dm+IS5R@XcG8bN4,L2j#[S3N%I1T&q#)3'8EF(!4"fr
+U011f%VHk'[1m+r4[kC8EKQF09#FDJ+1TFkULNm!aaJ3146NR*S5Db4%UIKAIJ@E
+3([G($U"c$UrrC`kL133L-i(S0*N&'C1(%1P)L)[k!##ehlKb84+$&1+-358lLN$
+4(BKM9HI(a[A@N!$eA[p+DX4SRRV*SjHV`+M3bSJ+q`0CC[(h@@h&H94F%ZQj[!'
+!jNbFVY4UFTILI`04C+D(4kN)$!NERI&UTkqfIkc0d+E#3UZ!r!VB4+V)TY!B#04
+-(@Xq#kN'j(Ke`P@c&CGr#)@TFHllBD)kq6E,BDRK,&H5h!543aI&C5kFc)d5C-e
+Xc@A0E"Qi8@C,4CqXM@[Ypa1VVhlM@S%ZhXP"$B)$FJ(59LJDpC[,h#PL3S5fFGd
+L&5E'LkiF4q*1hRLBC1Ll[U+H4jAakVK8S1U%'HlkP,S3pf#El"b(ZIqj99hMUJ&
+FK#Xc(9)$&cc8A+a)aA9m8Z-ZSTm1'i*%9S3jXSQVBmd9HQepYb#@J[!BVTTMG2B
+LDf!L@LEZ'%A)iql"0(qR+"+NlT&FSQLHD[CUUdX8$HY9k[Uf(8-Bl*`jE!dlYlP
+KPMXMa3Mf8641CBid*je,'0@dQSblIFB1Zk[VXV@&"1e!6lB*09BFd'H#5DJ(YpB
+!'0Y*f(b3!%+a+"kkSmraa[fN-"5"*QfDpQ[bH##i!"pZP"jZa--0dX-0H2L(p2!
+22-bA(ZEMiHr5`praF*AdF"8HVT%HVX($21PK(KlZNalZ`m-Xk@%@(Kk3!"iHU&h
+3rTM2+'MA[r+JrE'lMB,fp4-*fR0TXj!!`+Zp4'aAhLprq'TG)#iPGq")IPTUMU,
+!jA+rCVYlHX(XY$-*q#-H,*Jp%`AM9Xi@iEa"3iciQ2%J6r#Ci*kqBKQ5!$*A,%Y
+T'm4$I6ec+iH#5@$CTceF#SjJZ@)1-9Xa4cbiBJia+jJM-eXa*`11l4AhF$EhF$E
+h2(P25Qkhh5j0Pm`M,e,Jqm-@ebJFeECGf,lDeaTd"mi(cT-3V)q&CrH1`Kh,RE(
+aBASNKhDi98mEAFqDYj)`STF*'94-N4P1E`a#)`p!C'G!M13@jY"LTrBK@")Vkj8
+)*MqKf#)jjUe"0ea@jSiY2$dX0l)cZr@GjKU,,V'NZb`5J5-F(dl@@!T``4LGCHd
+R'KZUMfPi5EGf[QKTkdi03-cCN!#Z`XQ)AiAQ52J#fd!Jb)Zam$Bq4TdLQhUCNCH
+HQmr['#KZ"RNq'#j04%6iZhpT&RHqr8%N'VlV,ffld1#b426)2r@r1PITGXp3l40
+$GjD6q8d1XGYf+VBl3q6NaUdjFKl,YY1bAmG(KNd2$j,+S0QLmhGL%(jXi9BaT'm
+,+PP2+1C#jlBHfKcl(1!la`JX,XeJa#PRj$!cYA964hKSGdIBZIXR5,lK4!9(EY,
+rkRcPcZAADCc"*aAEmVpTc)20Jf#+aS14UR0E+5F6Ih"V)eGk%TVPZF!@bFf3!*E
+KCN!p%0[SQST*Z1#DZ0Xp9I'LU5hRlMEFpUYX@,S0MeNq**[FYYZh05AhC))%4'0
+FFqFPQB$9pBVZK9EGZa[k`N2k2MQB#bV21pFh4hEqmkrKKASi'h(C)S[m8UG!eI,
+3P-HRXX+KL3XdlB%YJDIaLU%ic"XXeDR1S[&,'fXficB)d9d%9MGYA(1(BZjP%h(
+Ti@**i9[1!)a08%)al04hD2*VYL%P0K(Nd5AFGJ!diC6Fi)lIE!TrqTIQF#Z"Hq1
+H6Dl4CJaTeX31YflT@,$RcVlS9R&[CH#,pq$dK0&K"E)1Yb)%q@dMG,%EaNjQff`
+L*e1EUY,DdD4b0N-Z318&J[Z"cZD)J[3#IH81,$K$%f)%-',dZhFc-Tah![6meJc
+PA1kMj$IREY`%ieH#*0e2S3,V0%1$*lT'[L%a'GV$1F`NJm"S4FTJjSV@cMEaUpY
+f+-ilm!"P`"raY8-l9V3kB[5Rml8lGT!!LGJRU3me[K)NG`LD)qdF@I'*CUMj[C9
+,9V4UR$4FI&&PlQaQ$!H"mX&QF8I36Lk5ET-#8MF&3@6,'e88lrH(4MfHCBTY&#Q
+!5PNH,[(35"GK)[4V9U(MM9&5$Cc020N*'d9F-8*Pl1CiUXMGSZceC9S!4pa[clG
+@pJBUp!-%IfIMk#CAX$%F+('9$@8(q2(ck,#1'&[Zq,+NZ'!8c[Dj6%b4F#Z")C2
+[-bhELkB$jJEJ-$[NaX3'L#hR@MVk!TQ&P@$'`(JUh2%l!m2Xa@qNEK`1m05d6(X
+fV+e`@PTa1LHC+P6r9qGCPF'&%da#PiPUh8kSa!NN%l3c`8`AMi2k0$rVNT[-TA4
+Z#8!6f)eQ)aH)@2UP-ZeN&Mp&LiX)cL*h)XL&-Y3VPG6920EdYMi5[6-!mk8pD94
+R`BZk6LG,)UP8DK3S09*H455k`!Kc2ImIm`I%a!3A,T5cZl!FJ[3$hAQB2NkGqp@
+j$I39G'ZR19U-@BIkD-N#PrB4hANL1pA'NQI95eCXI4Z&Gf"m"3$1U8S$kaK1lLd
+pA*%impfXJmXX@lQ)3cZF56"##NlQYiS@IiE"D0+`,ZTZdab2([l1&(Vel@I'b2m
+FVN9FBXrpUq(+U"l*G1*aA$,,l1"GUDIe+aI5NZlTaFBRNSGX8**hC9GkdR$`($H
+(ih8`SkPK-Y'G0-`B[Z521%hTB@fC&A@FF0'3!("dq8fr1QG)[JlN9dCh!5#9jl#
+KBpD)`AK5I&8r05iXN@+M6cM3R-%6Jc-B#Emf9"ir)RLP0Q[bU,,Lq-G+A2Nf9M&
+qG3lE$P)eqrBc9$--k-lN[#4R-6PZi'+kRJ%Yb)#@i!qdS++cF,BYp4+4R`d'L,&
+%F*,NdZh6T'STIB)U$X"4fA#T8Dr(`HC%9G*Jab-J`ShU1i,dlKD9e*M8C`Y"jTQ
+K!`Y[362,"b#&R#!T"PGBLiT%f3M-Pc8mN!$+2BmSKEGiL6-`FFB"Elb8ekm*bk&
+X$bd(&[2P`S4J`YTLi%a))&-i(['+3`Pl8)%lfhp[De3HeZ5eVd*5E!`2-Bd6$`q
+(AQ0$0&GaPaZd&lQS13`I%(d3JGVd,KR'1-1(1F1(1F1B-F2rY$,-560L4`E$E@L
+58)RJMiJN**hLddq$N`F*5IMNJk-kpiUGqVQ`(3Np'QfUNF%*e$*JI)j'1V,JpU&
+LIEZ1%L-i'+-mIDj'DDUR"ZJZTF"%#Jq98))IQS0('+Q$@MU$Z('2UZ5L6,P)X0#
+Kb5mI,KCV84)eATN*AbB%Se"K!kp3r(LNc)JSRmP&L18L5+GVdTQ$#-C8S9dpLUj
+#KN2Bh$)N9#"#aEP%TJ&j2LYjTQ-VXQTHPT%Z8d3NL33Q1LT8l@'0cDT%k23pZ"J
+A*L*9!UlB4qDL!M3@S*K1H*mH+5B2QUQC&%dl6jjrQ&M)%m+@%PIQGLp0-LFSIc6
+MQSVcKQU8faAcERbNea`&$3#[j9XA(++RcEmA'pPN0P#Kbr#D@9$!Ml%Zb*0X0(P
+)aY0TDR!C1jI'CPhDi@86q5HE-6%*K%3!'e[#%EKJ[Hcc1EXGVB[CbFh!$3)!`4`
+pM)ES@AFefifNl8abfdB)R-3%5YaLc%LZq$pIR%6ZVp`"$6J@-T!!3K4k1D,TiJA
+kG`LF1ddJGVT(VD!PCG2`T#,Y+3B`K)a$UIXf%B"IT!)iUTYK2SkU6L(-'j,"B5U
+'`5rAk`Ff%5ik#I&*F6)+9"8K+Bq3!$M,r,A#$NE+L$4V8G-T,r2cFJ*$4C10JHV
+YNeQG9F#X`@e4jB9M"DkU-1)251Sh)39Yh2NKa9BK8UU0N!$5Eb*NUM)Ac1U9Z3i
+djB)3PRFjpT'!K"l`,V3U2)@#-KPq+Lm"9"DIf$DQ#RFXT3hA[6a+SRR`*+UT%`h
+1a2%0LLCCG!1Y6P4NUE&JaUCE`q@d8FSp&ZD%r@)e%m-996Vf5UjN#3U4a6ibK0T
+`69HYcELLX"GI+daNQG$H`JE*drQP0+5&i*b6'Vc*Am1,*`eP+j0$''2"'%*8q4M
+Uf1GZ$CFUG-a%FZkHaR%fP@+C(A@0YL%8bXZ$Z"p#eGfQ2)c!lSj$`KH9B8m01Z(
+qE5!9U"#h+6lkJ1!Kd[%B(22EP,U0`jKXdH)bHfH'[Kii15!fdT!!EVXQ4dXpPL)
+l+I+Mj+3BN!#qQd3XM#JV@!(%2!)e4*Hd2"1)-UJd1S2$qi`1lcH&#ajF5P!#AP5
+Rh-Ll&+V)UM)CDGmUUL6'h%H9)XrQ9#bD[6!,I8LMmCA&F2',ZS+TLUr3c%$UD+#
+AEAe304Lk50-MXH0V`a#kf)3aUKejl&%5&XGJ-1e$&d90)%54i!$M'3k!CLiH[&d
+I!dR0YPhSK'4%XXm!,T@D8L46bJB3Hf%FeV1,EH4[B)%1!CZ0UfH$E(*P+rXF(69
+[#T,-+fdQ'[6PAF`T-JIkQ9PlYPkj1bc#6)DV0'bTHI(B`!CACD,+p[+!Z#2dQRF
+dB8#c#*hC@G%5&3D&6NZ1EqD6D$V,FYq`DhHhUmEjb"8-Va0h*,f'"-`Ur`(Ep5r
+F[U([ITSH-heF&,CXFD(5aU6&qc5,X%&kQ)XLj!BA)f60a"(8P#Dci&!8lM(U3Z%
+&,8fc``Be1EEfFDF@9#-c,jaAiNVMSS@#(8Sr8LrjSZ&Y24Q9ZN"N*0bi3UmD'Q`
+10kl9Bq'BTS@V&"FmI%T-%k20!(,R`4PX56R*ZQpk13"h1%N6-[GJbNcr)SVQ#4S
+**@jkU'EG##jb3meBfGa#I"aYE`2a88Fl(H+lHKcL(R)DIK(0EL4$%#C+BEP@LN(
+5+1HALef1F1d%''9BJ+SiABL"#F6kGU#lRbqKLlK3k13NljDP#a6c)0KZ4d09C9D
+HA6$PV2KRj44MaB[cQKLpBEI[6bf&T@rL4!dm[b'E[UE2U$V1(jhL"QhkFqPfbDS
+RNh(+l4b9p&NbbHPc"%%#&`hPA1!kL@fi!GkJa0PQAY#P!6mk4k9l6eV,N!"1q9"
+*4#!U+SN1VhY2XFhdbDXNGJijmP*"F+T(E+4U3GNA9Y-AK0PkA9eZLf$ckHRp8,$
+#m(1'Np!S!&i2dqY-&245q(mAK*la9`d,Aehjch1V"i42CLhif3*Kbk2dRpTpeee
+#U[SfGFUalkX2UE15,b3[&q,a-qCTp8qAcTSKT!SRe8kejE(NV#YUYr#'F%hb-rV
+H,ci8-S5r#cPcNYF+2@T&(YLZrR4fmY6,kTm,8i4Pb5mRIr2K0am*BH'2dNKKfG2
+#V16,b41%%qZ5[jNRV%bq,2`[IPB,jG1%hiiANXF,*CbfMhr`i2QRaielHR$,PF'
+iJ5[G!d*!+"-qI[VA9li4IVdJZ82S@l$$)q"5FFT$kKp-%pjrp&(KIappp10lCJL
+M-i6RC`L6(K1@RKMS&YkB)DaA&rBX5liY1Ap`[c"EII6B`H6[*(meq+EDeLbF'ha
+`f[+p%pU%[d`VkE%,FG-%fV3D,cJ!%RZhZSba&GjrDp'L,r!Mr$YH(,P3X1*#`A*
+ebQ#Em&YeR[$5&@&!2I1Tep9VVJJR9jd3cR8)(38r9"p0GL5r*4`@rQATB'*[FNj
+bmf"CpcI#bp+)EhkScNRqCI+E`Qq&e+@$04mQ&bB2U$Gbb[)ac[($*iAT`K*eSr"
+$i4VKq0-R9`JAKF'HeDqV[a@q&+B12rR0CD(R`XqkKGFAU9qmdLGmI-f%"liCdbI
+mj!I#aI(GilYRR"mRG#qI0N8SA$RMp4NRKB[cKBprrH-6,`NAAa1qIHBh3RD(m-b
+[qhjdVR[-H3#3!aJ!!#5)!!"AZ!#3!`J!N!-J!!!r2!!(UI!!N!-+@-!!5S!!!%U
+!!*!$'Qi!N!-"GJ"1F8U$CL*"l3!J)$`r2!!!)MbTm!!"5N&Q"%T!C`T)3%K"))!
+K33!%3UG"q[r1d2`"!#m),c`!!"PZ,`0K!!+X9)pR3%)i#Pj#Tbmm4%&836mm"0@
+S(h!"%F!+ANUICaK1F6!mUA#R4N2k!#SLL%(k!#!`2+P`TNG+JfF%F!&1G8lY!#*
+1F8U$CJ+Tp(!!6R9J"J#3"3&1F4mkrrC+(fB551IJi%(krqT3d%kk"Dj-h`F(,cV
+rhNjeB(*"6%&%4%008!!$!*!d8(*"E8MRB2"d8*r#,dJ!)#"2)P3aD3!8!"JK3!!
+N-A`!!3!XdT%K33!ZS!,I`NcI$`C1G8Si#PjR$#!U!!KR$#"!)""R"Lmkri41G8M
+R(`C"q[qHF!`L+J!%`VJ$'Q'NCJ!"2NKkrij1ZJGZ@%q`H[pDCJ!"$U%D,JJ)+J"
+!!!4R"L"i!UDJ'b`U!!3U+J!)'#S!"*I8PG3J1[p@S4ir1!)JCJ!!l&42,%JJ1[p
+%)JE#Z!-D@%&K!2p-)$Vr2-#i!aT"q[mi))"+K@B%S5*J"#"&S#GQ!!#d+NJJ$P#
+!3IVr###!)$Vr#P'!3IVr!##!3QG)HJ#m,a9)H[m#,cVqiLmkrZ)[1[l+,cVqbLm
+krXTK!!e1-"pR)$m!5S9R##"0S#UJ+f!%)%fJ)b"1S"mJ4k!E-Gm#)'"J)%kJ(b"
+(S"Yb!")%j`RM'H34!!%!)!)"!1!J6D"T!J!!(i!")%fJDYA8ep4"q[jf5T!!C`K
+`!D#BF!1JQ#"0*8J!#(!!60pJq%je60pJq'!!rVir!#"1S"mJ4k!E-Gm#)0A8ep3
+`1!)J-F!+B*()*8J!#%cIB2K1G8j@!!")j`!i+'i!$%IkrLT&q[iU)"5`NQd%)")
+SJ%U!Ea)J8b*Z!!LL,L!8dC14NR!!B!3`22rC60mF!%jH6R919[r)51FH1#BZ!!J
+S,J!-+'i!%%(krESY52r83Llrb+%D,8Mrc&92U"``(cS!$%8!!'pF5'lrl$!&8d8
+r!+J298m[,[rXU!d`(c`!$%B!!'rF3LHTQeP2,blrl$!'8dBr!+J1)"mY32r`FJ%
+I!DQE)'lrm%U3!'F398m[#+QQ-"p)`()%`)&Ra#mZrr#TSf#m%#i!&'F+@8mZZ!+
+Q)&qJ'cmmS2a1ZJ5'9%mY32r35S"R!!'H,`"1ZJ2@@%p+!'F+F!%G3!!@6[S#'%K
+Zrq4)E[rJ5'lrf%kk"@T2l`!-)#lri+%H,8Mrh#!)C`!"C#!Zrq5K(Le)rqJJ#'F
+!!93[,[rN,`K1ZJ@i8%mJ!fB!!+CC6bmm3dp%48*RU"mJ(be!rr"+J'F!!)iJ3#*
+3FKM6`5m*6VS%Y&K2FJ1`3@Cf)!dJ3(!SdF!Y52rd)Qlrm#44F"M9`#e+rrJ[#Nk
+k",TB6be!rr`JE[r`S#P35LCZrp3R5J!S@8m[,[r`6VS9c#!IFZM3J9'!*d!!,&9
+25(Vq-LmZrr4)E[rm,``["#mZrp`[,[rJ,blrk%kk#XC86bmZrr#TSb4Zrp3PE[r
+3!!`PE[rF!"!PE[rJ!"3PE[rS!"Jr2+'B6VS$9P42*N!r2+LI6VS$5P42)J!J#l#
+"CJ4`!'!#F!%J!#9!!"`P4!!J*8`!*%Kkqm`r2+$m2cbJr%kk![K86am!6VS98Mm
+mSCK1ZJ--9%p+J'F%F!'JQ#"m!!!"@M!35-$JJ()'X)&Q$%(k!+iLI!!!!c`LL"e
+m!!(rb#"ZrmbJ'e92U"``(cS!$%8!!'pd5'lrl$!&8d8r!+J298m[,[rXU!d`(c`
+!$%B!!'rF3LHTQeP2,blrl$!'8dBr!+J1)"mY32r`FJ%I!DQE98m[,[r`UDB`(dM
+!FJ6!J@F),blrm+QLB-)NE[r`5T*R%&92,`UTTM!I5-"b"-#"CkS[#UQMB+33,[r
+)(8!!&NcI((K1AL"I6qm!$Nl36PErr%MR!$"#,[rm2cbJr%kk!La86b4!5S"RA#m
+!6VS"J&K25J"R8#!+*N!J3#mS!!`r2+$m2cbJr%kk!Gj86am!6VS81#",)'J!%+!
+I)%XJD!!BS"mJI!!!!9S`%%M!i)"b"V#"CJT`!#"m!!!$2##!(A`!!Irm%#lrr%c
+I$!"1ANje6PErk%MR(cKC6kPe)"mU!%KZrqLSG#!0)%!J%(+'d)%Y32rm)%"F5%2
+Zrq`Lf#,B@8m[2%4"9%%r2!69UD!J(bK!)%!N8$)U!!L5DJ!%2!%d+J!'P'S!!Mi
+#0LlrmNM$1#lrlNM%PS3i!8M%PS4U!P+$iS-p3rrf0Llrm%M$1#lrl%M%PS3i!NM
+%PS4U!P+$iS-p3rrd0LlrpYC"282rqM)Zrr653Me"rrKC6d+R5'lrp%Kk!'Cb!4m
+"FJ%r!A,r,`&#*d+RU4-J(bC!,`#SF`D&!*!$H#m-)%Y`%0(!,`LSpPP2UA8J(l#
+&C!*Jp&92UA33(fB#B2C`rcm!3QFJ(k!b,`ZT&#m-UD-[,[rSU(0-haci6Pj1G3!
+#!!"19J!!51F!-#4Z!!JJ#LC!)%!L+!!#$)&"6%&%CKBL+!!'$)&%3de3CJS`+!!
++FJ1`3@F%F!"J!R!"60m-!%jH6R8[#PP22cbSER!"(`"1ZK*i)&mN5&P22cbUER!
+"(`"1ZK*Q)PmJ5V(*CJB`2!)!B!3`2!3!*&p1G8j@!!![!cBZ!!J`!dM!!S!!!!J
+!5S"["(!"B!*`!#BI6Pj1G8j@rra)ja`!0Li!#$m$6VVrc&42(8$rr()"X!&Q%!*
+$"rp1Z[q!X%0Z"(!!B#KC6cmmU*p`!4m!6VS4m#!I+J"C6cm$(blrr%kk%H!J(bJ
+!X)9Q!R!!60m!1%jH6R919J!!51FB-$JZ!!JNEJ!+)%SJ%#C!)%!b%!a"384Q+$)
+S!!)-3805CKif"(,rYN&R'L!S!!4b'1+S!S!!N!2r-J0)`E#"C`4`!'!#F!%G3!!
+160m-'%jH)&pF6dl36PB!!&925'i!#($r2`"1Z[q5%"pR%L"Z!!JJ+!!%FKMLU!*
+!!2pJ!R$r6Pj1G8j@!!"96dKZ!!K`rcm!6VVrC"!ICa!JEJ!))#J!"!+!!2q3!f!
+#F2p1ANje6PB!!%MR'$JQEJ!)+'i!$#",-,`$!A!!*%`NJ#Bm!!!"*0H5"T)!!!*
+)"T)!N!-J+$`!N!1!fC,CNLJm!!!%N!$CNYH5fC)'NJ#3!h`'NJ!!J!"`!#4Z!"!
+NJ!D5!*!$*!D5!*!$)!D5!*!$5!D5!*!$2N*!60mF'%jH6R919[rN51FI1#CZ!!J
+U,J!-)!XS3#e!rqK`*0R!,8crl(!JfF!Y62r`F%MC`#e-rr4`2YR!)!b3!)Z`K@-
+'F'91qJ#b3N!q!%*!28$rj$B(F#5f3'4)F!5f3'3%F!"J$(!!-!0CJ'S#9S$NJ(J
+!1!-Y42rif+lrk#4%&)!J,[rid)$3V[r`)%!`V[rNF!%8%R)!%J,MB0&Zrq454f#
+`3N!q!(!"2!!f"h!IYN"N4(!"YN"N"(!!B!a`!$!$8i"U!P+!iS"i!$J$,86rr0L
+Zrq`N4"5!)#lrr0#!d+lrp#"!-)C`!435FJ!5!Z0Jh%"54f#d3N"-haci6Pj1G8j
+@rr")jami*'i!##CZ!!`k,J!3+'i!%N*!2!!b"A!!-!(3J$3'FJ!b!V#"Ea4#3$3
+'FJ!b!Y+"dS`J36#!8NCJfN*!2!"`!Me!rr)f"VC&C!!!Z%*!2J"#3$e!rr"`!$!
+$jB$3LL"!)"!Y32rd-JC`!$!"d)XJ3"J3GJ!@",C(B`!!JM!ZrrCb!F""d@lrm(!
+!-!06J$3(FJ!b!V#"Ecii,[r`GJ!f"#e$rrc@JpD-)%0+8'B5)#lrr0#!d)`J3$#
+Zrr*8E[rb-Llrm(!!-!(3J0#-)%!`%$e!rr"J&M!&d%$34M3Zrr"b!$)#dS(5M#"
+"-)"54b!Zrr6LL#e!rr4J!2pX8NCJ!2p%60mFq%jH6R919[rm51FF-#4Z!!Jf,J!
+-*Qi!$M)$F!!`!HD!1!!`!h)(`%%k!(!!,8$rr$3%FJ!b!Y++)%%5%(!!%!%d"A)
+!-J,LS()"`)(4V[rm)Llrr11*dSXJ36)3F!!`!5e!rra546!&FJL`3@B'3N!k!&*
+%-Li!%R!!-!(3J,#ZrraM!Q#U%#lrra)Z!"25!C!!!8cI$$K1ANje6PErr%MR(b!
+NEJ!)1#i!$$SZ!!ib"(!!-!(QJ$`!-J4d"m*#2J&f!$B!eSSJ3a!3G!!8!#e#rra
+`!$!"0!9b!$)#d)(QJ()#X)&R$()"X)&R)%U!Cc4J-M3'FJ!b!P5"dSSJ34)3F!!
+3!A)3ikL"V[rm0!Cb!$)#8S(5LL""%K"`!"!"iBL"V[rm)#lrr$3(FJ!b!Z+S,8$
+rr($rFL!f"A3!0!15JZ+S`'lrrNcI"2K1ANje6PErf%MR(cJQEJ!)+'i!$L!m!!!
+"*0'Z!")J2!!!!NM4VJ!5)#i!%Le!rqab)01Z!")L,J!5,8(rm#3m!*!$J0@Z!")
+N,J!5,8,rp#4,'"*f!"B%,82rq1D$HJI'49*$282rh#BZrrMLJhS$aN983ce$rqC
+f!6SZrqEVBce$rqKq3-J(I!!F"$e'rq*i!HYN8d3p42rJ+Llrq(i"bSGR#(S!1J4
+6K@!#H[mp4IrHH!Jp42rN5NCR4LmZ!")[!$m$8NS[#NkkrcT2l`!1jd$4E[rN,bi
+!%LmZrr!r!bmZrqa1ZJX)6qm!$LmZrr3r!bmZrq`[,[r`6VVmV%r[!!j#3$e!rpJ
+`,[rBX'i!$'3!!6S`,[rLCcSN3$mZrqJ[,[rd2blrj#m,6VVpMNr[!!`5!#!+F!!
+3!6e!rpTd!$3!e+lrl#"#%""b!")!dflrj'!F2blrjMmZrq3[#dkkrI"36ce!rpS
+`,[rQd@lrj$!ZrpU`E[rHCKBb,[rB8Qlrf(!!-!(3M#"!3K"J!2pk-#lrfV"Zrq"
+Q!!#8-#lriQFk*%!r,[rS,blrp$mZrq3[#dkkr3C2l`!-%J!J#R!!%!%p32rDG!!
+d!05Zrq`J3K!3FJ!5!00Zrq4J($mZrqBr,[rN,`Y1Z[eS8%mp32rD-#lrjY&Zrq4
+@E[rD-#lrfP0ZrpT+3'F!r`!i,[rBGJ!f"#e$rra6JpD-)%-3%#)Zrrc5M#""%)"
+5E[rBB-i3,[rGd#lrfc3ZrpK5E[rBFJ!b!Y+-)%%3J'!!rVib,[rNF!!`!9k!jS"
+-haci6Pj1G8j@ria)jami*Qi!##SZ!!`SEJ!3,#i!&#e,rmK`*0I!,8[ri(!Jem!
+Y5rr-F%MA`#e,rq3Y62q8*M`!!!%NeklrP#!m!!!#50'Zrj4`)0'Zrj3S2!#3!i$
+CV[q8fDlrP#eZrj6rY#Jm!!!%N!$CV[q8,@lrP2qieklrP#eZrj6r[0QZrj3YE[q
+8rp4`I0'Zrj3YE[q8rk3J2!!!J!$4V[q8)#lrP*!!M,#&B`T`C6e!!#K1qJCkF!!
+Z!%*!28$rM#4Zrk69r!!!J!!Y5[qS,@lrT2q3!#em!!#!!2rS5'lrk#mZrk3JEJ!
+N6T!!8%mJ,[rSCJT`Cce!!#K1qJBd*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[qS,8M
+rp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!ZrqbL,L4
+Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K1qJA
+!)'lrN!"5V[q3!"!3(8$rS()!%J$5390"28(rd$!Zrp$33$e!rp)JEJ!F)"$3VJ!
+J,8$rX#4!,``[,[qi2c`"*#mZrj!!6VVlmNr[!!ib!#!+F!!`!G'Zrj!!,``[,[q
+d2c`"*#mZrlK1ZJHk6qm!$LmZrl`r2!%N,blrZ#mZrl41Z[PF6qm!$L4!,``[,[q
+i2blrd#mZrj!!6VVlS%r[!!ib!#!+F!!`!G'Zrj!!,``[,[qd2blrd#mZrlK1ZJG
+S6qm!$LmZrp3r,[r3,blrZ#mZrl41Z[N+6qm!$R!!,J"#3$e!ri`YEJ!Jrk`JE[q
+XXHlrX'3!"+K#3$e!rjJ-EJ*)rjKN!!$#-#lrM'B!!)`NE[q3!&*+YHlrU'0S)'l
+rN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q3!#e)rq`J#'F1)'lrN!!
+LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i!*%k3!&"2)#lrm,#Zrr4
+N#R"R28!!+%lk"%)JE[q3!&+Zrj!!%K"`!"!",J"`#$e!ri``"h)"`%(4E[qB-Ll
+rQ(!!-!(3J0#Zrl`J3$!328$rQ#!(iSJZ!&0ZriaJ!2mi"'i#52qB$'i"!2qBC"!
+JE[qX8UlrV"#ZrjPJ!2m)"'i"!2qB1#lrQ(B!0J3Y3rrieS2@V[r-)%-`%$e!rjS
+L,[ridUlrb#""%K"`!"!"28$rR%T!C`!!`JaZ!"MrM')!!*JNE[q3!&*+YHlrU'0
+S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q3!#e)rq`J#'F1)'l
+rN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i!*%k3!&"2)#lrm,#
+Zrr4N#R"R28!!+%lk!bJJE[q3!&+Zrj!!%K"`!"!"0#lrM()!-J,MU)k!8'lrM'!
+!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qD)!IQU#i!Q@lrM%*!28$rQ$!ZrjL`E[r
+5C!!!`M!ZriaQ!!#-*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHl
+rT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8V
+rN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K1qJ*B)'lrN!"5V[q
+3!")3F!!3!5i!F!Jp32q--!Gb!F""d@lrQ$)ZrjK`!$!"d)$3V[r8)%!`%$e!rjJ
+J"q+),J"6E[q-B!$r0M!Zrp+4E[qB1#lrQ(B!0J3Y3rrmeS2@V[rN)%-`%$e!rji
+L,[rmdUlri#""%K"`!"!"28$rR%T!C`!!`JaZ!"MrM')!!*JNE[q3!&*+YHlrU'0
+S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q3!#e)rq`J#'F1)'l
+rN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i!*%k3!&"2)#lrm,#
+Zrr4N#R"R28!!+%lk!9SJE[q3!&+Zrj!!%K"`!"!"0#lrM()!-J,MU)k!8'lrM'!
+!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qH)!IQU#i!Q@lrM#"Zrk`b,[qHF!!`!C(
+!,8MrP,(Z!#"PB#"Zrj45V[q8%"!JE[qX8UlrV"#!)'lrP&+Zrj33%#"Zrka5V[q
+X%)!JE[q88UlrP"!3)'lrV&+Zrk`3J$!ZrjT6E[qD5N"R!2[H)'lrP&+Zrj33%#"
+Zrka5V[qX%)"Jh&CZrjSJEJ!BdFBb,[qHF!!`!5*Zrkb6lJ!JN!#*NF!Y52q8-#l
+rQQFQ)'i!'0('XHlrP'-D)'lrP&+Zrj33%#"Zrka5V[qX%)"6E[qDB03YEJ!Jrj3
+`,[qD8flrQNT!C`$lCL"Zrj45V[q8%"!JE[qX8UlrV"#!B0`JE[qXXHlrX'F)F'F
+p3!!SB"3JE[qXNHi!)#*Z!"`LL%*!28!!+%cI(2K1AL"I6qm!)%l3!(!m!$iJ!!"
+i)$i`)#BQ)(JJ2$dc-J!!1N0[EA"bCA0cD@pZ1N4PBfpYF(*PFh0TEfi`-c!a,Q-
+!!$`!2L!!!(JJ2M!J*LBJH#!m26-b!!!k3fpYF(*PFh0TEfik4'9MEfe`FQ9cFfP
+[EM!c-$%ZB`!!6PErk%MR(cJq,J!)+'i!$$BZ!!T`!$!$1!Gb!$)%N!#"FJ'`J@m
+!!E3p42rS282rkP*ZrqJ`,[rSX'i!#Q3FFJ!b!0+-)%%3%$3(FJ!b!Y+-)%%5%,!
+"C!*JeP0ZrqS`,[rUX%GM(()!-J$5M#""%"!d"h)!-J,5M#""%K#`!@-#B0J`,[r
+SX'lrkQ8#B()i,[rSGJ!f"#e$rr$@M#4$%K*`!"!"28$rl$SZrqTi!$J&,86rp0L
+-*N33%a5!&Ulrl5!Zrr$3J0#Z!"!J3$!328$rl#)Zrr65JG+Z!"!J36)3*#lrm05
+#e+i!%#"#-)%L,[rddS(5VJ!3)%%`J'!!rc)`,[rUX%GQ"P*(B!$r"$J(GJ!f"#e
+$rrM@M#4$%K*`!"!"28$rl$`ZrqTk!$S',8Arr0U-*N83%a5!&Ulrl5!ZrrM3J0#
+Z!"!J3$!328$rl#)Zrrc5JG+Z!"!J36)3*#lrq05#e+i!%#"#-)%L,[rmdS(5VJ!
+3)%%`J#!Zrr`L,[riN!#"0#i!#R)!-J)N,[rm8S+5JV#"E"i[,J!3,``r"Mm%6VV
+qA%r[!!``,[rU8N!q!'!!rP`[,J!3,``r,J!+-#lrkP*!2`"1Z[if6qm!$$eZrqS
+!#Q!!rMK-haci6Pj1G8j@rq4)jami*'i!#$SZ!!`QEJ!1+'i!%Le-rr!J2!!!!56
+C`#e-rr4#3$`!0JDf4@3XH!!i!be%rrMBLL"%%"!L,[ridUlrm#""%)!J,[rid)$
+3V[rd)%!`Je*'B-i[,[rd,blrm$m&3QG1Z[fb6qm!$%*!2!!f"VC&C"*`!$!$d+l
+rm#"!5K"Q"&*'B1K`!#e!rq3f"VC&C!!!U%T$Cc)J,[rNH!!i!be%rrcBV[r`)%3
+8%()!%J)Q,[rm8i2@V[r`)%-@%(3!&!15JZ1S,8$rj$3'FJ!b!Y+Zrr!J34)3F!!
+3!6i!,@lrj2rXF!!Y32rS-!G64dT!Cb!J,[rSiiJL,[rXG!(#JS#",8$rk#!Zrqc
+LL#e!rqaJf$3'FJ!b!Y+"dUlrp#""-K"`!$!"jB$3Lb"!)+lrk&*'8Ulrj'!!re4
+-haci6Pj1G5*I)&qJ*5k!DJ*#Pdl4)Pm5(c!I5J&R"+G'B!+M4Lk)6Y%LAa)I-"m
+JAdS"C`5Q4f!#SNG1d3#3!`S!1+!"!!8!N!B"!!!"N!#h!!'2Y`!!"&J'dcI8!`i
+!N!-F!li!%d4*9%`!$3#L38a59!!+!8T69&)J!!%"cP"cCA3!!!(Q4%a24`!#!I*
+69&)M!!!#&P"*3e3!!!)LGQ9bF`!"!LjMD@0Z!!!#4NP$6di!!!*55801)`!%!Pj
+'8N9'!!3#QN*14%`!!3,@399c-J!!!ZjKGA0d!!%#qQPME$J!!!-53dp%43!(!aj
+%394"!!!$IP0*@N8!!!1+4Q9KG!!!!jB%!Irr)!#3#)Arrb3!!)!'dcG!!)Irr`#
+3!pB!N!@'rrmN!!%Q"Y-h&!#!rrm!!!'R!*!&YIrr)!!#"3#3"B,rr`!!!RF!N!3
+$k2rr)!!#e3#3"BMrr`!!!`%!N!3#!2rr!!!$f3#3"!)"rrm!!!3A!*!%"%X!+!3
+!&)!'dcAd"+rrr`!!&0!!N!3""`!d)!!9$J#3"!3"rrmJ!!4M!*!&J[rr)!!%F`#
+3"BArrb3!")-'dcB3!)Irrb!!"*-!N!@'rrmN!!5M"Y-h1!#!rrmJ!!5c!*!&JIr
+r)!!%``#3"BMrrb!!"0-!N!3#!2rr)!!%j3#3"!)"rrmJ!!6e!*!%"+rrr`!!&E`
+!N!3#!*!$)!!&"3#3"!)"!!FJ!!89!*!&J2rr!!!&)3#3"!2SrrmJ!!PB!*!%"%X
+!%!3!%US'dcDX!3F!(#!!%X-!N!@!rrm!!!Pd!*!%!qMrr`!!#E3!N!8#rrmJ!"*
+k!*!&!Irr)!!5Q!#3"!4,rrm%!",I"Y-f!!4,rrm%!"3&"Y-f"!#!rrm!!"A-!*!
+&JIrr!!!@d!#3"B,rr`!!&p3!N!@$rrm!!"MB!*!&K2rr!!!Ch!#3"B$rr`!!'Z!
+!N!@"rrm!!"VV!*!&J[rr!!!DpJ#3"B2rr`!!'`%!N!@%rrm!!"X-!*!%!3$rr`!
+!'aF!N!@!rrm!!"Xh!*!(3!!!'fm!N!@%rrm!!"Z6!*!(6`!!'jF!N!@%rrm!!"[
+b!*!&!3"H(!!IpJE60U3!!J"S(!#4[`E60U!!!`"b(!#Ye!E60[3!"!"m(!$e3JE
+60V!!"3#'(!%Qc`E60V3!"J#3!"`"5Hi'dcDi!!$rrbJ"G3d!N!8(rrm!!A8h!*!
+'rrmS!''i!*!%rj!%!!&e+3#3"[rr!!'2U3#3"!C`FQpYF(3)a#"cG@CQDAJ,5@j
+cCA*d)%4TFfX,4AKTFh4TEQFJ8&F,5@jcCA*d)%4TFfX,4AKTFh4TEQFJ8&F16hG
+ZCA)JFQ9cEh9bBf816hGZCA)JFQ9cEh9bBf8*8f9RE@9ZG#!a#90PCfePER3J-JP
+6C@GYC@jd)$-*8f9RE@9ZG#!e#90PCfePER3J0JP6C@GYC@jd)$E&$3:
diff --git a/tk/mac/tkMacScrollbar.c b/tk/mac/tkMacScrollbar.c
new file mode 100644 (file)
index 0000000..3a1098a
--- /dev/null
@@ -0,0 +1,1610 @@
+/* 
+ * tkMacScrollbar.c --
+ *
+ *     This module implements the native Macintosh scrollbar widget 
+ *     for the Tk toolkit.  A scrollbar displays a slider and two 
+ *     arrows; mouse clicks on features within the scrollbar cause
+ *     scrolling commands to be invoked.
+ *
+ * Copyright (c) 1995-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) tkMacScrollbar.c 1.11 96/09/05 13:39:45
+ */
+
+#include "tkPort.h"
+#include "default.h"
+#include "tkInt.h"
+#include <Controls.h>
+#include "tkMacInt.h"
+
+/*
+ * The following definitions should really be in MacOS
+ * header files.  They are included here as this is the only
+ * file that needs the declarations.
+ */
+typedef        pascal void (*ThumbActionFunc)(void);
+
+#if GENERATINGCFM
+typedef UniversalProcPtr ThumbActionUPP;
+#else
+typedef ThumbActionFunc ThumbActionUPP;
+#endif
+
+enum {
+       uppThumbActionProcInfo = kPascalStackBased
+};
+
+#if GENERATINGCFM
+#define NewThumbActionProc(userRoutine)                \
+               (ThumbActionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppThumbActionProcInfo, GetCurrentArchitecture())
+#else
+#define NewThumbActionProc(userRoutine)                \
+               ((ThumbActionUPP) (userRoutine))
+#endif
+
+/*
+ * Change defines for Mac look & feel.
+ * TODO: should be moved to tkDefaults.h
+ */
+#undef DEF_SCROLLBAR_WIDTH
+#define DEF_SCROLLBAR_WIDTH            "15"
+#undef DEF_SCROLLBAR_RELIEF
+#define DEF_SCROLLBAR_RELIEF           "flat"
+#undef DEF_SCROLLBAR_BORDER_WIDTH
+#define DEF_SCROLLBAR_BORDER_WIDTH     "0"
+#undef DEF_SCROLLBAR_HIGHLIGHT_WIDTH
+#define DEF_SCROLLBAR_HIGHLIGHT_WIDTH  "0"
+
+/*
+ * A data structure of the following type is kept for each scrollbar
+ * widget managed by this file:
+ */
+
+typedef struct {
+    Tk_Window tkwin;           /* Window that embodies the scrollbar.  NULL
+                                * means that the window has been destroyed
+                                * but the data structures haven't yet been
+                                * cleaned up.*/
+    Display *display;          /* Display containing widget.  Used, among
+                                * other things, so that resources can be
+                                * freed even after tkwin has gone away. */
+    Tcl_Interp *interp;                /* Interpreter associated with scrollbar. */
+    Tcl_Command widgetCmd;     /* Token for scrollbar's widget command. */
+    Tk_Uid orientUid;          /* Orientation for window ("vertical" or
+                                * "horizontal"). */
+    int vertical;              /* Non-zero means vertical orientation
+                                * requested, zero means horizontal. */
+    int width;                 /* Desired narrow dimension of scrollbar,
+                                * in pixels. */
+    char *command;             /* Command prefix to use when invoking
+                                * scrolling commands.  NULL means don't
+                                * invoke commands.  Malloc'ed. */
+    int commandSize;           /* Number of non-NULL bytes in command. */
+    int repeatDelay;           /* How long to wait before auto-repeating
+                                * on scrolling actions (in ms). */
+    int repeatInterval;                /* Interval between autorepeats (in ms). */
+    int jump;                  /* Value of -jump option. */
+
+    /*
+     * Information used when displaying widget:
+     */
+
+    int borderWidth;           /* Width of 3-D borders. */
+    Tk_3DBorder bgBorder;      /* Used for drawing background (all flat
+                                * surfaces except for trough). */
+    Tk_3DBorder activeBorder;  /* For drawing backgrounds when active (i.e.
+                                * when mouse is positioned over element). */
+    XColor *troughColorPtr;    /* Color for drawing trough. */
+    GC troughGC;               /* For drawing trough. */
+    GC copyGC;                 /* Used for copying from pixmap onto screen. */
+    int relief;                        /* Indicates whether window as a whole is
+                                * raised, sunken, or flat. */
+    int highlightWidth;                /* Width in pixels of highlight to draw
+                                * around widget when it has the focus.
+                                * <= 0 means don't draw a highlight. */
+    XColor *highlightBgColorPtr;
+                               /* Color for drawing traversal highlight
+                                * area when highlight is off. */
+    XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
+    int inset;                 /* Total width of all borders, including
+                                * traversal highlight and 3-D border.
+                                * Indicates how much interior stuff must
+                                * be offset from outside edges to leave
+                                * room for borders. */
+    int elementBorderWidth;    /* Width of border to draw around elements
+                                * inside scrollbar (arrows and slider).
+                                * -1 means use borderWidth. */
+    int arrowLength;           /* Length of arrows along long dimension of
+                                * scrollbar, including space for a small gap
+                                * between the arrow and the slider.
+                                * Recomputed on window size changes. */
+    int sliderFirst;           /* Pixel coordinate of top or left edge
+                                * of slider area, including border. */
+    int sliderLast;            /* Coordinate of pixel just after bottom
+                                * or right edge of slider area, including
+                                * border. */
+    int activeField;           /* Names field to be displayed in active
+                                * colors, such as TOP_ARROW, or 0 for
+                                * no field. */
+    int activeRelief;          /* Value of -activeRelief option: relief
+                                * to use for active element. */
+
+    /*
+     * Information describing the application related to the scrollbar.
+     * This information is provided by the application by invoking the
+     * "set" widget command.  This information can now be provided in
+     * two ways:  the "old" form (totalUnits, windowUnits, firstUnit,
+     * and lastUnit), or the "new" form (firstFraction and lastFraction).
+     * FirstFraction and lastFraction will always be valid, but
+     * the old-style information is only valid if the NEW_STYLE_COMMANDS
+     * flag is 0.
+     */
+
+    int totalUnits;            /* Total dimension of application, in
+                                * units.  Valid only if the NEW_STYLE_COMMANDS
+                                * flag isn't set. */
+    int windowUnits;           /* Maximum number of units that can be
+                                * displayed in the window at once.  Valid
+                                * only if the NEW_STYLE_COMMANDS flag isn't
+                                * set. */
+    int firstUnit;             /* Number of last unit visible in
+                                * application's window.  Valid only if the
+                                * NEW_STYLE_COMMANDS flag isn't set. */
+    int lastUnit;              /* Index of last unit visible in window.
+                                * Valid only if the NEW_STYLE_COMMANDS
+                                * flag isn't set. */
+    double firstFraction;      /* Position of first visible thing in window,
+                                * specified as a fraction between 0 and
+                                * 1.0. */
+    double lastFraction;       /* Position of last visible thing in window,
+                                * specified as a fraction between 0 and
+                                * 1.0. */
+
+    /*
+     * Miscellaneous information:
+     */
+
+    Tk_Cursor cursor;          /* Current cursor for window, or None. */
+    char *takeFocus;           /* Value of -takefocus option;  not used in
+                                * the C code, but used by keyboard traversal
+                                * scripts.  Malloc'ed, but may be NULL. */
+    Tk_TimerToken autoRepeat;  /* Token for auto-repeat that's
+                                * currently in progress.  NULL means no
+                                * auto-repeat in progress. */
+    int flags;                 /* Various flags;  see below for
+                                * definitions. */
+
+    /*
+     * Mac specific fields.
+     */
+    ControlRef sbHandle;       /* Handle to the Scrollbar control struct. */
+} Scrollbar;
+
+/*
+ * Legal values for "activeField" field of Scrollbar structures.  These
+ * are also the return values from the ScrollbarPosition procedure.
+ */
+
+#define OUTSIDE                0
+#define TOP_ARROW      1
+#define TOP_GAP                2
+#define SLIDER         3
+#define BOTTOM_GAP     4
+#define BOTTOM_ARROW   5
+
+/*
+ * Flag bits for scrollbars:
+ * 
+ * REDRAW_PENDING:             Non-zero means a DoWhenIdle handler
+ *                             has already been queued to redraw
+ *                             this window.
+ * NEW_STYLE_COMMANDS:         Non-zero means the new style of commands
+ *                             should be used to communicate with the
+ *                             widget:  ".t yview scroll 2 lines", instead
+ *                             of ".t yview 40", for example.
+ * GOT_FOCUS:                  Non-zero means this window has the input
+ *                             focus.
+ * SCROLLBAR_GROW:             Non-zero means this window draws the grow
+ *                             region for the toplevel window.  Mac only.
+ * ACTIVE:                     Non-zero means this window is currently
+ *                             active (in the foreground).  Mac only.
+ */
+
+#define REDRAW_PENDING         1
+#define NEW_STYLE_COMMANDS     2
+#define GOT_FOCUS              4
+#define SCROLLBAR_GROW         8
+#define ACTIVE                 16
+
+/*
+ * Minimum slider length, in pixels (designed to make sure that the slider
+ * is always easy to grab with the mouse).
+ */
+
+#define MIN_SLIDER_LENGTH      5
+
+/*
+ * Information used for argv parsing.
+ */
+
+static Tk_ConfigSpec configSpecs[] = {
+    {TK_CONFIG_BORDER, "-activebackground", "activeBackground", "Foreground",
+       DEF_SCROLLBAR_ACTIVE_BG_COLOR, Tk_Offset(Scrollbar, activeBorder),
+       TK_CONFIG_COLOR_ONLY},
+    {TK_CONFIG_BORDER, "-activebackground", "activeBackground", "Foreground",
+       DEF_SCROLLBAR_ACTIVE_BG_MONO, Tk_Offset(Scrollbar, activeBorder),
+       TK_CONFIG_MONO_ONLY},
+    {TK_CONFIG_RELIEF, "-activerelief", "activeRelief", "Relief",
+       DEF_SCROLLBAR_ACTIVE_RELIEF, Tk_Offset(Scrollbar, activeRelief), 0},
+    {TK_CONFIG_BORDER, "-background", "background", "Background",
+       DEF_SCROLLBAR_BG_COLOR, Tk_Offset(Scrollbar, bgBorder),
+       TK_CONFIG_COLOR_ONLY},
+    {TK_CONFIG_BORDER, "-background", "background", "Background",
+       DEF_SCROLLBAR_BG_MONO, Tk_Offset(Scrollbar, bgBorder),
+       TK_CONFIG_MONO_ONLY},
+    {TK_CONFIG_SYNONYM, "-bd", "borderWidth", (char *) NULL,
+       (char *) NULL, 0, 0},
+    {TK_CONFIG_SYNONYM, "-bg", "background", (char *) NULL,
+       (char *) NULL, 0, 0},
+    {TK_CONFIG_PIXELS, "-borderwidth", "borderWidth", "BorderWidth",
+       DEF_SCROLLBAR_BORDER_WIDTH, Tk_Offset(Scrollbar, borderWidth), 0},
+    {TK_CONFIG_STRING, "-command", "command", "Command",
+       DEF_SCROLLBAR_COMMAND, Tk_Offset(Scrollbar, command),
+       TK_CONFIG_NULL_OK},
+    {TK_CONFIG_ACTIVE_CURSOR, "-cursor", "cursor", "Cursor",
+       DEF_SCROLLBAR_CURSOR, Tk_Offset(Scrollbar, cursor), TK_CONFIG_NULL_OK},
+    {TK_CONFIG_PIXELS, "-elementborderwidth", "elementBorderWidth",
+       "BorderWidth", DEF_SCROLLBAR_EL_BORDER_WIDTH,
+       Tk_Offset(Scrollbar, elementBorderWidth), 0},
+    {TK_CONFIG_COLOR, "-highlightbackground", "highlightBackground",
+       "HighlightBackground", DEF_SCROLLBAR_HIGHLIGHT_BG,
+       Tk_Offset(Scrollbar, highlightBgColorPtr), 0},
+    {TK_CONFIG_COLOR, "-highlightcolor", "highlightColor", "HighlightColor",
+       DEF_SCROLLBAR_HIGHLIGHT,
+       Tk_Offset(Scrollbar, highlightColorPtr), 0},
+    {TK_CONFIG_PIXELS, "-highlightthickness", "highlightThickness",
+       "HighlightThickness",
+       DEF_SCROLLBAR_HIGHLIGHT_WIDTH, Tk_Offset(Scrollbar, highlightWidth), 0},
+    {TK_CONFIG_BOOLEAN, "-jump", "jump", "Jump",
+       DEF_SCROLLBAR_JUMP, Tk_Offset(Scrollbar, jump), 0},
+    {TK_CONFIG_UID, "-orient", "orient", "Orient",
+       DEF_SCROLLBAR_ORIENT, Tk_Offset(Scrollbar, orientUid), 0},
+    {TK_CONFIG_RELIEF, "-relief", "relief", "Relief",
+       DEF_SCROLLBAR_RELIEF, Tk_Offset(Scrollbar, relief), 0},
+    {TK_CONFIG_INT, "-repeatdelay", "repeatDelay", "RepeatDelay",
+       DEF_SCROLLBAR_REPEAT_DELAY, Tk_Offset(Scrollbar, repeatDelay), 0},
+    {TK_CONFIG_INT, "-repeatinterval", "repeatInterval", "RepeatInterval",
+       DEF_SCROLLBAR_REPEAT_INTERVAL, Tk_Offset(Scrollbar, repeatInterval), 0},
+    {TK_CONFIG_STRING, "-takefocus", "takeFocus", "TakeFocus",
+       DEF_SCROLLBAR_TAKE_FOCUS, Tk_Offset(Scrollbar, takeFocus),
+       TK_CONFIG_NULL_OK},
+    {TK_CONFIG_COLOR, "-troughcolor", "troughColor", "Background",
+       DEF_SCROLLBAR_TROUGH_COLOR, Tk_Offset(Scrollbar, troughColorPtr),
+       TK_CONFIG_COLOR_ONLY},
+    {TK_CONFIG_COLOR, "-troughcolor", "troughColor", "Background",
+       DEF_SCROLLBAR_TROUGH_MONO, Tk_Offset(Scrollbar, troughColorPtr),
+       TK_CONFIG_MONO_ONLY},
+    {TK_CONFIG_PIXELS, "-width", "width", "Width",
+       DEF_SCROLLBAR_WIDTH, Tk_Offset(Scrollbar, width), 0},
+    {TK_CONFIG_END, (char *) NULL, (char *) NULL, (char *) NULL,
+       (char *) NULL, 0, 0}
+};
+
+/*
+ * Forward declarations for procedures defined later in this file:
+ */
+
+static void            ComputeScrollbarGeometry _ANSI_ARGS_((
+                           Scrollbar *scrollPtr));
+static int             ConfigureScrollbar _ANSI_ARGS_((Tcl_Interp *interp,
+                           Scrollbar *scrollPtr, int argc, char **argv,
+                           int flags));
+static void            DestroyScrollbar _ANSI_ARGS_((char *memPtr));
+static void            DisplayScrollbar _ANSI_ARGS_((ClientData clientData));
+static void            EventuallyRedraw _ANSI_ARGS_((Scrollbar *scrollPtr));
+static void            ScrollbarCmdDeletedProc _ANSI_ARGS_((
+                           ClientData clientData));
+static void            ScrollbarEventProc _ANSI_ARGS_((ClientData clientData,
+                           XEvent *eventPtr));
+static int             ScrollbarPosition _ANSI_ARGS_((Scrollbar *scrollPtr,
+                           int x, int y));
+static int             ScrollbarWidgetCmd _ANSI_ARGS_((ClientData clientData,
+                           Tcl_Interp *, int argc, char **argv));
+static pascal void     ScrollbarActionProc _ANSI_ARGS_((ControlRef theControl,
+                           ControlPartCode partCode));
+static pascal void     ThumbActionProc _ANSI_ARGS_((void));
+                           
+/*
+ * Globals uses locally in this file.
+ */
+static ControlActionUPP scrollActionProc = NULL; /* Pointer to func. */
+static ThumbActionUPP thumbActionProc = NULL;    /* Pointer to func. */
+static Scrollbar *activeScrollPtr = NULL;        /* Non-null when in thumb */
+                                                /* proc. */
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * Tk_MacScrollbarCmd --
+ *
+ *     This procedure is invoked to process the "scrollbar" Tcl
+ *     command.  See the user documentation for details on what
+ *     it does.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     See the user documentation.
+ *
+ *--------------------------------------------------------------
+ */
+
+int
+Tk_MacScrollbarCmd(clientData, interp, argc, argv)
+    ClientData clientData;     /* Main window associated with
+                                * interpreter. */
+    Tcl_Interp *interp;                /* Current interpreter. */
+    int argc;                  /* Number of arguments. */
+    char **argv;               /* Argument strings. */
+{
+    Tk_Window tkwin = (Tk_Window) clientData;
+    register Scrollbar *scrollPtr;
+    Tk_Window new;
+
+    if (argc < 2) {
+       Tcl_AppendResult(interp, "wrong # args: should be \"",
+               argv[0], " pathName ?options?\"", (char *) NULL);
+       return TCL_ERROR;
+    }
+
+    new = Tk_CreateWindowFromPath(interp, tkwin, argv[1], (char *) NULL);
+    if (new == NULL) {
+       return TCL_ERROR;
+    }
+
+    /*
+     * Initialize fields that won't be initialized by ConfigureScrollbar,
+     * or which ConfigureScrollbar expects to have reasonable values
+     * (e.g. resource pointers).
+     */
+
+    scrollPtr = (Scrollbar *) ckalloc(sizeof(Scrollbar));
+    scrollPtr->tkwin = new;
+    scrollPtr->display = Tk_Display(new);
+    scrollPtr->interp = interp;
+    scrollPtr->widgetCmd = Tcl_CreateCommand(interp,
+           Tk_PathName(scrollPtr->tkwin), ScrollbarWidgetCmd,
+           (ClientData) scrollPtr, ScrollbarCmdDeletedProc);
+    scrollPtr->orientUid = NULL;
+    scrollPtr->vertical = 0;
+    scrollPtr->width = 0;
+    scrollPtr->command = NULL;
+    scrollPtr->commandSize = 0;
+    scrollPtr->repeatDelay = 0;
+    scrollPtr->repeatInterval = 0;
+    scrollPtr->borderWidth = 0;
+    scrollPtr->bgBorder = NULL;
+    scrollPtr->activeBorder = NULL;
+    scrollPtr->troughColorPtr = NULL;
+    scrollPtr->troughGC = None;
+    scrollPtr->copyGC = None;
+    scrollPtr->relief = TK_RELIEF_FLAT;
+    scrollPtr->highlightWidth = 0;
+    scrollPtr->highlightBgColorPtr = NULL;
+    scrollPtr->highlightColorPtr = NULL;
+    scrollPtr->inset = 0;
+    scrollPtr->elementBorderWidth = -1;
+    scrollPtr->arrowLength = 0;
+    scrollPtr->sliderFirst = 0;
+    scrollPtr->sliderLast = 0;
+    scrollPtr->activeField = 0;
+    scrollPtr->activeRelief = TK_RELIEF_RAISED;
+    scrollPtr->totalUnits = 0;
+    scrollPtr->windowUnits = 0;
+    scrollPtr->firstUnit = 0;
+    scrollPtr->lastUnit = 0;
+    scrollPtr->firstFraction = 0.0;
+    scrollPtr->lastFraction = 0.0;
+    scrollPtr->cursor = None;
+    scrollPtr->takeFocus = NULL;
+    scrollPtr->autoRepeat = NULL;
+    scrollPtr->flags = 0;
+
+    /*
+     * Mac specific inits.
+     */
+    scrollPtr->sbHandle = NULL;
+
+    Tk_SetClass(scrollPtr->tkwin, "MacScrollbar");
+    Tk_CreateEventHandler(scrollPtr->tkwin,
+           ActivateMask|ExposureMask|StructureNotifyMask|FocusChangeMask|ButtonPressMask,
+           ScrollbarEventProc, (ClientData) scrollPtr);
+    if (ConfigureScrollbar(interp, scrollPtr, argc-2, argv+2, 0) != TCL_OK) {
+       goto error;
+    }
+
+    interp->result = Tk_PathName(scrollPtr->tkwin);
+    return TCL_OK;
+
+    error:
+    Tk_DestroyWindow(scrollPtr->tkwin);
+    return TCL_ERROR;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * ScrollbarWidgetCmd --
+ *
+ *     This procedure is invoked to process the Tcl command
+ *     that corresponds to a widget managed by this module.
+ *     See the user documentation for details on what it does.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     See the user documentation.
+ *
+ *--------------------------------------------------------------
+ */
+
+static int
+ScrollbarWidgetCmd(clientData, interp, argc, argv)
+    ClientData clientData;     /* Information about scrollbar
+                                        * widget. */
+    Tcl_Interp *interp;                        /* Current interpreter. */
+    int argc;                          /* Number of arguments. */
+    char **argv;                       /* Argument strings. */
+{
+    register Scrollbar *scrollPtr = (Scrollbar *) clientData;
+    int result = TCL_OK;
+    size_t length;
+    int c;
+
+    if (argc < 2) {
+       Tcl_AppendResult(interp, "wrong # args: should be \"",
+               argv[0], " option ?arg arg ...?\"", (char *) NULL);
+       return TCL_ERROR;
+    }
+    Tcl_Preserve((ClientData) scrollPtr);
+    c = argv[1][0];
+    length = strlen(argv[1]);
+    if ((c == 'a') && (strncmp(argv[1], "activate", length) == 0)) {
+       if (argc == 2) {
+           switch (scrollPtr->activeField) {
+               case TOP_ARROW:         interp->result = "arrow1";      break;
+               case SLIDER:            interp->result = "slider";      break;
+               case BOTTOM_ARROW:      interp->result = "arrow2";      break;
+           }
+           goto done;
+       }
+       if (argc != 3) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " activate element\"", (char *) NULL);
+           goto error;
+       }
+       c = argv[2][0];
+       length = strlen(argv[2]);
+       if ((c == 'a') && (strcmp(argv[2], "arrow1") == 0)) {
+           scrollPtr->activeField = TOP_ARROW;
+       } else if ((c == 'a') && (strcmp(argv[2], "arrow2") == 0)) {
+           scrollPtr->activeField = BOTTOM_ARROW;
+       } else if ((c == 's') && (strncmp(argv[2], "slider", length) == 0)) {
+           scrollPtr->activeField = SLIDER;
+       } else {
+           scrollPtr->activeField = OUTSIDE;
+       }
+       EventuallyRedraw(scrollPtr);
+    } else if ((c == 'c') && (strncmp(argv[1], "cget", length) == 0)
+           && (length >= 2)) {
+       if (argc != 3) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " cget option\"",
+                   (char *) NULL);
+           goto error;
+       }
+       result = Tk_ConfigureValue(interp, scrollPtr->tkwin, configSpecs,
+               (char *) scrollPtr, argv[2], 0);
+    } else if ((c == 'c') && (strncmp(argv[1], "configure", length) == 0)
+           && (length >= 2)) {
+       if (argc == 2) {
+           result = Tk_ConfigureInfo(interp, scrollPtr->tkwin, configSpecs,
+                   (char *) scrollPtr, (char *) NULL, 0);
+       } else if (argc == 3) {
+           result = Tk_ConfigureInfo(interp, scrollPtr->tkwin, configSpecs,
+                   (char *) scrollPtr, argv[2], 0);
+       } else {
+           result = ConfigureScrollbar(interp, scrollPtr, argc-2, argv+2,
+                   TK_CONFIG_ARGV_ONLY);
+       }
+    } else if ((c == 'd') && (strncmp(argv[1], "delta", length) == 0)) {
+       int xDelta, yDelta, pixels, length;
+       double fraction;
+
+       if (argc != 4) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " delta xDelta yDelta\"", (char *) NULL);
+           goto error;
+       }
+       if ((Tcl_GetInt(interp, argv[2], &xDelta) != TCL_OK)
+               || (Tcl_GetInt(interp, argv[3], &yDelta) != TCL_OK)) {
+           goto error;
+       }
+       if (scrollPtr->vertical) {
+           pixels = yDelta;
+           length = Tk_Height(scrollPtr->tkwin) - 1
+                   - 2*(scrollPtr->arrowLength + scrollPtr->inset);
+       } else {
+           pixels = xDelta;
+           length = Tk_Width(scrollPtr->tkwin) - 1
+                   - 2*(scrollPtr->arrowLength + scrollPtr->inset);
+       }
+       if (length == 0) {
+           fraction = 0.0;
+       } else {
+           fraction = ((double) pixels / (double) length);
+       }
+       sprintf(interp->result, "%g", fraction);
+    } else if ((c == 'f') && (strncmp(argv[1], "fraction", length) == 0)) {
+       int x, y, pos, length;
+       double fraction;
+
+       if (argc != 4) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " fraction x y\"", (char *) NULL);
+           goto error;
+       }
+       if ((Tcl_GetInt(interp, argv[2], &x) != TCL_OK)
+               || (Tcl_GetInt(interp, argv[3], &y) != TCL_OK)) {
+           goto error;
+       }
+       if (scrollPtr->vertical) {
+           pos = y - (scrollPtr->arrowLength + scrollPtr->inset);
+           length = Tk_Height(scrollPtr->tkwin) - 1
+                   - 2*(scrollPtr->arrowLength + scrollPtr->inset);
+       } else {
+           pos = x - (scrollPtr->arrowLength + scrollPtr->inset);
+           length = Tk_Width(scrollPtr->tkwin) - 1
+                   - 2*(scrollPtr->arrowLength + scrollPtr->inset);
+       }
+       if (length == 0) {
+           fraction = 0.0;
+       } else {
+           fraction = ((double) pos / (double) length);
+       }
+       if (fraction < 0) {
+           fraction = 0;
+       } else if (fraction > 1.0) {
+           fraction = 1.0;
+       }
+       sprintf(interp->result, "%g", fraction);
+    } else if ((c == 'g') && (strncmp(argv[1], "get", length) == 0)) {
+       if (argc != 2) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " get\"", (char *) NULL);
+           goto error;
+       }
+       if (scrollPtr->flags & NEW_STYLE_COMMANDS) {
+           char first[TCL_DOUBLE_SPACE], last[TCL_DOUBLE_SPACE];
+
+           Tcl_PrintDouble(interp, scrollPtr->firstFraction, first);
+           Tcl_PrintDouble(interp, scrollPtr->lastFraction, last);
+           Tcl_AppendResult(interp, first, " ", last, (char *) NULL);
+       } else {
+           sprintf(interp->result, "%d %d %d %d", scrollPtr->totalUnits,
+                   scrollPtr->windowUnits, scrollPtr->firstUnit,
+                   scrollPtr->lastUnit);
+       }
+    } else if ((c == 'i') && (strncmp(argv[1], "identify", length) == 0)) {
+       int x, y, thing;
+
+       if (argc != 4) {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " identify x y\"", (char *) NULL);
+           goto error;
+       }
+       if ((Tcl_GetInt(interp, argv[2], &x) != TCL_OK)
+               || (Tcl_GetInt(interp, argv[3], &y) != TCL_OK)) {
+           goto error;
+       }
+       thing = ScrollbarPosition(scrollPtr, x,y);
+       switch (thing) {
+           case TOP_ARROW:     interp->result = "arrow1";      break;
+           case TOP_GAP:       interp->result = "trough1";     break;
+           case SLIDER:        interp->result = "slider";      break;
+           case BOTTOM_GAP:    interp->result = "trough2";     break;
+           case BOTTOM_ARROW:  interp->result = "arrow2";      break;
+       }
+    } else if ((c == 's') && (strncmp(argv[1], "set", length) == 0)) {
+       int totalUnits, windowUnits, firstUnit, lastUnit;
+
+       if (argc == 4) {
+           double first, last;
+
+           if (Tcl_GetDouble(interp, argv[2], &first) != TCL_OK) {
+               goto error;
+           }
+           if (Tcl_GetDouble(interp, argv[3], &last) != TCL_OK) {
+               goto error;
+           }
+           if (first < 0) {
+               scrollPtr->firstFraction = 0;
+           } else if (first > 1.0) {
+               scrollPtr->firstFraction = 1.0;
+           } else {
+               scrollPtr->firstFraction = first;
+           }
+           if (last < scrollPtr->firstFraction) {
+               scrollPtr->lastFraction = scrollPtr->firstFraction;
+           } else if (last > 1.0) {
+               scrollPtr->lastFraction = 1.0;
+           } else {
+               scrollPtr->lastFraction = last;
+           }
+           scrollPtr->flags |= NEW_STYLE_COMMANDS;
+       } else if (argc == 6) {
+           if (Tcl_GetInt(interp, argv[2], &totalUnits) != TCL_OK) {
+               goto error;
+           }
+           if (totalUnits < 0) {
+               totalUnits = 0;
+           }
+           if (Tcl_GetInt(interp, argv[3], &windowUnits) != TCL_OK) {
+               goto error;
+           }
+           if (windowUnits < 0) {
+               windowUnits = 0;
+           }
+           if (Tcl_GetInt(interp, argv[4], &firstUnit) != TCL_OK) {
+               goto error;
+           }
+           if (Tcl_GetInt(interp, argv[5], &lastUnit) != TCL_OK) {
+               goto error;
+           }
+           if (totalUnits > 0) {
+               if (lastUnit < firstUnit) {
+                   lastUnit = firstUnit;
+               }
+           } else {
+               firstUnit = lastUnit = 0;
+           }
+           scrollPtr->totalUnits = totalUnits;
+           scrollPtr->windowUnits = windowUnits;
+           scrollPtr->firstUnit = firstUnit;
+           scrollPtr->lastUnit = lastUnit;
+           if (scrollPtr->totalUnits == 0) {
+               scrollPtr->firstFraction = 0.0;
+               scrollPtr->lastFraction = 1.0;
+           } else {
+               scrollPtr->firstFraction = ((double) firstUnit)/totalUnits;
+               scrollPtr->lastFraction = ((double) (lastUnit+1))/totalUnits;
+           }
+           scrollPtr->flags &= ~NEW_STYLE_COMMANDS;
+       } else {
+           Tcl_AppendResult(interp, "wrong # args: should be \"",
+                   argv[0], " set firstFraction lastFraction\" or \"",
+                   argv[0],
+                   " set totalUnits windowUnits firstUnit lastUnit\"",
+                   (char *) NULL);
+           goto error;
+       }
+       ComputeScrollbarGeometry(scrollPtr);
+       EventuallyRedraw(scrollPtr);
+    } else {
+       Tcl_AppendResult(interp, "bad option \"", argv[1],
+               "\": must be activate, cget, configure, delta, fraction, ",
+               "get, identify, or set", (char *) NULL);
+       goto error;
+    }
+    done:
+    Tcl_Release((ClientData) scrollPtr);
+    return result;
+
+    error:
+    Tcl_Release((ClientData) scrollPtr);
+    return TCL_ERROR;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * DestroyScrollbar --
+ *
+ *     This procedure is invoked by Tcl_EventuallyFree or Tcl_Release
+ *     to clean up the internal structure of a scrollbar at a safe time
+ *     (when no-one is using it anymore).
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Everything associated with the scrollbar is freed up.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+DestroyScrollbar(memPtr)
+    char *memPtr;      /* Info about scrollbar widget. */
+{
+    register Scrollbar *scrollPtr = (Scrollbar *) memPtr;
+
+    /*
+     * Free up all the stuff that requires special handling, then
+     * let Tk_FreeOptions handle all the standard option-related
+     * stuff.
+     */
+
+    /*
+     * Free Macintosh control.
+     */
+    if (scrollPtr->sbHandle != NULL) {
+        DisposeControl(scrollPtr->sbHandle);
+       scrollPtr->sbHandle = NULL;
+    }
+        
+    if (scrollPtr->troughGC != None) {
+       Tk_FreeGC(scrollPtr->display, scrollPtr->troughGC);
+    }
+    if (scrollPtr->copyGC != None) {
+       Tk_FreeGC(scrollPtr->display, scrollPtr->copyGC);
+    }
+    Tk_FreeOptions(configSpecs, (char *) scrollPtr, scrollPtr->display, 0);
+    ckfree((char *) scrollPtr);
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * ConfigureScrollbar --
+ *
+ *     This procedure is called to process an argv/argc list, plus
+ *     the Tk option database, in order to configure (or
+ *     reconfigure) a scrollbar widget.
+ *
+ * Results:
+ *     The return value is a standard Tcl result.  If TCL_ERROR is
+ *     returned, then interp->result contains an error message.
+ *
+ * Side effects:
+ *     Configuration information, such as colors, border width,
+ *     etc. get set for scrollPtr;  old resources get freed,
+ *     if there were any.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+ConfigureScrollbar(interp, scrollPtr, argc, argv, flags)
+    Tcl_Interp *interp;                        /* Used for error reporting. */
+    register Scrollbar *scrollPtr;     /* Information about widget;  may or
+                                        * may not already have values for
+                                        * some fields. */
+    int argc;                          /* Number of valid entries in argv. */
+    char **argv;                       /* Arguments. */
+    int flags;                         /* Flags to pass to
+                                        * Tk_ConfigureWidget. */
+{
+    size_t length;
+    XGCValues gcValues;
+    GC new;
+
+    if (Tk_ConfigureWidget(interp, scrollPtr->tkwin, configSpecs,
+           argc, argv, (char *) scrollPtr, flags) != TCL_OK) {
+       return TCL_ERROR;
+    }
+
+    /*
+     * A few options need special processing, such as parsing the
+     * orientation or setting the background from a 3-D border.
+     */
+
+    length = strlen(scrollPtr->orientUid);
+    if (strncmp(scrollPtr->orientUid, "vertical", length) == 0) {
+       scrollPtr->vertical = 1;
+    } else if (strncmp(scrollPtr->orientUid, "horizontal", length) == 0) {
+       scrollPtr->vertical = 0;
+    } else {
+       Tcl_AppendResult(interp, "bad orientation \"", scrollPtr->orientUid,
+               "\": must be vertical or horizontal", (char *) NULL);
+       return TCL_ERROR;
+    }
+
+    if (scrollPtr->command != NULL) {
+       scrollPtr->commandSize = strlen(scrollPtr->command);
+    } else {
+       scrollPtr->commandSize = 0;
+    }
+
+    Tk_SetBackgroundFromBorder(scrollPtr->tkwin, scrollPtr->bgBorder);
+
+    gcValues.foreground = scrollPtr->troughColorPtr->pixel;
+    new = Tk_GetGC(scrollPtr->tkwin, GCForeground, &gcValues);
+    if (scrollPtr->troughGC != None) {
+       Tk_FreeGC(scrollPtr->display, scrollPtr->troughGC);
+    }
+    scrollPtr->troughGC = new;
+    if (scrollPtr->copyGC == None) {
+       gcValues.graphics_exposures = False;
+       scrollPtr->copyGC = Tk_GetGC(scrollPtr->tkwin, GCGraphicsExposures,
+           &gcValues);
+    }
+
+    /*
+     * Register the desired geometry for the window (leave enough space
+     * for the two arrows plus a minimum-size slider, plus border around
+     * the whole window, if any).  Then arrange for the window to be
+     * redisplayed.
+     */
+
+    ComputeScrollbarGeometry(scrollPtr);
+    EventuallyRedraw(scrollPtr);
+    return TCL_OK;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * DisplayScrollbar --
+ *
+ *     This procedure redraws the contents of a scrollbar window.
+ *     It is invoked as a do-when-idle handler, so it only runs
+ *     when there's nothing else for the application to do.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Information appears on the screen.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+DisplayScrollbar(clientData)
+    ClientData clientData;     /* Information about window. */
+{
+    register Scrollbar *scrollPtr = (Scrollbar *) clientData;
+    register Tk_Window tkwin = scrollPtr->tkwin;
+    
+    MacDrawable *macDraw;
+    CGrafPtr saveWorld;
+    GDHandle saveDevice;
+    GWorldPtr destPort;
+    double middle;
+    WindowRef windowRef;
+    int drawGrowRgn = false;
+    int flushRight = false;
+    int flushBottom = false;
+    
+    if ((scrollPtr->tkwin == NULL) || !Tk_IsMapped(tkwin)) {
+       goto done;
+    }
+
+    /*
+     * Draw the focus or any 3D relief we may have.
+     */
+    if (scrollPtr->highlightWidth != 0) {
+       GC gc;
+
+       if (scrollPtr->flags & GOT_FOCUS) {
+           gc = Tk_GCForColor(scrollPtr->highlightColorPtr,
+                   Tk_WindowId(tkwin));
+       } else {
+           gc = Tk_GCForColor(scrollPtr->highlightBgColorPtr,
+                   Tk_WindowId(tkwin));
+       }
+       Tk_DrawFocusHighlight(tkwin, gc, scrollPtr->highlightWidth,
+               Tk_WindowId(tkwin));
+    }
+    Tk_Draw3DRectangle(tkwin, Tk_WindowId(tkwin), scrollPtr->bgBorder,
+           scrollPtr->highlightWidth, scrollPtr->highlightWidth,
+           Tk_Width(tkwin) - 2*scrollPtr->highlightWidth,
+           Tk_Height(tkwin) - 2*scrollPtr->highlightWidth,
+           scrollPtr->borderWidth, scrollPtr->relief);
+
+    /*
+     * Set up port for drawing Macintosh control.
+     */
+    macDraw = (MacDrawable *) Tk_WindowId(tkwin);
+    destPort = TkMacGetDrawablePort(Tk_WindowId(tkwin));
+    GetGWorld(&saveWorld, &saveDevice);
+    SetGWorld(destPort, NULL);
+    TkMacSetUpClippingRgn(Tk_WindowId(tkwin));
+
+    /*
+     * Given the Tk parameters for the fractions of the start and
+     * end of the thumb, the following calculation determines the
+     * location for the fixed sized Macintosh thumb.
+     */
+    middle = scrollPtr->firstFraction / (scrollPtr->firstFraction +
+           (1.0 - scrollPtr->lastFraction));
+
+    if (scrollPtr->sbHandle == NULL) {
+        Rect r;
+        
+        r.left = r.top = 0;
+        r.right = r.bottom = 1;
+       scrollPtr->sbHandle = NewControl((WindowRef) destPort, &r, "\p",
+               false, (short) (middle * 1000), 0, 1000,
+               scrollBarProc, (SInt32) scrollPtr);
+
+       /*
+        * If we are foremost than make us active.
+        */
+       if ((WindowPtr) destPort == FrontWindow()) {
+           scrollPtr->flags |= ACTIVE;
+       }
+    }
+    windowRef  = (**scrollPtr->sbHandle).contrlOwner;
+    
+    /*
+     * We can't use the Macintosh commands SizeControl and MoveControl as these
+     * calls will also cause a redraw which in our case will also cause
+     * flicker.  To avoid this we adjust the control record directly.  The
+     * Draw1Control command appears to just draw where ever the control says to
+     * draw so this seems right.
+     *
+     * NOTE: changing the control record directly may not work when
+     * Apple releases the Copland version of the MacOS in late 1996.
+     */
+     
+    (**scrollPtr->sbHandle).contrlRect.left = macDraw->xOff + scrollPtr->inset;
+    (**scrollPtr->sbHandle).contrlRect.top = macDraw->yOff + scrollPtr->inset;
+    (**scrollPtr->sbHandle).contrlRect.right = macDraw->xOff + Tk_Width(tkwin)
+       - scrollPtr->inset;
+    (**scrollPtr->sbHandle).contrlRect.bottom = macDraw->yOff +
+       Tk_Height(tkwin) - scrollPtr->inset;
+    
+    /*
+     * Here is a lovely hack to draw the grow region of a window.
+     */
+    /* TODO: use accessor function!!! */
+    if (windowRef->portRect.top == (**scrollPtr->sbHandle).contrlRect.top) {
+       (**scrollPtr->sbHandle).contrlRect.top--;
+    }
+       
+    if (windowRef->portRect.left == (**scrollPtr->sbHandle).contrlRect.left) {
+       (**scrollPtr->sbHandle).contrlRect.left--;
+    }
+       
+    if (windowRef->portRect.right == (**scrollPtr->sbHandle).contrlRect.right) {
+       flushRight = true;
+       (**scrollPtr->sbHandle).contrlRect.right++;
+    }
+       
+    if (windowRef->portRect.bottom == (**scrollPtr->sbHandle).contrlRect.bottom) {
+       flushBottom = true;
+       (**scrollPtr->sbHandle).contrlRect.bottom++;
+    }
+       
+    if (flushBottom && flushRight) {
+       if (scrollPtr->vertical) {
+           (**scrollPtr->sbHandle).contrlRect.bottom -= 14;
+       } else {
+           (**scrollPtr->sbHandle).contrlRect.right -= 14;
+       }
+       drawGrowRgn = true;
+       TkMacSetScrollbarGrow((TkWindow *) tkwin, true);
+    } else {
+       TkMacSetScrollbarGrow((TkWindow *) tkwin, false);
+    }
+    
+    /*
+     * Set the thumb position in the scrollbar.
+     */
+    (**scrollPtr->sbHandle).contrlValue = (short) (middle * 1000);
+    if ((**scrollPtr->sbHandle).contrlHilite == 0 || 
+               (**scrollPtr->sbHandle).contrlHilite == 255) {
+       if (scrollPtr->firstFraction == 0.0 &&
+               scrollPtr->lastFraction == 1.0) {
+           (**scrollPtr->sbHandle).contrlHilite = 255;
+       } else {
+           (**scrollPtr->sbHandle).contrlHilite = 0;
+       }
+    }
+    if ((**scrollPtr->sbHandle).contrlVis != 255) {
+       (**scrollPtr->sbHandle).contrlVis = 255;
+    }
+    
+    if (scrollPtr->flags & ACTIVE) {
+       Draw1Control(scrollPtr->sbHandle);
+       if (drawGrowRgn) {
+           DrawGrowIcon(windowRef);
+       }
+    } else {
+       (**scrollPtr->sbHandle).contrlHilite = 255;
+       Draw1Control(scrollPtr->sbHandle);
+       if (drawGrowRgn) {
+           DrawGrowIcon(windowRef);
+           Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), scrollPtr->bgBorder,
+               Tk_Width(tkwin) - 13, Tk_Height(tkwin) - 13,
+               Tk_Width(tkwin), Tk_Height(tkwin),
+               0, TK_RELIEF_FLAT);
+       }
+    }
+    
+    SetGWorld(saveWorld, saveDevice);
+     
+    done:
+    scrollPtr->flags &= ~REDRAW_PENDING;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * ScrollbarEventProc --
+ *
+ *     This procedure is invoked by the Tk dispatcher for various
+ *     events on scrollbars.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     When the window gets deleted, internal structures get
+ *     cleaned up.  When it gets exposed, it is redisplayed.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+ScrollbarEventProc(clientData, eventPtr)
+    ClientData clientData;     /* Information about window. */
+    XEvent *eventPtr;          /* Information about event. */
+{
+    Scrollbar *scrollPtr = (Scrollbar *) clientData;
+    Tcl_Interp *interp;
+
+    if ((eventPtr->type == Expose) && (eventPtr->xexpose.count == 0)) {
+       EventuallyRedraw(scrollPtr);
+    } else if (eventPtr->type == DestroyNotify) {
+       if (scrollPtr->tkwin != NULL) {
+           scrollPtr->tkwin = NULL;
+           Tcl_DeleteCommand(scrollPtr->interp,
+                   Tcl_GetCommandName(scrollPtr->interp,
+                   scrollPtr->widgetCmd));
+       }
+       if (scrollPtr->flags & REDRAW_PENDING) {
+           Tk_CancelIdleCall(DisplayScrollbar, (ClientData) scrollPtr);
+       }
+       Tcl_EventuallyFree((ClientData) scrollPtr, DestroyScrollbar);
+    } else if (eventPtr->type == ConfigureNotify) {
+       ComputeScrollbarGeometry(scrollPtr);
+       EventuallyRedraw(scrollPtr);
+    } else if (eventPtr->type == FocusIn) {
+       if (eventPtr->xfocus.detail != NotifyInferior) {
+           scrollPtr->flags |= GOT_FOCUS;
+           if (scrollPtr->highlightWidth > 0) {
+               EventuallyRedraw(scrollPtr);
+           }
+       }
+    } else if (eventPtr->type == FocusOut) {
+       if (eventPtr->xfocus.detail != NotifyInferior) {
+           scrollPtr->flags &= ~GOT_FOCUS;
+           if (scrollPtr->highlightWidth > 0) {
+               EventuallyRedraw(scrollPtr);
+           }
+       }
+    } else if (eventPtr->type == UnmapNotify) {
+       TkMacSetScrollbarGrow((TkWindow *) scrollPtr->tkwin, false);
+    } else if (eventPtr->type == ActivateNotify) {
+       scrollPtr->flags |= ACTIVE;
+       EventuallyRedraw(scrollPtr);
+    } else if (eventPtr->type == DeactivateNotify) {
+       scrollPtr->flags &= ~ACTIVE;
+       EventuallyRedraw(scrollPtr);
+    } else if (eventPtr->type == ButtonPress) {
+       Point where;
+       Rect bounds;
+       int part, x, y, dummy;
+       unsigned int state;
+       CGrafPtr saveWorld;
+       GDHandle saveDevice;
+       GWorldPtr destPort;
+       Window dummyWin;
+
+       /*
+        * To call Macintosh control routines we must have the port
+        * set to the window containing the control.  We will then test
+        * which part of the control was hit and act accordingly.
+        */
+       destPort = TkMacGetDrawablePort(Tk_WindowId(scrollPtr->tkwin));
+       GetGWorld(&saveWorld, &saveDevice);
+       SetGWorld(destPort, NULL);
+       TkMacSetUpClippingRgn(Tk_WindowId(scrollPtr->tkwin));
+
+       TkMacWinBounds((TkWindow *) scrollPtr->tkwin, &bounds);         
+       where.h = eventPtr->xbutton.x + bounds.left;
+       where.v = eventPtr->xbutton.y + bounds.top;
+       part = TestControl(scrollPtr->sbHandle, where);
+       if (part == inThumb && scrollPtr->jump == false) {
+           /*
+            * Case 1: In thumb, no jump scrolling.  Call track control
+            * with the thumb action proc which will do most of the work.
+            * Set the global activeScrollPtr to the current control
+            * so the callback may have access to it.
+            */
+           if (thumbActionProc == NULL) {
+               thumbActionProc = NewThumbActionProc(ThumbActionProc);
+           }
+           activeScrollPtr = scrollPtr;
+           part = TrackControl(scrollPtr->sbHandle, where,
+                   (ControlActionUPP) thumbActionProc);
+           activeScrollPtr = NULL;
+       } else if (part == inThumb) {
+           /*
+            * Case 2: in thumb with jump scrolling.  Call TrackControl
+            * with a NULL action proc.  Use the new value of the control
+            * to set update the control.
+            */
+           part = TrackControl(scrollPtr->sbHandle, where, NULL);
+           if (part == inThumb) {
+               double newFirstFraction, thumbWidth;
+               Tcl_DString cmdString;
+               char vauleString[TCL_DOUBLE_SPACE];
+
+               /*
+                * The following calculation takes the new control
+                * value and maps it to what Tk needs for its variable
+                * thumb size representation.
+                */
+               thumbWidth = scrollPtr->lastFraction
+                    - scrollPtr->firstFraction;
+               newFirstFraction = (1.0 - thumbWidth) *
+                   ((double) GetControlValue(scrollPtr->sbHandle) / 1000.0);
+               sprintf(vauleString, "%g", newFirstFraction);
+
+               Tcl_DStringInit(&cmdString);
+               Tcl_DStringAppend(&cmdString, scrollPtr->command,
+                       strlen(scrollPtr->command));
+               Tcl_DStringAppendElement(&cmdString, "moveto");
+               Tcl_DStringAppendElement(&cmdString, vauleString);
+               Tcl_DStringAppend(&cmdString, "; update idletasks",
+                       strlen("; update idletasks"));
+               
+                interp = scrollPtr->interp;
+                Tcl_Preserve((ClientData) interp);
+               Tcl_GlobalEval(interp, cmdString.string);
+                Tcl_Release((ClientData) interp);
+               Tcl_DStringFree(&cmdString);            
+           }
+       } else if (part != 0) {
+           /*
+            * Case 3: in any other part of the scrollbar.  We call
+            * TrackControl with the scrollActionProc which will do
+            * most all the work.
+            */
+           if (scrollActionProc == NULL) {
+               scrollActionProc = NewControlActionProc(ScrollbarActionProc);
+           }
+           TrackControl(scrollPtr->sbHandle, where, scrollActionProc);
+           HiliteControl(scrollPtr->sbHandle, 0);
+       }
+       
+       /*
+        * The TrackControl call will "eat" the ButtonUp event.  We now
+        * generate a ButtonUp event so Tk will unset implicit grabs etc.
+        */
+       GetMouse(&where);
+       XQueryPointer(NULL, None, &dummyWin, &dummyWin, &x,
+           &y, &dummy, &dummy, &state);
+       TkGenerateButtonEvent(x, y, state);
+
+       SetGWorld(saveWorld, saveDevice);
+    }
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * ScrollbarCmdDeletedProc --
+ *
+ *     This procedure is invoked when a widget command is deleted.  If
+ *     the widget isn't already in the process of being destroyed,
+ *     this command destroys it.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The widget is destroyed.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+ScrollbarCmdDeletedProc(clientData)
+    ClientData clientData;     /* Pointer to widget record for widget. */
+{
+    Scrollbar *scrollPtr = (Scrollbar *) clientData;
+    Tk_Window tkwin = scrollPtr->tkwin;
+
+    /*
+     * This procedure could be invoked either because the window was
+     * destroyed and the command was then deleted (in which case tkwin
+     * is NULL) or because the command was deleted, and then this procedure
+     * destroys the widget.
+     */
+
+    if (tkwin != NULL) {
+       scrollPtr->tkwin = NULL;
+       Tk_DestroyWindow(tkwin);
+    }
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * ComputeScrollbarGeometry --
+ *
+ *     After changes in a scrollbar's size or configuration, this
+ *     procedure recomputes various geometry information used in
+ *     displaying the scrollbar.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     The scrollbar will be displayed differently.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+ComputeScrollbarGeometry(scrollPtr)
+    register Scrollbar *scrollPtr;     /* Scrollbar whose geometry may
+                                        * have changed. */
+{
+    int width, fieldLength;
+
+/* TODO: this should be Mac specific */
+
+    if (scrollPtr->highlightWidth < 0) {
+       scrollPtr->highlightWidth = 0;
+    }
+    scrollPtr->inset = scrollPtr->highlightWidth + scrollPtr->borderWidth;
+    width = (scrollPtr->vertical) ? Tk_Width(scrollPtr->tkwin)
+           : Tk_Height(scrollPtr->tkwin);
+    scrollPtr->arrowLength = width - 2*scrollPtr->inset + 1;
+    fieldLength = (scrollPtr->vertical ? Tk_Height(scrollPtr->tkwin)
+           : Tk_Width(scrollPtr->tkwin))
+           - 2*(scrollPtr->arrowLength + scrollPtr->inset);
+    if (fieldLength < 0) {
+       fieldLength = 0;
+    }
+    scrollPtr->sliderFirst = fieldLength*scrollPtr->firstFraction;
+    scrollPtr->sliderLast = fieldLength*scrollPtr->lastFraction;
+
+    /*
+     * Adjust the slider so that some piece of it is always
+     * displayed in the scrollbar and so that it has at least
+     * a minimal width (so it can be grabbed with the mouse).
+     */
+
+    if (scrollPtr->sliderFirst > (fieldLength - 2*scrollPtr->borderWidth)) {
+       scrollPtr->sliderFirst = fieldLength - 2*scrollPtr->borderWidth;
+    }
+    if (scrollPtr->sliderFirst < 0) {
+       scrollPtr->sliderFirst = 0;
+    }
+    if (scrollPtr->sliderLast < (scrollPtr->sliderFirst
+           + MIN_SLIDER_LENGTH)) {
+       scrollPtr->sliderLast = scrollPtr->sliderFirst + MIN_SLIDER_LENGTH;
+    }
+    if (scrollPtr->sliderLast > fieldLength) {
+       scrollPtr->sliderLast = fieldLength;
+    }
+    scrollPtr->sliderFirst += scrollPtr->arrowLength + scrollPtr->inset;
+    scrollPtr->sliderLast += scrollPtr->arrowLength + scrollPtr->inset;
+
+    /*
+     * Register the desired geometry for the window (leave enough space
+     * for the two arrows plus a minimum-size slider, plus border around
+     * the whole window, if any).  Then arrange for the window to be
+     * redisplayed.
+     */
+
+    if (scrollPtr->vertical) {
+       Tk_GeometryRequest(scrollPtr->tkwin,
+               scrollPtr->width + 2*scrollPtr->inset,
+               2*(scrollPtr->arrowLength + scrollPtr->borderWidth
+               + scrollPtr->inset));
+    } else {
+       Tk_GeometryRequest(scrollPtr->tkwin,
+               2*(scrollPtr->arrowLength + scrollPtr->borderWidth
+               + scrollPtr->inset), scrollPtr->width + 2*scrollPtr->inset);
+    }
+    Tk_SetInternalBorder(scrollPtr->tkwin, scrollPtr->inset);
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * ScrollbarPosition --
+ *
+ *     Determine the scrollbar element corresponding to a
+ *     given position.
+ *
+ * Results:
+ *     One of TOP_ARROW, TOP_GAP, etc., indicating which element
+ *     of the scrollbar covers the position given by (x, y).  If
+ *     (x,y) is outside the scrollbar entirely, then OUTSIDE is
+ *     returned.
+ *
+ * Side effects:
+ *     None.
+ *
+ *--------------------------------------------------------------
+ */
+
+static int
+ScrollbarPosition(scrollPtr, x, y)
+    register Scrollbar *scrollPtr;     /* Scrollbar widget record. */
+    int x, y;                          /* Coordinates within scrollPtr's
+                                        * window. */
+{
+    int length, width, tmp;
+    ControlPartCode part;
+    Point where;
+    Rect bounds;
+
+    if (scrollPtr->vertical) {
+       length = Tk_Height(scrollPtr->tkwin);
+       width = Tk_Width(scrollPtr->tkwin);
+    } else {
+       tmp = x;
+       x = y;
+       y = tmp;
+       length = Tk_Width(scrollPtr->tkwin);
+       width = Tk_Height(scrollPtr->tkwin);
+    }
+
+    if ((x < scrollPtr->inset) || (x >= (width - scrollPtr->inset))
+           || (y < scrollPtr->inset) || (y >= (length - scrollPtr->inset))) {
+       return OUTSIDE;
+    }
+
+    /*
+     * All of the calculations in this procedure mirror those in
+     * DisplayScrollbar.  Be sure to keep the two consistent.
+     */
+
+    TkMacWinBounds((TkWindow *) scrollPtr->tkwin, &bounds);            
+    where.h = x + bounds.left;
+    where.v = y + bounds.top;
+    part = TestControl(scrollPtr->sbHandle, where);
+    switch (part) {
+       case inUpButton:
+           return TOP_ARROW;
+       case inPageUp:
+           return TOP_GAP;
+       case inThumb:
+           return SLIDER;
+       case inPageDown:
+           return BOTTOM_GAP;
+       case inDownButton:
+           return BOTTOM_ARROW;
+       default:
+           return OUTSIDE;
+    }
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * EventuallyRedraw --
+ *
+ *     Arrange for one or more of the fields of a scrollbar
+ *     to be redrawn.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     None.
+ *
+ *--------------------------------------------------------------
+ */
+
+static void
+EventuallyRedraw(scrollPtr)
+    register Scrollbar *scrollPtr;     /* Information about widget. */
+{
+    if ((scrollPtr->tkwin == NULL) || (!Tk_IsMapped(scrollPtr->tkwin))) {
+       return;
+    }
+    if ((scrollPtr->flags & REDRAW_PENDING) == 0) {
+       Tk_DoWhenIdle(DisplayScrollbar, (ClientData) scrollPtr);
+       scrollPtr->flags |= REDRAW_PENDING;
+    }
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * ScrollbarActionProc --
+ *
+ *     Callback procedure used by the Macintosh toolbox call
+ *     TrackControl.  This call will update the display while
+ *     the scrollbar is being manipulated by the user.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     May change the display.
+ *
+ *--------------------------------------------------------------
+ */
+
+static pascal void
+ScrollbarActionProc(ControlRef theControl, ControlPartCode partCode)
+    /* ControlRef theControl;  /* Handle to scrollbat control */
+    /* ControlPartCode partCode;       /* Part of scrollbar that was "hit" */
+{
+    register Scrollbar *scrollPtr = (Scrollbar *) GetCRefCon(theControl);
+    Tcl_DString cmdString;
+    Tcl_Interp *interp;
+    
+    Tcl_DStringInit(&cmdString);
+    switch (partCode) {
+       case inPageUp:
+       case inPageDown:
+       case inDownButton:
+       case inUpButton:
+           if (partCode == inPageUp || partCode == inPageDown) {
+               Tcl_DStringAppendElement(&cmdString, "tkScrollByPages");
+           } else {
+               Tcl_DStringAppendElement(&cmdString, "tkScrollByUnits");
+           }
+           Tcl_DStringAppendElement(&cmdString,
+                   Tk_PathName(scrollPtr->tkwin));
+           Tcl_DStringAppendElement(&cmdString, "hv");
+           if (partCode == inPageUp || partCode == inUpButton) {
+               Tcl_DStringAppendElement(&cmdString, "-1");
+           } else {
+               Tcl_DStringAppendElement(&cmdString, "1");
+           }
+           Tcl_DStringAppend(&cmdString, "; update idletasks",
+                   strlen("; update idletasks"));
+            interp = scrollPtr->interp;
+            Tcl_Preserve((ClientData) interp);
+           Tcl_GlobalEval(interp, cmdString.string);
+            Tcl_Release((ClientData) interp);
+           break;
+    }
+    Tcl_DStringFree(&cmdString);
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * ThumbActionProc --
+ *
+ *     Callback procedure used by the Macintosh toolbox call
+ *     TrackControl.  This call is used to track the thumb of
+ *     the scrollbar.  Unlike the ScrollbarActionProc function
+ *     this function is called once and basically takes over
+ *     tracking the scrollbar from the control.  This is done
+ *     to avoid conflicts with what the control plans to draw.
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     May change the display.
+ *
+ *--------------------------------------------------------------
+ */
+
+static pascal void
+ThumbActionProc()
+{
+    register Scrollbar *scrollPtr = activeScrollPtr;
+    Tcl_DString cmdString;
+    Rect nullRect = {0,0,0,0};
+    int origValue, trackBarPin;
+    double thumbWidth, newFirstFraction, trackBarSize;
+    char vauleString[40];
+    Point currentPoint = { 0, 0 };
+    Point lastPoint = { 0, 0 };
+    Rect trackRect;
+    Tcl_Interp *interp;
+    
+    if (scrollPtr == NULL) {
+       return;
+    }
+
+    Tcl_DStringInit(&cmdString);
+    
+    /*
+     * First compute values that will remain constant during the tracking
+     * of the thumb.  The variable trackBarSize is the length of the scrollbar
+     * minus the 2 arrows and half the width of the thumb on both sides
+     * (3 * arrowLength).  The variable trackBarPin is the lower starting point
+     * of the drag region.
+     *
+     * Note: the arrowLength is equal to the thumb width of a Mac scrollbar.
+     */
+    origValue = GetControlValue(scrollPtr->sbHandle);
+    trackRect = (**scrollPtr->sbHandle).contrlRect;
+    if (scrollPtr->vertical == true) {
+       trackBarSize = (double) (trackRect.bottom - trackRect.top
+               - (scrollPtr->arrowLength * 3));
+       trackBarPin = trackRect.top + scrollPtr->arrowLength
+           + (scrollPtr->arrowLength / 2);
+       InsetRect(&trackRect, -25, -113);
+       
+    } else {
+       trackBarSize = (double) (trackRect.right - trackRect.left
+               - (scrollPtr->arrowLength * 3));
+       trackBarPin = trackRect.left + scrollPtr->arrowLength
+           + (scrollPtr->arrowLength / 2);
+       InsetRect(&trackRect, -113, -25);
+    }
+
+    /*
+     * Track the mouse while the button is held down.  If the mouse is moved,
+     * we calculate the value that should be passed to the "command" part of
+     * the scrollbar.
+     */
+    while (StillDown()) {
+       GetMouse(&currentPoint);
+       if (EqualPt(currentPoint, lastPoint)) {
+           continue;
+       }
+       lastPoint = currentPoint;
+
+       /*
+        * Calculating this value is a little tricky.  We need to calculate a
+        * value for where the thumb would be in a Motif widget (variable
+        * thumb).  This value is what the "command" expects and is what will
+        * be resent to the scrollbar to update its value.
+        */
+       thumbWidth = scrollPtr->lastFraction - scrollPtr->firstFraction;
+       if (PtInRect(currentPoint, &trackRect)) {
+           if (scrollPtr->vertical == true) {
+               newFirstFraction =  (1.0 - thumbWidth) *
+                   ((double) (currentPoint.v - trackBarPin) / trackBarSize);
+           } else {
+               newFirstFraction =  (1.0 - thumbWidth) *
+                   ((double) (currentPoint.h - trackBarPin) / trackBarSize);
+           }
+       } else {
+           newFirstFraction = ((double) origValue / 1000.0)
+               * (1.0 - thumbWidth);
+       }
+       
+       sprintf(vauleString, "%g", newFirstFraction);
+
+       Tcl_DStringSetLength(&cmdString, 0);
+       Tcl_DStringAppend(&cmdString, scrollPtr->command,
+               strlen(scrollPtr->command));
+       Tcl_DStringAppendElement(&cmdString, "moveto");
+       Tcl_DStringAppendElement(&cmdString, vauleString);
+       Tcl_DStringAppend(&cmdString, "; update idletasks",
+               strlen("; update idletasks"));
+    
+        interp = scrollPtr->interp;
+        Tcl_Preserve((ClientData) interp);
+       Tcl_GlobalEval(interp, cmdString.string);
+        Tcl_Release((ClientData) interp);
+    }
+    
+    /*
+     * This next bit of code is a bit of a hack - but needed.  The problem is
+     * that the control wants to draw the drag outline if the control value
+     * changes during the drag (which it does).  What we do here is change the
+     * clip region to hide this drawing from the user.
+     */
+    ClipRect(&nullRect);
+    
+    Tcl_DStringFree(&cmdString);
+    return;
+}
diff --git a/tk/tests/all.tcl b/tk/tests/all.tcl
new file mode 100644 (file)
index 0000000..dea18b6
--- /dev/null
@@ -0,0 +1,78 @@
+# all.tcl --
+#
+# This file contains a top-level script to run all of the Tk
+# tests.  Execute it by invoking "source all.tcl" when running tktest
+# in this directory.
+#
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+# 
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+set ::tcltest::testSingleFile false
+
+puts stdout "Tk $tk_patchLevel tests running in interp:  [info nameofexecutable]"
+puts stdout "Tests running in working dir:  $::tcltest::workingDir"
+if {[llength $::tcltest::skip] > 0} {
+    puts stdout "Skipping tests that match:  $::tcltest::skip"
+}
+if {[llength $::tcltest::match] > 0} {
+    puts stdout "Only running tests that match:  $::tcltest::match"
+}
+
+# Use command line specified glob pattern (specified by -file or -f)
+# if one exists.  Otherwise use *.test.  If given, the file pattern
+# should be specified relative to the dir containing this file.  If no
+# files are found to match the pattern, print an error message and exit.
+set fileIndex [expr {[lsearch $argv "-file"] + 1}]
+set fIndex [expr {[lsearch $argv "-f"] + 1}]
+if {($fileIndex < 1) || ($fIndex > $fileIndex)} {
+    set fileIndex $fIndex
+}
+if {$fileIndex > 0} {
+    set globPattern [file join $::tcltest::testsDir [lindex $argv $fileIndex]]
+    puts stdout "Sourcing files that match:  $globPattern"
+} else {
+    set globPattern [file join $::tcltest::testsDir *.test]
+}
+set fileList [glob -nocomplain $globPattern]
+if {[llength $fileList] < 1} {
+    puts "Error: no files found matching $globPattern"
+    exit
+}
+set timeCmd {clock format [clock seconds]}
+puts stdout "Tests began at [eval $timeCmd]"
+
+# source each of the specified tests
+foreach file [lsort $fileList] {
+    set tail [file tail $file]
+    if {[string match l.*.test $tail]} {
+       # This is an SCCS lockfile; ignore it
+       continue
+    }
+    puts stdout $tail
+    if {[catch {source $file} msg]} {
+       puts stdout $msg
+    }
+}
+
+# cleanup
+puts stdout "\nTests ended at [eval $timeCmd]"
+::tcltest::cleanupTests 1
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/bitmap.test b/tk/tests/bitmap.test
new file mode 100644 (file)
index 0000000..d912239
--- /dev/null
@@ -0,0 +1,116 @@
+# This file is a Tcl script to test out the procedures in the file
+# tkBitmap.c.  It is organized in the standard white-box fashion for
+# Tcl tests.
+#
+# Copyright (c) 1998 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[info commands testbitmap] != "testbitmap"} {
+    puts "testbitmap command not available; skipping tests"
+    ::tcltest::cleanupTests
+    return
+}
+
+eval destroy [winfo children .]
+wm geometry . {}
+raise .
+
+test bitmap-1.1 {Tk_AllocBitmapFromObj - converting internal reps} {
+    set x gray25
+    lindex $x 0
+    destroy .b1
+    button .b1 -bitmap $x
+    lindex $x 0
+    testbitmap gray25
+} {{1 0}}
+test bitmap-1.2 {Tk_AllocBitmapFromObj - discard stale bitmap} {
+    set x gray25
+    destroy .b1 .b2
+    button .b1 -bitmap $x
+    destroy .b1
+    set result {}
+    lappend result [testbitmap gray25]
+    button .b2 -bitmap $x
+    lappend result [testbitmap gray25]
+} {{} {{1 1}}}
+test bitmap-1.3 {Tk_AllocBitmapFromObj - reuse existing bitmap} {
+    set x gray25
+    destroy .b1 .b2
+    button .b1 -bitmap $x
+    set result {}
+    lappend result [testbitmap gray25]
+    button .b2 -bitmap $x
+    pack .b1 .b2 -side top
+    lappend result [testbitmap gray25]
+} {{{1 1}} {{2 1}}}
+
+test bitmap-2.1 {Tk_GetBitmap procedure} {
+    destroy .b1
+    list [catch {button .b1 -bitmap bad_name} msg] $msg
+} {1 {bitmap "bad_name" not defined}}
+test bitmap-2.2 {Tk_GetBitmap procedure} {
+    destroy .b1
+    list [catch {button .b1 -bitmap @xyzzy} msg] $msg
+} {1 {error reading bitmap file "xyzzy"}}
+
+test bitmap-3.1 {Tk_FreeBitmapFromObj - reference counts} {
+    set x questhead
+    destroy .b1 .b2 .b3
+    button .b1 -bitmap $x
+    button .b3 -bitmap $x
+    button .b2 -bitmap $x
+    set result {}
+    lappend result [testbitmap questhead]
+    destroy .b1
+    lappend result [testbitmap questhead]
+    destroy .b2
+    lappend result [testbitmap questhead]
+    destroy .b3
+    lappend result [testbitmap questhead]
+} {{{3 1}} {{2 1}} {{1 1}} {}}
+
+test bitmap-4.1 {FreeBitmapObjProc} {
+    destroy .b
+    set x [format questhead]
+    button .b -bitmap $x
+    set y [format questhead]
+    .b configure -bitmap $y
+    set z [format questhead]
+    .b configure -bitmap $z
+    set result {}
+    lappend result [testbitmap questhead]
+    set x red
+    lappend result [testbitmap questhead]
+    set z 32
+    lappend result [testbitmap questhead]
+    destroy .b
+    lappend result [testbitmap questhead]
+    set y bogus
+    set result
+} {{{1 3}} {{1 2}} {{1 1}} {}}
+
+destroy .t
+
+# cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/border.test b/tk/tests/border.test
new file mode 100644 (file)
index 0000000..483e44d
--- /dev/null
@@ -0,0 +1,195 @@
+# This file is a Tcl script to test out the procedures in the file
+# tkBorder.c.  It is organized in the standard fashion for Tcl tests.
+#
+# Copyright (c) 1998 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[info commands testborder] != "testborder"} {
+    puts "testborder command not available; skipping tests"
+    ::tcltest::cleanupTests
+    return
+}
+
+eval destroy [winfo children .]
+wm geometry . {}
+raise .
+
+# Create a top-level with its own colormap (so we can test under
+# controlled conditions), then check to make sure that the visual
+# is color-mapped with 256 borders.  If not, just skip this whole
+# test file.
+
+if [catch {toplevel .t -visual {pseudocolor 8} -colormap new}] {
+    ::tcltest::cleanupTests
+    return
+}
+wm geom .t +0+0
+if {[winfo depth .t] != 8} {
+    destroy .t
+    ::tcltest::cleanupTests
+    return
+}
+
+test border-1.1 {Tk_AllocBorderFromObj - converting internal reps} {
+    set x orange
+    lindex $x 0
+    destroy .b1
+    button .b1 -bg $x -text .b1
+    lindex $x 0
+    testborder orange
+} {{1 0}}
+test border-1.3 {Tk_AllocBorderFromObj - discard stale border} {
+    set x orange
+    destroy .b1 .b2
+    button .b1 -bg $x -text First
+    destroy .b1
+    set result {}
+    lappend result [testborder orange]
+    button .b2 -bg $x -text Second
+    lappend result [testborder orange]
+} {{} {{1 1}}}
+test border-1.2 {Tk_AllocBorderFromObj - reuse existing border} {
+    set x orange
+    destroy .b1 .b2
+    button .b1 -bg $x -text First
+    set result {}
+    lappend result [testborder orange]
+    button .b2 -bg $x -text Second
+    pack .b1 .b2 -side top
+    lappend result [testborder orange]
+} {{{1 1}} {{2 1}}}
+test border-1.4 {Tk_AllocBorderFromObj - try other borders in list} {
+    set x purple
+    destroy .b1 .b2 .t.b
+    button .b1 -bg $x -text First
+    pack .b1 -side top
+    set result {}
+    lappend result [testborder purple]
+    button .t.b -bg $x -text Second
+    pack .t.b -side top
+    lappend result [testborder purple]
+    button .b2 -bg $x -text Third
+    pack .b2 -side top
+    lappend result [testborder purple]
+} {{{1 1}} {{1 1} {1 0}} {{1 0} {2 1}}}
+
+test border-3.1 {Tk_Free3DBorder - reference counts} {
+    set x purple
+    destroy .b1 .b2 .t.b
+    button .b1 -bg $x -text First
+    pack .b1 -side top
+    button .t.b -bg $x -text Second
+    pack .t.b -side top
+    button .b2 -bg $x -text Third
+    pack .b2 -side top
+    set result {}
+    lappend result [testborder purple]
+    destroy .b1
+    lappend result [testborder purple]
+    destroy .b2
+    lappend result [testborder purple]
+    destroy .t.b
+    lappend result [testborder purple]
+} {{{1 0} {2 1}} {{1 0} {1 1}} {{1 0}} {}}
+test border-3.4 {Tk_Free3DBorder - unlinking from list} {
+    destroy .b .t.b .t2 .t3
+    toplevel .t2 -visual {pseudocolor 8} -colormap new
+    toplevel .t3 -visual {pseudocolor 8} -colormap new
+    set x purple
+    button .b -bg $x -text .b1
+    button .t.b1 -bg $x -text .t.b1
+    button .t.b2 -bg $x -text .t.b2
+    button .t2.b1 -bg $x -text .t2.b1
+    button .t2.b2 -bg $x -text .t2.b2
+    button .t2.b3 -bg $x -text .t2.b3
+    button .t3.b1 -bg $x -text .t3.b1
+    button .t3.b2 -bg $x -text .t3.b2
+    button .t3.b3 -bg $x -text .t3.b3
+    button .t3.b4 -bg $x -text .t3.b4
+    set result {}
+    lappend result [testborder purple]
+    destroy .t2
+    lappend result [testborder purple]
+    destroy .b
+    lappend result [testborder purple]
+    destroy .t3
+    lappend result [testborder purple]
+    destroy .t
+    lappend result [testborder purple]
+} {{{4 1} {3 0} {2 0} {1 0}} {{4 1} {2 0} {1 0}} {{4 1} {2 0}} {{2 0}} {}}
+
+test border-4.1 {FreeBorderObjProc} {
+    destroy .b
+    set x [format purple]
+    button .b -bg $x -text .b1
+    set y [format purple]
+    .b configure -bg $y
+    set z [format purple]
+    .b configure -bg $z
+    set result {}
+    lappend result [testborder purple]
+    set x red
+    lappend result [testborder purple]
+    set z 32
+    lappend result [testborder purple]
+    destroy .b
+    lappend result [testborder purple]
+    set y bogus
+    set result
+} {{{1 3}} {{1 2}} {{1 1}} {}}
+
+catch {destroy .b}
+button .b
+test get-2.1 {Tk_GetReliefFromObj} {
+    .b configure -relief flat
+    .b cget -relief
+} {flat}
+test get-2.2 {Tk_GetReliefFromObj} {
+    .b configure -relief groove
+    .b cget -relief
+} {groove}
+test get-2.3 {Tk_GetReliefFromObj} {
+    .b configure -relief raised
+    .b cget -relief
+} {raised}
+test get-2.3 {Tk_GetReliefFromObj} {
+    .b configure -relief ridge
+    .b cget -relief
+} {ridge}
+test get-2.3 {Tk_GetReliefFromObj} {
+    .b configure -relief solid
+    .b cget -relief
+} {solid}
+test get-2.3 {Tk_GetReliefFromObj} {
+    .b configure -relief sunken
+    .b cget -relief
+} {sunken}
+test get-2.4 {Tk_GetReliefFromObj - error} {
+    list [catch {.b configure -relief upanddown} msg] $msg
+} {1 {bad relief "upanddown": must be flat, groove, raised, ridge, solid, or sunken}}
+
+destroy .t
+
+# cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/canvPsImg.tcl b/tk/tests/canvPsImg.tcl
new file mode 100644 (file)
index 0000000..88a0648
--- /dev/null
@@ -0,0 +1,85 @@
+# This file creates a screen to exercise Postscript generation
+# for images in canvases.  It is part of the Tk visual test suite,
+# which is invoked via the "visual" script.
+#
+# RCS: @(#) $Id$
+
+# Build a test image in a canvas
+proc BuildTestImage {} {
+    global BitmapImage PhotoImage visual level
+    catch {destroy .t.f}
+    frame .t.f -visual $visual -colormap new
+    pack .t.f -side top -after .t.top
+    bind .t.f <Enter> {wm colormapwindows .t {.t.f .t}}
+    bind .t.f <Leave> {wm colormapwindows .t {.t .t.f}}
+    canvas .t.f.c -width 550 -height 350 -borderwidth 2 -relief raised
+    pack .t.f.c
+    .t.f.c create rectangle 25 25 525 325 -fill {} -outline black
+    .t.f.c create image 50 50 -anchor nw -image $BitmapImage
+    .t.f.c create image 250 50 -anchor nw -image $PhotoImage
+}
+
+# Put postscript in a file
+proc FilePostscript { canvas } {
+    global level
+    $canvas postscript -file /tmp/test.ps -colormode $level
+}
+
+# Send postscript output to printer
+proc PrintPostcript { canvas } {
+    global level
+    $canvas postscript -file tmp.ps -colormode $level
+    exec lpr tmp.ps
+}
+
+catch {destroy .t}
+toplevel .t
+wm title .t "Postscript Tests for Canvases: Images"
+wm iconname .t "Postscript"
+
+message .t.m -text {This screen exercises the Postscript-generation abilities of Tk canvas widgets for images.  Click the buttons below to select a Visual type for the canvas and colormode for the Postscript output.  Then click "Print" to send the results to the default printer, or "Print to file" to put the Postscript output in a file called "/tmp/test.ps".  You can also click on items in the canvas to delete them.  
+NOTE: Some Postscript printers may not be able to handle Postscript generated in color mode.} -width 6i
+pack .t.m -side top -fill both
+
+frame .t.top
+pack .t.top -side top
+frame .t.top.l -relief raised -borderwidth 2
+frame .t.top.r -relief raised -borderwidth 2
+pack .t.top.l .t.top.r -side left -fill both -expand 1
+
+label .t.visuals -text "Visuals"
+pack .t.visuals -in .t.top.l
+
+set visual [lindex [winfo visualsavailable .] 0]
+foreach v [winfo visualsavailable .] {
+    # The hack below is necessary for some systems, which have more than one
+    # visual of the same type...
+    if {![winfo exists .t.$v]} {
+        radiobutton .t.$v -text $v -variable visual -value $v \
+               -command BuildTestImage
+        pack .t.$v -in .t.top.l -anchor w
+    }
+}
+
+label .t.levels -text "Color Levels"
+pack .t.levels -in .t.top.r
+set level monochrome
+foreach l { monochrome gray color } {
+    radiobutton .t.$l -text $l -variable level -value $l
+    pack .t.$l -in .t.top.r -anchor w
+}
+
+set BitmapImage [image create bitmap -file $tk_library/demos/images/face \
+       -background white -foreground black]
+set PhotoImage [image create photo -file $tk_library/demos/images/teapot.ppm]
+
+BuildTestImage
+
+frame .t.bot
+pack .t.bot -side top -fill x -expand 1
+
+button .t.file -text "Print to File" -command { FilePostscript .t.f.c }
+button .t.print -text "Print" -command { PrintPostscript .t.f.c }
+button .t.quit -text "Quit" -command { destroy .t }
+pack .t.file .t.print .t.quit -in .t.bot -side left -fill x -expand 1
+
diff --git a/tk/tests/choosedir.test b/tk/tests/choosedir.test
new file mode 100644 (file)
index 0000000..1b1d20e
--- /dev/null
@@ -0,0 +1,150 @@
+# This file is a Tcl script to test out Tk's "tk_chooseDir" and
+# It is organized in the standard fashion for Tcl tests.
+#
+# Copyright (c) 1996 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+#
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    package require tcltest
+    namespace import -force ::tcltest::*
+}
+
+#----------------------------------------------------------------------
+#
+# Procedures needed by this test file
+#
+#----------------------------------------------------------------------
+
+proc ToPressButton {parent btn} {
+    after 100 SendButtonPress $parent $btn mouse
+}
+
+proc ToEnterDirsByKey {parent dirs} {
+    after 100 [list EnterDirsByKey $parent $dirs]
+}
+
+proc PressButton {btn} {
+    event generate $btn <Enter>
+    event generate $btn <1> -x 5 -y 5
+    event generate $btn <ButtonRelease-1> -x 5 -y 5
+}
+
+proc EnterDirsByKey {parent dirs} {
+    global tk_strictMotif
+    if {$parent == "."} {
+       set w .__tk_choosedir
+    } else {
+       set w $parent.__tk_choosedir
+    }
+    upvar ::tk::dialog::file::__tk_choosedir data
+
+    foreach dir $dirs {
+       $data(ent) delete 0 end
+       $data(ent) insert 0 $dir
+       update
+       SendButtonPress $parent ok mouse
+       after 50
+    }
+}
+
+proc SendButtonPress {parent btn type} {
+    global tk_strictMotif
+    if {$parent == "."} {
+       set w .__tk_choosedir
+    } else {
+       set w $parent.__tk_choosedir
+    }
+    upvar ::tk::dialog::file::__tk_choosedir data
+
+    set button $data($btn\Btn)
+    if ![winfo ismapped $button] {
+       update
+    }
+
+    if {$type == "mouse"} {
+       PressButton $button
+    } else {
+       event generate $w <Enter>
+       focus $w
+       event generate $button <Enter>
+       event generate $w <KeyPress> -keysym Return
+    }
+}
+
+
+#----------------------------------------------------------------------
+#
+# The test suite proper
+#
+#----------------------------------------------------------------------
+# Make a dir for us to rely on for tests
+makeDirectory choosedirTest
+set dir [pwd]
+set fake [file join $dir non-existant]
+set real [file join $dir choosedirTest]
+
+set parent .
+
+foreach opt {-initialdir -mustexist -parent -title} {
+    test choosedir-1.1 "tk_chooseDirectory command" unixOnly {
+       list [catch {tk_chooseDirectory $opt} msg] $msg
+    } [list 1 "value for \"$opt\" missing"]
+}
+test choosedir-1.2 "tk_chooseDirectory command" unixOnly {
+    list [catch {tk_chooseDirectory -foo bar} msg] $msg
+} [list 1 "bad option \"-foo\": must be -initialdir, -mustexist, -parent, or -title"]
+test choosedir-1.3 "tk_chooseDirectory command" unixOnly {
+    list [catch {tk_chooseDirectory -parent foo.bar} msg] $msg
+} {1 {bad window path name "foo.bar"}}
+
+
+test choosedir-2.1 "tk_chooseDirectory command, cancel gives null" {unixOnly} {
+    ToPressButton $parent cancel
+    tk_chooseDirectory -title "Press Cancel" -parent $parent
+} ""
+
+test choosedir-3.1 "tk_chooseDirectory -mustexist 1" {unixOnly} {
+    # first enter a bogus dirname, then enter a real one.
+    ToEnterDirsByKey $parent [list $fake $real $real]
+    set result [tk_chooseDirectory \
+           -title "Enter \"$fake\", press OK, enter \"$real\", press OK" \
+           -parent $parent -mustexist 1]
+    set result
+} $real
+test choosedir-3.2 "tk_chooseDirectory -mustexist 0" {unixOnly} {
+    ToEnterDirsByKey $parent [list $fake $fake]
+    tk_chooseDirectory -title "Enter \"$fake\", press OK" \
+           -parent $parent -mustexist 0
+} $fake
+
+test choosedir-4.1 "tk_chooseDirectory command, initialdir" {unixOnly} {
+    ToPressButton $parent ok
+    tk_chooseDirectory -title "Press Ok" -parent $parent -initialdir $real
+} $real
+test choosedir-4.2 "tk_chooseDirectory command, initialdir" {unixOnly} {
+    ToEnterDirsByKey $parent [list $fake $fake]
+    tk_chooseDirectory \
+           -title "Enter \"$fake\" and press Ok" \
+           -parent $parent -initialdir $real
+} $fake
+test choosedir-4.3 "tk_chooseDirectory, -initialdir {}" {unixOnly} {
+    catch {unset ::tk::dialog::file::__tk_choosedir}
+    ToPressButton $parent ok
+    tk_chooseDirectory \
+           -title "Press OK" \
+           -parent $parent -initialdir ""
+} [pwd]
+
+test choosedir-5.1 "tk_chooseDirectory, handles {} entry text" {unixOnly} {
+    ToEnterDirsByKey $parent [list "" $real $real]
+    tk_chooseDirectory -title "Clear entry, Press OK; Enter $real, press OK" \
+           -parent $parent
+} $real
+
+# cleanup
+::tcltest::cleanupTests
+return
diff --git a/tk/tests/config.test b/tk/tests/config.test
new file mode 100644 (file)
index 0000000..f5e4b0c
--- /dev/null
@@ -0,0 +1,838 @@
+# This file is a Tcl script to test the procedures in tkConfig.c,
+# which comprise the new new option configuration system.  It is
+# organized in the standard "white-box" fashion for Tcl tests.
+#
+# Copyright (c) 1997 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[info command testobjconfig] != "testobjconfig"} {
+    puts "This application hasn't been compiled with the \"testobjconfig\""
+    puts "command, so I can't run this test.  Are you sure you're using"
+    puts "tktest instead of wish?"
+    ::tcltest::cleanupTests
+    return
+}
+
+proc killTables {} {
+    # Note: it's important to delete chain2 before chain1, because
+    # chain2 depends on chain1.  If chain1 is deleted first, the
+    # delete of chain2 will crash.
+
+    foreach t {alltypes chain2 chain1 configerror internal new notenoughparams
+           twowindows} {
+       while {[testobjconfig info $t] != ""} {
+           testobjconfig delete $t
+       }
+    }
+}
+
+foreach i [winfo children .] {
+    destroy $i
+}
+killTables
+wm geometry . {}
+raise .
+
+test config-1.1 {Tk_CreateOptionTable - reference counts} {
+    eval destroy [winfo children .]
+    killTables
+    set x {}
+    testobjconfig alltypes .a
+    lappend x [testobjconfig info alltypes]
+    testobjconfig alltypes .b
+    lappend x [testobjconfig info alltypes]
+    eval destroy [winfo children .]
+    set x
+} {{1 15 -boolean} {2 15 -boolean}}
+test config-1.2 {Tk_CreateOptionTable - synonym initialization} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a -synonym green
+    .a cget -color
+} {green}
+test config-1.3 {Tk_CreateOptionTable - option database initialization} {
+    eval destroy [winfo children .]
+    option clear
+    testobjconfig alltypes .a
+    option add *b.string different
+    testobjconfig alltypes .b
+    list [.a cget -string] [.b cget -string]
+} {foo different}
+test config-1.4 {Tk_CreateOptionTable - option database initialization} {
+    eval destroy [winfo children .]
+    option clear
+    testobjconfig alltypes .a
+    option add *b.String bar
+    testobjconfig alltypes .b
+    list [.a cget -string] [.b cget -string]
+} {foo bar}
+test config-1.5 {Tk_CreateOptionTable - default initialization} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a
+    .a cget -relief
+} {raised}
+test config-1.6 {Tk_CreateOptionTable - chained tables} {
+    eval destroy [winfo children .]
+    killTables
+    testobjconfig chain1 .a
+    testobjconfig chain2 .b
+    testobjconfig info chain2
+} {1 4 -three 2 2 -one}
+test config-1.7 {Tk_CreateOptionTable - chained tables} {
+    eval destroy [winfo children .]
+    killTables
+    testobjconfig chain2 .b
+    testobjconfig chain1 .a
+    testobjconfig info chain2
+} {1 4 -three 2 2 -one}
+test config-1.8 {Tk_CreateOptionTable - chained tables} {
+    eval destroy [winfo children .]
+    testobjconfig chain1 .a
+    testobjconfig chain2 .b
+    list [catch {.a cget -four} msg] $msg [.a cget -one] \
+           [.b cget -four] [.b cget -one]
+} {1 {unknown option "-four"} one four one}
+
+test config-2.1 {Tk_DeleteOptionTable - reference counts} {
+    eval destroy [winfo children .]
+    killTables
+    testobjconfig chain1 .a
+    testobjconfig chain2 .b
+    testobjconfig chain2 .c
+    eval destroy [winfo children .]
+    set x {}
+    testobjconfig delete chain2
+    lappend x [testobjconfig info chain2] [testobjconfig info chain1]
+    testobjconfig delete chain2
+    lappend x [testobjconfig info chain2] [testobjconfig info chain1]
+} {{1 4 -three 2 2 -one} {2 2 -one} {} {1 2 -one}}
+
+# No tests for DestroyOptionHashTable; couldn't figure out how to test.
+
+test config-3.1 {Tk_InitOptions - priority of chained tables} {
+    eval destroy [winfo children .]
+    testobjconfig chain1 .a
+    testobjconfig chain2 .b
+    list [.a cget -two] [.b cget -two]
+} {two {two and a half}}
+test config-3.2 {Tk_InitOptions - initialize from database} {
+    eval destroy [winfo children .]
+    option clear
+    option add *a.color blue
+    testobjconfig alltypes .a
+    list [.a cget -color]
+} {blue}
+test config-3.3 {Tk_InitOptions - initialize from database} {
+    eval destroy [winfo children .]
+    option clear
+    option add *a.justify bogus
+    testobjconfig alltypes .a
+    list [.a cget -justify]
+} {left}
+test config-3.4 {Tk_InitOptions - initialize from widget class} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a
+    list [.a cget -color]
+} {red}
+test config-3.5 {Tk_InitOptions - no initial value} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a
+    .a cget -anchor
+} {}
+test config-3.6 {Tk_InitOptions - bad initial value} {
+    eval destroy [winfo children .]
+    option clear
+    option add *a.color non-existent
+    list [catch {testobjconfig alltypes .a} msg] $msg $errorInfo
+} {1 {unknown color name "non-existent"} {unknown color name "non-existent"
+    (database entry for "-color" in widget ".a")
+    invoked from within
+"testobjconfig alltypes .a"}}
+option clear
+test config-3.7 {Tk_InitOptions - bad initial value} {
+    eval destroy [winfo children .]
+    list [catch {testobjconfig configerror} msg] $msg $errorInfo
+} {1 {expected integer but got "bogus"} {expected integer but got "bogus"
+    (default value for "-int")
+    invoked from within
+"testobjconfig configerror"}}
+option clear
+
+test config-4.1 {DoObjConfig - boolean} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -boolean 0} msg] $msg [catch {.foo cget -boolean} result] $result [catch {rename .foo {}}]
+} {0 .foo 0 0 0}
+test config-4.2 {DoObjConfig - boolean} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -boolean 1} msg] $msg [catch {.foo cget -boolean} result] $result [catch {rename .foo {}}]
+} {0 .foo 0 1 0}
+test config-4.3 {DoObjConfig - invalid boolean} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -boolean {}} msg] $msg
+} {1 {expected boolean value but got ""}}
+test config-4.4 {DoObjConfig - boolean internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -boolean 0
+    .foo cget -boolean
+} {0}
+test config-4.5 {DoObjConfig - integer} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -integer 3} msg] $msg [catch {.foo cget -integer} result] $result [catch {rename .foo {}}]
+} {0 .foo 0 3 0}
+test config-4.6 {DoObjConfig - invalid integer} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -integer bar} msg] $msg
+} {1 {expected integer but got "bar"}}
+test config-4.7 {DoObjConfig - integer internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -integer 421
+    .foo cget -integer
+} {421}
+test config-4.8 {DoObjConfig - double} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -double 3.14} msg] $msg [catch {.foo cget -double} result] $result [catch {rename .foo {}}]
+} {0 .foo 0 3.14 0}
+test config-4.9 {DoObjConfig - invalid double} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -double bar} msg] $msg
+} {1 {expected floating-point number but got "bar"}}
+test config-4.10 {DoObjConfig - double internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -double 62.75
+    .foo cget -double
+} {62.75}
+test config-4.11 {DoObjConfig - string} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -string test} msg] $msg [catch {.foo cget -string} result] $result [destroy .foo]
+} {0 .foo 0 test {}}
+test config-4.12 {DoObjConfig - null string} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -string {}} msg] $msg [catch {.foo cget -string} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.13 {DoObjConfig - string internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -string "this is a test"
+    .foo cget -string
+} {this is a test}
+test config-4.14 {DoObjConfig - string table} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -stringtable two} msg] $msg [catch {.foo cget -stringtable} result] $result [destroy .foo]
+} {0 .foo 0 two {}}
+test config-4.15 {DoObjConfig - invalid string table} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -stringtable foo} msg] $msg
+} {1 {bad stringtable "foo": must be one, two, three, or four}}
+test config-4.16 {DoObjConfig - new string table} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -stringtable two
+    list [catch {.foo configure -stringtable three} msg] $msg [catch {.foo cget -stringtable} result] $result [destroy .foo]
+} {0 16 0 three {}}
+test config-4.17 {DoObjConfig - stringtable internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -stringtable "four"
+    .foo cget -stringtable
+} {four}
+test config-4.18 {DoObjConfig - color} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -color blue} msg] $msg [catch {.foo cget -color} result] $result [destroy .foo]
+} {0 .foo 0 blue {}}
+test config-4.19 {DoObjConfig - invalid color} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -color xxx} msg] $msg
+} {1 {unknown color name "xxx"}}
+test config-4.20 {DoObjConfig - color internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -color purple
+    .foo cget -color
+} {purple}
+test config-4.21 {DoObjConfig - null color} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -color {}} msg] $msg [catch {.foo cget -color} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.22 {DoObjConfig - getting rid of old color} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -color #333333
+    list [catch {.foo configure -color #444444} msg] $msg [catch {.foo cget -color} result] $result [destroy .foo]
+} {0 32 0 #444444 {}}
+test config-4.23 {DoObjConfig - font} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -font {Helvetica 72}} msg] $msg [catch {.foo cget -font} result] $result [destroy .foo]
+} {0 .foo 0 {Helvetica 72} {}}
+test config-4.24 {DoObjConfig - new font} {
+    catch {rename .foo {}}
+    testobjconfig alltypes .foo -font {Courier 12}
+    list [catch {.foo configure -font {Helvetica 72}} msg] $msg [catch {.foo cget -font} result] $result [destroy .foo]
+} {0 64 0 {Helvetica 72} {}}
+test config-4.25 {DoObjConfig - invalid font} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -font {Helvetica 12 foo}} msg] $msg
+} {1 {unknown font style "foo"}}
+test config-4.26 {DoObjConfig - null font} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -font {}} msg] $msg [catch {.foo cget -font} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.27 {DoObjConfig - font internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -font {Times 16}
+    .foo cget -font
+} {Times 16}
+test config-4.28 {DoObjConfig - bitmap} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -bitmap gray75} msg] $msg [catch {.foo cget -bitmap} result] $result [destroy .foo]
+} {0 .foo 0 gray75 {}}
+test config-4.29 {DoObjConfig - new bitmap} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -bitmap gray75
+    list [catch {.foo configure -bitmap gray50} msg] $msg [catch {.foo cget -bitmap} result] $result [destroy .foo]
+} {0 128 0 gray50 {}}
+test config-4.30 {DoObjConfig - invalid bitmap} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -bitmap foo} msg] $msg
+} {1 {bitmap "foo" not defined}}
+test config-4.31 {DoObjConfig - null bitmap} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -bitmap {}} msg] $msg [catch {.foo cget -bitmap} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.32 {DoObjConfig - bitmap internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -bitmap gray25
+    .foo cget -bitmap
+} {gray25}
+test config-4.33 {DoObjConfig - border} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -border green} msg] $msg [catch {.foo cget -border} result] $result [destroy .foo]
+} {0 .foo 0 green {}}
+test config-4.34 {DoObjConfig - invalid border} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -border xxx} msg] $msg
+} {1 {unknown color name "xxx"}}
+test config-4.35 {DoObjConfig - null border} {
+    catch {rename .foo {}}
+    list [catch {testobjconfig alltypes .foo -border {}} msg] $msg [catch {.foo cget -border} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.36 {DoObjConfig - border internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -border #123456
+    .foo cget -border
+} {#123456}
+test config-4.37 {DoObjConfig - getting rid of old border} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -border #333333
+    list [catch {.foo configure -border #444444} msg] $msg [catch {.foo cget -border} result] $result [destroy .foo]
+} {0 256 0 #444444 {}}
+test config-4.38 {DoObjConfig - relief} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -relief flat} msg] $msg [catch {.foo cget -relief} result] $result [destroy .foo]
+} {0 .foo 0 flat {}}
+test config-4.39 {DoObjConfig - invalid relief} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -relief foo} msg] $msg
+} {1 {bad relief "foo": must be flat, groove, raised, ridge, solid, or sunken}}
+test config-4.40 {DoObjConfig - new relief} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -relief raised
+    list [catch {.foo configure -relief flat} msg] $msg [catch {.foo cget -relief} result] $result [destroy .foo]
+} {0 512 0 flat {}}
+test config-4.41 {DoObjConfig - relief internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -relief ridge
+    .foo cget -relief
+} {ridge}
+test config-4.42 {DoObjConfig - cursor} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -cursor arrow} msg] $msg [catch {.foo cget -cursor} result] $result [destroy .foo]
+} {0 .foo 0 arrow {}}
+test config-4.43 {DoObjConfig - invalid cursor} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -cursor foo} msg] $msg
+} {1 {bad cursor spec "foo"}}
+test config-4.44 {DoObjConfig - null cursor} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -cursor {}} msg] $msg [catch {.foo cget -cursor} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.45 {DoObjConfig - new cursor} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -cursor xterm
+    list [catch {.foo configure -cursor arrow} msg] $msg [catch {.foo cget -cursor} result] $result [destroy .foo]
+} {0 1024 0 arrow {}}
+test config-4.46 {DoObjConfig - cursor internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -cursor watch
+    .foo cget -cursor
+} {watch}
+test config-4.47 {DoObjConfig - justify} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -justify center} msg] $msg [catch {.foo cget -justify} result] $result [destroy .foo]
+} {0 .foo 0 center {}}
+test config-4.48 {DoObjConfig - invalid justify} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -justify foo} msg] $msg
+} {1 {bad justification "foo": must be left, right, or center}}
+test config-4.49 {DoObjConfig - new justify} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -justify left
+    list [catch {.foo configure -justify right} msg] $msg [catch {.foo cget -justify} result] $result [destroy .foo]
+} {0 2048 0 right {}}
+test config-4.50 {DoObjConfig - justify internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -justify center
+    .foo cget -justify
+} {center}
+test config-4.51 {DoObjConfig - anchor} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -anchor center} msg] $msg [catch {.foo cget -anchor} result] $result [destroy .foo]
+} {0 .foo 0 center {}}
+test config-4.52 {DoObjConfig - invalid anchor} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -anchor foo} msg] $msg
+} {1 {bad anchor "foo": must be n, ne, e, se, s, sw, w, nw, or center}}
+test config-4.53 {DoObjConfig - new anchor} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -anchor e
+    list [catch {.foo configure -anchor n} msg] $msg [catch {.foo cget -anchor} result] $result [destroy .foo]
+} {0 4096 0 n {}}
+test config-4.54 {DoObjConfig - anchor internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -anchor sw
+    .foo cget -anchor
+} {sw}
+test config-4.55 {DoObjConfig - pixel} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -pixel 42} msg] $msg [catch {.foo cget -pixel} result] $result [destroy .foo]
+} {0 .foo 0 42 {}}
+test config-4.56 {DoObjConfig - invalid pixel} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -pixel foo} msg] $msg
+} {1 {bad screen distance "foo"}}
+test config-4.57 {DoObjConfig - new pixel} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -pixel 42m
+    list [catch {.foo configure -pixel 3c} msg] $msg [catch {.foo cget -pixel} result] $result [destroy .foo]
+} {0 8192 0 3c {}}
+test config-4.58 {DoObjConfig - pixel internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -pixel [winfo screenmmwidth .]m
+    .foo cget -pixel
+} [winfo screenwidth .]
+test config-4.59 {DoObjConfig - window} {
+    catch {destroy .foo}
+    catch {destroy .bar}
+    toplevel .bar
+    list [catch {testobjconfig twowindows .foo -window .bar} msg] $msg [catch {.foo cget -window} result] $result [destroy .foo] [destroy .bar]
+} {0 .foo 0 .bar {} {}}
+test config-4.60 {DoObjConfig - invalid window} {
+    catch {destroy .foo}
+    toplevel .bar
+    list [catch {testobjconfig twowindows .foo -window foo} msg] $msg [destroy .bar]
+} {1 {bad window path name "foo"} {}}
+test config-4.61 {DoObjConfig - null window} {
+    catch {destroy .foo}
+    catch {destroy .bar}
+    toplevel .bar
+    list [catch {testobjconfig twowindows .foo -window {}} msg] $msg [catch {.foo cget -window} result] $result [destroy .foo]
+} {0 .foo 0 {} {}}
+test config-4.62 {DoObjConfig - new window} {
+    catch {destroy .foo}
+    catch {destroy .bar}
+    catch {destroy .blamph}
+    toplevel .bar
+    toplevel .blamph
+    testobjconfig twowindows .foo -window .bar
+    list [catch {.foo configure -window .blamph} msg] $msg [catch {.foo cget -window} result] $result [destroy .foo] [destroy .bar] [destroy .blamph]
+} {0 0 0 .blamph {} {} {}}
+test config-4.63 {DoObjConfig - window internal value} {
+    catch {rename .foo {}}
+    testobjconfig internal .foo -window .
+    .foo cget -window
+} {.}
+test config-4.64 {DoObjConfig - releasing old values} {
+    # This test doesn't generate a useful value to check; if an
+    # error occurs, it will be detected only by memory checking software
+    # such as Purify or Tcl's built-in checker.
+
+    catch {rename .foo {}}
+    testobjconfig alltypes .foo -string {Test string} -color yellow \
+           -font {Courier 18} -bitmap questhead -border green -cursor cross
+    .foo configure -string {new string} -color brown \
+           -font {Times 8} -bitmap gray75 -border pink -cursor watch
+    concat {}
+} {}
+test config-4.65 {DoObjConfig - releasing old values} {
+    # This test doesn't generate a useful value to check; if an
+    # error occurs, it will be detected only by memory checking software
+    # such as Purify or Tcl's built-in checker.
+
+    catch {rename .foo {}}
+    testobjconfig internal .foo -string {Test string} -color yellow \
+           -font {Courier 18} -bitmap questhead -border green -cursor cross
+    .foo configure -string {new string} -color brown \
+           -font {Times 8} -bitmap gray75 -border pink -cursor watch
+    concat {}
+} {}
+
+test config-5.1 {ObjectIsEmpty - object is already string} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -color [format ""]
+    .foo cget -color
+} {}
+test config-5.2 {ObjectIsEmpty - object is already string} {
+    catch {destroy .foo}
+    list [catch {testobjconfig alltypes .foo -color [format " "]} msg] $msg
+} {1 {unknown color name " "}}
+test config-5.3 {ObjectIsEmpty - must convert back to string} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -color [list]
+    .foo cget -color
+} {}
+
+eval destroy [winfo children .]
+testobjconfig chain2 .a
+testobjconfig alltypes .b
+test config-6.1 {GetOptionFromObj - cached answer} {
+    list [.a cget -three] [.a cget -three]
+} {three three}
+test config-6.2 {GetOptionFromObj - exact match} {
+    .a cget -one
+} {one}
+test config-6.3 {GetOptionFromObj - abbreviation} {
+    .a cget -fo
+} {four}
+test config-6.4 {GetOptionFromObj - ambiguous abbreviation} {
+    list [catch {.a cget -on} msg] $msg
+} {1 {unknown option "-on"}}
+test config-6.5 {GetOptionFromObj - duplicate options in different tables} {
+    .a cget -tw
+} {two and a half}
+test config-6.6 {GetOptionFromObj - synonym} {
+    .b cget -synonym
+} {red}
+
+eval destroy [winfo children .]
+testobjconfig alltypes .a
+test config-7.1 {Tk_SetOptions - basics} {
+    .a configure -color green -rel sunken
+     list [.a cget -color] [.a cget -relief]
+} {green sunken}
+test config-7.2 {Tk_SetOptions - bogus option name} {
+    list [catch {.a configure -bogus} msg] $msg
+} {1 {unknown option "-bogus"}}
+test config-7.3 {Tk_SetOptions - synonym} {
+    .a configure -synonym blue
+    .a cget -color
+} {blue}
+test config-7.4 {Tk_SetOptions - missing value} {
+    list [catch {.a configure -color green -relief} msg] $msg [.a cget -color]
+} {1 {value for "-relief" missing} green}
+test config-7.5 {Tk_SetOptions - saving old values} {
+    .a configure -color red -int 7 -relief raised -double 3.14159
+    list [catch {.a csave -color green -int 432 -relief sunken \
+           -double 2.0 -color bogus} msg] $msg [.a cget -color] \
+           [.a cget -int] [.a cget -relief] [.a cget -double]
+} {1 {unknown color name "bogus"} red 7 raised 3.14159}
+test config-7.6 {Tk_SetOptions - error in DoObjConfig call} {
+    list [catch {.a configure -color bogus} msg] $msg $errorInfo
+} {1 {unknown color name "bogus"} {unknown color name "bogus"
+    (processing "-color" option)
+    invoked from within
+".a configure -color bogus"}}
+test config-7.7 {Tk_SetOptions - synonym name in error message} {
+    list [catch {.a configure -synonym bogus} msg] $msg $errorInfo
+} {1 {unknown color name "bogus"} {unknown color name "bogus"
+    (processing "-synonym" option)
+    invoked from within
+".a configure -synonym bogus"}}
+test config-7.8 {Tk_SetOptions - returning mask} {
+    format %x [.a configure -color red -int 7 -relief raised -double 3.14159]
+} {226}
+
+test config-8.1 {Tk_RestoreSavedOptions - restore in proper order} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a
+    list [catch {.a csave -color green -color black -color blue \
+           -color #ffff00 -color #ff00ff -color bogus} msg] $msg \
+           [.a cget -color]
+} {1 {unknown color name "bogus"} red}
+test config-8.2 {Tk_RestoreSavedOptions - freeing object memory} {
+    eval destroy [winfo children .]
+    testobjconfig alltypes .a
+    .a csave -color green -color black -color blue -color #ffff00 \
+           -color #ff00ff
+} {32}
+test config-8.3 {Tk_RestoreSavedOptions - boolean internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -boolean 0 -color bogus}] [.a cget -boolean]
+} {1 1}
+test config-8.4 {Tk_RestoreSavedOptions - integer internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -integer 24 -color bogus}] [.a cget -integer]
+} {1 148962237}
+test config-8.5 {Tk_RestoreSavedOptions - double internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -double 62.4 -color bogus}] [.a cget -double]
+} {1 3.14159}
+test config-8.6 {Tk_RestoreSavedOptions - string internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -string "A long string" -color bogus}] \
+           [.a cget -string]
+} {1 foo}
+test config-8.7 {Tk_RestoreSavedOptions - string table internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -stringtable three -color bogus}] \
+           [.a cget -stringtable]
+} {1 one}
+test config-8.8 {Tk_RestoreSavedOptions - color internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -color green -color bogus}] [.a cget -color]
+} {1 red}
+test config-8.9 {Tk_RestoreSavedOptions - font internal form} {nonPortable} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -font {Times 12} -color bogus}] [.a cget -font]
+} {1 {Helvetica 12}}
+test config-8.10 {Tk_RestoreSavedOptions - bitmap internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -bitmap questhead -color bogus}] [.a cget -bitmap]
+} {1 gray50}
+test config-8.11 {Tk_RestoreSavedOptions - border internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -border brown -color bogus}] [.a cget -border]
+} {1 blue}
+test config-8.12 {Tk_RestoreSavedOptions - relief internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -relief sunken -color bogus}] [.a cget -relief]
+} {1 raised}
+test config-8.13 {Tk_RestoreSavedOptions - cursor internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -cursor watch -color bogus}] [.a cget -cursor]
+} {1 xterm}
+test config-8.14 {Tk_RestoreSavedOptions - justify internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -justify right -color bogus}] [.a cget -justify]
+} {1 left}
+test config-8.15 {Tk_RestoreSavedOptions - anchor internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a
+    list [catch {.a csave -anchor center -color bogus}] [.a cget -anchor]
+} {1 n}
+test config-8.16 {Tk_RestoreSavedOptions - window internal form} {
+    eval destroy [winfo children .]
+    testobjconfig internal .a -window .a
+    list [catch {.a csave -window .a -color bogus}] [.a cget -window]
+} {1 .a}
+
+# Most of the tests below will cause memory leakage if there is a
+# problem.  This may not be evident unless the tests are run in
+# conjunction with a memory usage analyzer such as Purify.
+
+test config-9.1 {Tk_FreeConfigOptions/FreeResources - string internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -string "two words"
+    destroy .foo
+} {}
+test config-9.2 {Tk_FreeConfigOptions/FreeResources - color internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -color yellow
+    destroy .foo
+} {}
+test config-9.3 {Tk_FreeConfigOptions/FreeResources - color} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -color [format blue]
+    destroy .foo
+} {}
+test config-9.4 {Tk_FreeConfigOptions/FreeResources - font internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -font {Courier 20}
+    destroy .foo
+} {}
+test config-9.5 {Tk_FreeConfigOptions/FreeResources - font} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -font [format {Courier 24}]
+    destroy .foo
+} {}
+test config-9.6 {Tk_FreeConfigOptions/FreeResources - bitmap internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -bitmap gray75
+    destroy .foo
+} {}
+test config-9.7 {Tk_FreeConfigOptions/FreeResources - bitmap} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -bitmap [format gray75]
+    destroy .foo
+} {}
+test config-9.8 {Tk_FreeConfigOptions/FreeResources - border internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -border orange
+    destroy .foo
+} {}
+test config-9.9 {Tk_FreeConfigOptions/FreeResources - border} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -border [format blue]
+    destroy .foo
+} {}
+test config-9.10 {Tk_FreeConfigOptions/FreeResources - cursor internal form} {
+    catch {destroy .foo}
+    testobjconfig internal .foo
+    .foo configure -cursor cross
+    destroy .foo
+} {}
+test config-9.11 {Tk_FreeConfigOptions/FreeResources - cursor} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -cursor [format watch]
+    destroy .foo
+} {}
+test config-9.12 {Tk_FreeConfigOptions/FreeResources - not special} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -integer [format 27]
+    destroy .foo
+} {}
+
+test config-10.1 {Tk_GetOptionInfo - one item} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -relief groove
+    .foo configure -relief
+} {-relief relief Relief raised groove}
+test config-10.2 {Tk_GetOptionInfo - one item, synonym} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo
+    .foo configure -color black
+    .foo configure -synonym
+} {-color color Color red black}
+test config-10.3 {Tk_GetOptionInfo - all items} {
+    catch {destroy .foo}
+    testobjconfig alltypes .foo -font {Helvetica 18} -integer 13563
+    .foo configure
+} {{-boolean boolean Boolean 1 1} {-integer integer Integer 7 13563} {-double double Double 3.14159 3.14159} {-string string String foo foo} {-stringtable StringTable stringTable one one} {-color color Color red red} {-font font Font {Helvetica 12} {Helvetica 18}} {-bitmap bitmap Bitmap gray50 gray50} {-border border Border blue blue} {-relief relief Relief raised raised} {-cursor cursor Cursor xterm xterm} {-justify {} {} left left} {-anchor anchor Anchor {} {}} {-pixel pixel Pixel 1 1} {-synonym -color}}
+test config-10.4 {Tk_GetOptionInfo - chaining through tables} {
+    catch {destroy .foo}
+    testobjconfig chain2 .foo -one asdf -three xyzzy
+    .foo configure
+} {{-three three Three three xyzzy} {-four four Four four four} {-two two Two {two and a half} {two and a half}} {-oneAgain oneAgain OneAgain {one again} {one again}} {-one one One one asdf} {-two two Two two {two and a half}}}
+
+eval destroy [winfo children .]
+testobjconfig alltypes .a
+test config-11.1 {GetConfigList - synonym} {
+    lindex [.a configure] end
+} {-synonym -color}
+test config-11.2 {GetConfigList - null database names} {
+    .a configure -justify
+} {-justify {} {} left left}
+test config-11.3 {GetConfigList - null default and current value} {
+    .a configure -anchor
+} {-anchor anchor Anchor {} {}}
+
+eval destroy [winfo children .]
+testobjconfig internal .a
+test config-12.1 {GetObjectForOption - boolean} {
+    .a configure -boolean 0
+    .a cget -boolean
+} {0}
+test config-12.2 {GetObjectForOption - integer} {
+    .a configure -integer 1247
+    .a cget -integer
+} {1247}
+test config-12.3 {GetObjectForOption - double} {
+    .a configure -double -88.82
+    .a cget -double
+} {-88.82}
+test config-12.4 {GetObjectForOption - string} {
+    .a configure -string "test value"
+    .a cget -string
+} {test value}
+test config-12.5 {GetObjectForOption - stringTable} {
+    .a configure -stringtable "two"
+    .a cget -stringtable
+} {two}
+test config-12.6 {GetObjectForOption - color} {
+    .a configure -color "green"
+    .a cget -color
+} {green}
+test config-12.7 {GetObjectForOption - font} {
+    .a configure -font {Times 36}
+    .a cget -font
+} {Times 36}
+test config-12.8 {GetObjectForOption - bitmap} {
+    .a configure -bitmap "questhead"
+    .a cget -bitmap
+} {questhead}
+test config-12.9 {GetObjectForOption - border} {
+    .a configure -border #33217c
+    .a cget -border
+} {#33217c}
+test config-12.10 {GetObjectForOption - relief} {
+    .a configure -relief groove
+    .a cget -relief
+} {groove}
+test config-12.11 {GetObjectForOption - cursor} {
+    .a configure -cursor watch
+    .a cget -cursor
+} {watch}
+test config-12.12 {GetObjectForOption - justify} {
+    .a configure -justify right
+    .a cget -justify
+} {right}
+test config-12.13 {GetObjectForOption - anchor} {
+    .a configure -anchor e
+    .a cget -anchor
+} {e}
+test config-12.14 {GetObjectForOption - pixels} {
+    .a configure -pixel 193.2
+    .a cget -pixel
+} {193}
+test config-12.15 {GetObjectForOption - window} {
+    .a configure -window .a
+    .a cget -window
+} {.a}
+test config-12.16 {GetObjectForOption - null values} {
+    .a configure -string {} -color {} -font {} -bitmap {} -border {} \
+           -cursor {} -window {}
+    list [.a cget -string] [.a cget -color] [.a cget -font] \
+           [.a cget -string] [.a cget -bitmap] [.a cget -border] \
+           [.a cget -cursor] [.a cget -window]
+} {{} {} {} {} {} {} {} {}}
+
+test config-13.1 {proper cleanup of options with widget destroy} {
+    foreach type {
+       button canvas entry frame listbox menu menubutton message
+       scale scrollbar text radiobutton checkbutton
+    } {
+       destroy .w
+       $type .w -cursor crosshair
+       destroy .w      
+    }
+} {}
+
+# cleanup
+eval destroy [winfo children .]
+killTables
+::tcltest::cleanupTests
+return
+
diff --git a/tk/tests/cursor.test b/tk/tests/cursor.test
new file mode 100644 (file)
index 0000000..a0e80f1
--- /dev/null
@@ -0,0 +1,116 @@
+# This file is a Tcl script to test out the procedures in the file
+# tkCursor.c.  It is organized in the standard white-box fashion for
+# Tcl tests.
+#
+# Copyright (c) 1998 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[info commands testcursor] != "testcursor"} {
+    puts "testcursor command not available; skipping tests"
+    ::tcltest::cleanupTests
+    return
+}
+
+eval destroy [winfo children .]
+wm geometry . {}
+raise .
+
+test cursor-1.1 {Tk_AllocCursorFromObj - converting internal reps} {
+    set x watch
+    lindex $x 0
+    destroy .b1
+    button .b1 -cursor $x
+    lindex $x 0
+    testcursor watch
+} {{1 0}}
+test cursor-1.2 {Tk_AllocCursorFromObj - discard stale cursor} {
+    set x watch
+    destroy .b1 .b2
+    button .b1 -cursor $x
+    destroy .b1
+    set result {}
+    lappend result [testcursor watch]
+    button .b2 -cursor $x
+    lappend result [testcursor watch]
+} {{} {{1 1}}}
+test cursor-1.3 {Tk_AllocCursorFromObj - reuse existing cursor} {
+    set x watch
+    destroy .b1 .b2
+    button .b1 -cursor $x
+    set result {}
+    lappend result [testcursor watch]
+    button .b2 -cursor $x
+    pack .b1 .b2 -side top
+    lappend result [testcursor watch]
+} {{{1 1}} {{2 1}}}
+
+test cursor-2.1 {Tk_GetCursor procedure} {
+    destroy .b1
+    list [catch {button .b1 -cursor bad_name} msg] $msg
+} {1 {bad cursor spec "bad_name"}}
+test cursor-2.2 {Tk_GetCursor procedure} {
+    destroy .b1
+    list [catch {button .b1 -cursor @xyzzy} msg] $msg
+} {1 {bad cursor spec "@xyzzy"}}
+
+test cursor-3.1 {Tk_FreeCursorFromObj - reference counts} {
+    set x arrow
+    destroy .b1 .b2 .b3
+    button .b1 -cursor $x
+    button .b3 -cursor $x
+    button .b2 -cursor $x
+    set result {}
+    lappend result [testcursor arrow]
+    destroy .b1
+    lappend result [testcursor arrow]
+    destroy .b2
+    lappend result [testcursor arrow]
+    destroy .b3
+    lappend result [testcursor arrow]
+} {{{3 1}} {{2 1}} {{1 1}} {}}
+
+test cursor-4.1 {FreeCursorObjProc} {
+    destroy .b
+    set x [format arrow]
+    button .b -cursor $x
+    set y [format arrow]
+    .b configure -cursor $y
+    set z [format arrow]
+    .b configure -cursor $z
+    set result {}
+    lappend result [testcursor arrow]
+    set x red
+    lappend result [testcursor arrow]
+    set z 32
+    lappend result [testcursor arrow]
+    destroy .b
+    lappend result [testcursor arrow]
+    set y bogus
+    set result
+} {{{1 3}} {{1 2}} {{1 1}} {}}
+
+destroy .t
+
+# cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/defs.tcl b/tk/tests/defs.tcl
new file mode 100644 (file)
index 0000000..a2e55cd
--- /dev/null
@@ -0,0 +1,1097 @@
+# defs.tcl --
+#
+#      This file contains support code for the Tcl/Tk test suite.It is
+#      It is normally sourced by the individual files in the test suite
+#      before they run their tests.  This improved approach to testing
+#      was designed and initially implemented by Mary Ann May-Pumphrey
+#      of Sun Microsystems.
+#
+# Copyright (c) 1990-1994 The Regents of the University of California.
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+# 
+# RCS: @(#) $Id$
+
+# Initialize wish shell
+
+if {[info exists tk_version]} {
+    tk appname tktest
+    wm title . tktest
+} else {
+
+    # Ensure that we have a minimal auto_path so we don't pick up extra junk.
+
+    set auto_path [list [info library]]
+}
+
+# create the "tcltest" namespace for all testing variables and procedures
+
+namespace eval tcltest {
+    set procList [list test cleanupTests dotests saveState restoreState \
+           normalizeMsg makeFile removeFile makeDirectory removeDirectory \
+           viewFile bytestring set_iso8859_1_locale restore_locale \
+           safeFetch threadReap]
+    if {[info exists tk_version]} {
+       lappend procList setupbg dobg bgReady cleanupbg fixfocus
+    }
+    foreach proc $procList {
+       namespace export $proc
+    }
+
+    # setup ::tcltest default vars
+    foreach {var default} {verbose b match {} skip {}} {
+       if {![info exists $var]} {
+           variable $var $default
+       }
+    }
+
+    # Tests should not rely on the current working directory.
+    # Files that are part of the test suite should be accessed relative to
+    # ::tcltest::testsDir.
+
+    set originalDir [pwd]
+    set tDir [file join $originalDir [file dirname [info script]]]
+    cd $tDir
+    variable testsDir [pwd]
+    cd $originalDir
+
+    # Count the number of files tested (0 if all.tcl wasn't called).
+    # The all.tcl file will set testSingleFile to false, so stats will
+    # not be printed until all.tcl calls the cleanupTests proc.
+    # The currentFailure var stores the boolean value of whether the
+    # current test file has had any failures.  The failFiles list
+    # stores the names of test files that had failures.
+
+    variable numTestFiles 0
+    variable testSingleFile true
+    variable currentFailure false
+    variable failFiles {}
+
+    # Tests should remove all files they create.  The test suite will
+    # check the current working dir for files created by the tests.
+    # ::tcltest::filesMade keeps track of such files created using the
+    # ::tcltest::makeFile and ::tcltest::makeDirectory procedures.
+    # ::tcltest::filesExisted stores the names of pre-existing files.
+
+    variable filesMade {}
+    variable filesExisted {}
+
+    # ::tcltest::numTests will store test files as indices and the list
+    # of files (that should not have been) left behind by the test files.
+
+    array set ::tcltest::createdNewFiles {}
+
+    # initialize ::tcltest::numTests array to keep track fo the number of
+    # tests that pass, fial, and are skipped.
+
+    array set numTests [list Total 0 Passed 0 Skipped 0 Failed 0]
+
+    # initialize ::tcltest::skippedBecause array to keep track of
+    # constraints that kept tests from running
+
+    array set ::tcltest::skippedBecause {}
+
+    # tests that use thread need to know which is the main thread
+
+    variable ::tcltest::mainThread 1
+    if {[info commands testthread] != {}} {
+       puts "Tk with threads enabled is known to have problems with X"
+       set ::tcltest::mainThread [testthread names]
+    }
+}
+
+# If there is no "memory" command (because memory debugging isn't
+# enabled), generate a dummy command that does nothing.
+
+if {[info commands memory] == ""} {
+    proc memory args {}
+}
+
+# ::tcltest::initConfig --
+#
+# Check configuration information that will determine which tests
+# to run.  To do this, create an array ::tcltest::testConfig.  Each
+# element has a 0 or 1 value.  If the element is "true" then tests
+# with that constraint will be run, otherwise tests with that constraint
+# will be skipped.  See the README file for the list of built-in
+# constraints defined in this procedure.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      The ::tcltest::testConfig array is reset to have an index for
+#      each built-in test constraint.
+
+proc ::tcltest::initConfig {} {
+
+    global tcl_platform tcl_interactive tk_version
+
+    catch {unset ::tcltest::testConfig}
+
+    # The following trace procedure makes it so that we can safely refer to
+    # non-existent members of the ::tcltest::testConfig array without causing an
+    # error.  Instead, reading a non-existent member will return 0.  This is
+    # necessary because tests are allowed to use constraint "X" without ensuring
+    # that ::tcltest::testConfig("X") is defined.
+
+    trace variable ::tcltest::testConfig r ::tcltest::safeFetch
+
+    proc ::tcltest::safeFetch {n1 n2 op} {
+       if {($n2 != {}) && ([info exists ::tcltest::testConfig($n2)] == 0)} {
+           set ::tcltest::testConfig($n2) 0
+       }
+    }
+
+    set ::tcltest::testConfig(unixOnly) \
+           [expr {$tcl_platform(platform) == "unix"}]
+    set ::tcltest::testConfig(macOnly) \
+           [expr {$tcl_platform(platform) == "macintosh"}]
+    set ::tcltest::testConfig(pcOnly) \
+           [expr {$tcl_platform(platform) == "windows"}]
+
+    set ::tcltest::testConfig(unix) $::tcltest::testConfig(unixOnly)
+    set ::tcltest::testConfig(mac) $::tcltest::testConfig(macOnly)
+    set ::tcltest::testConfig(pc) $::tcltest::testConfig(pcOnly)
+
+    set ::tcltest::testConfig(unixOrPc) \
+           [expr {$::tcltest::testConfig(unix) || $::tcltest::testConfig(pc)}]
+    set ::tcltest::testConfig(macOrPc) \
+           [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(pc)}]
+    set ::tcltest::testConfig(macOrUnix) \
+           [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(unix)}]
+
+    set ::tcltest::testConfig(nt) [expr {$tcl_platform(os) == "Windows NT"}]
+    set ::tcltest::testConfig(95) [expr {$tcl_platform(os) == "Windows 95"}]
+
+    # The following config switches are used to mark tests that should work,
+    # but have been temporarily disabled on certain platforms because they don't
+    # and we haven't gotten around to fixing the underlying problem.
+
+    set ::tcltest::testConfig(tempNotPc) [expr {!$::tcltest::testConfig(pc)}]
+    set ::tcltest::testConfig(tempNotMac) [expr {!$::tcltest::testConfig(mac)}]
+    set ::tcltest::testConfig(tempNotUnix) [expr {!$::tcltest::testConfig(unix)}]
+
+    # The following config switches are used to mark tests that crash on
+    # certain platforms, so that they can be reactivated again when the
+    # underlying problem is fixed.
+
+    set ::tcltest::testConfig(pcCrash) [expr {!$::tcltest::testConfig(pc)}]
+    set ::tcltest::testConfig(macCrash) [expr {!$::tcltest::testConfig(mac)}]
+    set ::tcltest::testConfig(unixCrash) [expr {!$::tcltest::testConfig(unix)}]
+
+    # Set the "fonts" constraint for wish apps
+
+    if {[info exists tk_version]} {
+       set ::tcltest::testConfig(fonts) 1
+       catch {destroy .e}
+       entry .e -width 0 -font {Helvetica -12} -bd 1
+       .e insert end "a.bcd"
+       if {([winfo reqwidth .e] != 37) || ([winfo reqheight .e] != 20)} {
+           set ::tcltest::testConfig(fonts) 0
+       }
+       destroy .e
+       catch {destroy .t}
+       text .t -width 80 -height 20 -font {Times -14} -bd 1
+       pack .t
+       .t insert end "This is\na dot."
+       update
+       set x [list [.t bbox 1.3] [.t bbox 2.5]]
+       destroy .t
+       if {[string match {{22 3 6 15} {31 18 [34] 15}} $x] == 0} {
+           set ::tcltest::testConfig(fonts) 0
+       }
+
+       # Test to see if we have are running Unix apps on Exceed,
+       # which won't return font failures (Windows-like), which is
+       # not what we want from ann X server (other Windows X servers
+       # operate as expected)
+
+       set ::tcltest::testConfig(noExceed) 1
+       if {$::tcltest::testConfig(unixOnly) && \
+               [catch {font actual "\{xyz"}] == 0} {
+           puts "Running X app on Exceed, skipping problematic font tests..."
+           set ::tcltest::testConfig(noExceed) 0
+       }
+    }
+
+    # Skip empty tests
+
+    set ::tcltest::testConfig(emptyTest) 0
+
+    # By default, tests that expost known bugs are skipped.
+
+    set ::tcltest::testConfig(knownBug) 0
+
+    # By default, non-portable tests are skipped.
+
+    set ::tcltest::testConfig(nonPortable) 0
+
+    # Some tests require user interaction.
+
+    set ::tcltest::testConfig(userInteraction) 0
+
+    # Some tests must be skipped if the interpreter is not in interactive mode
+
+    set ::tcltest::testConfig(interactive) $tcl_interactive
+
+    # Some tests must be skipped if you are running as root on Unix.
+    # Other tests can only be run if you are running as root on Unix.
+
+    set ::tcltest::testConfig(root) 0
+    set ::tcltest::testConfig(notRoot) 1
+    set user {}
+    if {$tcl_platform(platform) == "unix"} {
+       catch {set user [exec whoami]}
+       if {$user == ""} {
+           catch {regexp {^[^(]*\(([^)]*)\)} [exec id] dummy user}
+       }
+       if {($user == "root") || ($user == "")} {
+           set ::tcltest::testConfig(root) 1
+           set ::tcltest::testConfig(notRoot) 0
+       }
+    }
+
+    # Set nonBlockFiles constraint: 1 means this platform supports
+    # setting files into nonblocking mode.
+
+    if {[catch {set f [open defs r]}]} {
+       set ::tcltest::testConfig(nonBlockFiles) 1
+    } else {
+       if {[catch {fconfigure $f -blocking off}] == 0} {
+           set ::tcltest::testConfig(nonBlockFiles) 1
+       } else {
+           set ::tcltest::testConfig(nonBlockFiles) 0
+       }
+       close $f
+    }
+
+    # Set asyncPipeClose constraint: 1 means this platform supports
+    # async flush and async close on a pipe.
+    #
+    # Test for SCO Unix - cannot run async flushing tests because a
+    # potential problem with select is apparently interfering.
+    # (Mark Diekhans).
+
+    if {$tcl_platform(platform) == "unix"} {
+       if {[catch {exec uname -X | fgrep {Release = 3.2v}}] == 0} {
+           set ::tcltest::testConfig(asyncPipeClose) 0
+       } else {
+           set ::tcltest::testConfig(asyncPipeClose) 1
+       }
+    } else {
+       set ::tcltest::testConfig(asyncPipeClose) 1
+    }
+
+    # Test to see if we have a broken version of sprintf with respect
+    # to the "e" format of floating-point numbers.
+
+    set ::tcltest::testConfig(eformat) 1
+    if {[string compare "[format %g 5e-5]" "5e-05"] != 0} {
+       set ::tcltest::testConfig(eformat) 0
+    }
+
+    # Test to see if execed commands such as cat, echo, rm and so forth are
+    # present on this machine.
+
+    set ::tcltest::testConfig(unixExecs) 1
+    if {$tcl_platform(platform) == "macintosh"} {
+       set ::tcltest::testConfig(unixExecs) 0
+    }
+    if {($::tcltest::testConfig(unixExecs) == 1) && \
+           ($tcl_platform(platform) == "windows")} {
+       if {[catch {exec cat defs}] == 1} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec echo hello}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec sh -c echo hello}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec wc defs}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {$::tcltest::testConfig(unixExecs) == 1} {
+           exec echo hello > removeMe
+           if {[catch {exec rm removeMe}] == 1} {
+               set ::tcltest::testConfig(unixExecs) 0
+           }
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec sleep 1}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec fgrep unixExecs defs}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec ps}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec echo abc > removeMe}] == 0) && \
+               ([catch {exec chmod 644 removeMe}] == 1) && \
+               ([catch {exec rm removeMe}] == 0)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       } else {
+           catch {exec rm -f removeMe}
+       }
+       if {($::tcltest::testConfig(unixExecs) == 1) && \
+               ([catch {exec mkdir removeMe}] == 1)} {
+           set ::tcltest::testConfig(unixExecs) 0
+       } else {
+           catch {exec rm -r removeMe}
+       }
+    }
+}
+
+::tcltest::initConfig
+
+
+# ::tcltest::processCmdLineArgs --
+#
+#      Use command line args to set the verbose, skip, and
+#      match variables.  This procedure must be run after
+#      constraints are initialized, because some constraints can be
+#      overridden.
+#
+# Arguments:
+#      none
+#
+# Results:
+#      ::tcltest::verbose is set to <value>
+
+proc ::tcltest::processCmdLineArgs {} {
+    global argv
+
+    # The "argv" var doesn't exist in some cases, so use {}
+    # The "argv" var doesn't exist in some cases.
+
+    if {(![info exists argv]) || ([llength $argv] < 2)} {
+       set flagArray {}
+    } else {
+       set flagArray $argv
+    }
+
+    if {[catch {array set flag $flagArray}]} {
+       puts stderr "Error:  odd number of command line args specified:"
+       puts stderr "        $argv"
+       exit
+    }
+    
+    # Allow for 1-char abbreviations, where applicable (e.g., -match == -m).
+    # Note that -verbose cannot be abbreviated to -v in wish because it
+    # conflicts with the wish option -visual.
+
+    foreach arg {-verbose -match -skip -constraints} {
+       set abbrev [string range $arg 0 1]
+       if {([info exists flag($abbrev)]) && \
+               ([lsearch -exact $flagArray $arg] < \
+               [lsearch -exact $flagArray $abbrev])} {
+           set flag($arg) $flag($abbrev)
+       }
+    }
+
+    # Set ::tcltest::workingDir to [pwd].
+    # Save the names of files that already exist in ::tcltest::workingDir.
+
+    set ::tcltest::workingDir [pwd]
+    foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] {
+       lappend ::tcltest::filesExisted [file tail $file]
+    }
+
+    # Set ::tcltest::verbose to the arg of the -verbose flag, if given
+
+    if {[info exists flag(-verbose)]} {
+       set ::tcltest::verbose $flag(-verbose)
+    }
+
+    # Set ::tcltest::match to the arg of the -match flag, if given
+
+    if {[info exists flag(-match)]} {
+       set ::tcltest::match $flag(-match)
+    }
+
+    # Set ::tcltest::skip to the arg of the -skip flag, if given
+
+    if {[info exists flag(-skip)]} {
+       set ::tcltest::skip $flag(-skip)
+    }
+
+    # Use the -constraints flag, if given, to turn on constraints that are
+    # turned off by default: userInteractive knownBug nonPortable.  This
+    # code fragment must be run after constraints are initialized.
+
+    if {[info exists flag(-constraints)]} {
+       foreach elt $flag(-constraints) {
+           set ::tcltest::testConfig($elt) 1
+       }
+    }
+}
+
+::tcltest::processCmdLineArgs
+
+
+# ::tcltest::cleanupTests --
+#
+# Remove files and dirs created using the makeFile and makeDirectory
+# commands since the last time this proc was invoked.
+#
+# Print the names of the files created without the makeFile command
+# since the tests were invoked.
+#
+# Print the number tests (total, passed, failed, and skipped) since the
+# tests were invoked.
+#
+
+proc ::tcltest::cleanupTests {{calledFromAllFile 0}} {
+    set tail [file tail [info script]]
+
+    # Remove files and directories created by the :tcltest::makeFile and
+    # ::tcltest::makeDirectory procedures.
+    # Record the names of files in ::tcltest::workingDir that were not
+    # pre-existing, and associate them with the test file that created them.
+
+    if {!$calledFromAllFile} {
+
+       foreach file $::tcltest::filesMade {
+           if {[file exists $file]} {
+               catch {file delete -force $file}
+           }
+       }
+       set currentFiles {}
+       foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] {
+           lappend currentFiles [file tail $file]
+       }
+       set newFiles {}
+       foreach file $currentFiles {
+           if {[lsearch -exact $::tcltest::filesExisted $file] == -1} {
+               lappend newFiles $file
+           }
+       }
+       set ::tcltest::filesExisted $currentFiles
+       if {[llength $newFiles] > 0} {
+           set ::tcltest::createdNewFiles($tail) $newFiles
+       }
+    }
+
+    if {$calledFromAllFile || $::tcltest::testSingleFile} {
+
+       # print stats
+
+       puts -nonewline stdout "$tail:"
+       foreach index [list "Total" "Passed" "Skipped" "Failed"] {
+           puts -nonewline stdout "\t$index\t$::tcltest::numTests($index)"
+       }
+       puts stdout ""
+
+       # print number test files sourced
+       # print names of files that ran tests which failed
+
+       if {$calledFromAllFile} {
+           puts stdout "Sourced $::tcltest::numTestFiles Test Files."
+           set ::tcltest::numTestFiles 0
+           if {[llength $::tcltest::failFiles] > 0} {
+               puts stdout "Files with failing tests: $::tcltest::failFiles"
+               set ::tcltest::failFiles {}
+           }
+       }
+
+       # if any tests were skipped, print the constraints that kept them
+       # from running.
+
+       set constraintList [array names ::tcltest::skippedBecause]
+       if {[llength $constraintList] > 0} {
+           puts stdout "Number of tests skipped for each constraint:"
+           foreach constraint [lsort $constraintList] {
+               puts stdout \
+                       "\t$::tcltest::skippedBecause($constraint)\t$constraint"
+               unset ::tcltest::skippedBecause($constraint)
+           }
+       }
+
+       # report the names of test files in ::tcltest::createdNewFiles, and
+       # reset the array to be empty.
+
+       set testFilesThatTurded [lsort [array names ::tcltest::createdNewFiles]]
+       if {[llength $testFilesThatTurded] > 0} {
+           puts stdout "Warning: test files left files behind:"
+           foreach testFile $testFilesThatTurded {
+               puts "\t$testFile:\t$::tcltest::createdNewFiles($testFile)"
+               unset ::tcltest::createdNewFiles($testFile)
+           }
+       }
+
+       # reset filesMade, filesExisted, and numTests
+
+       set ::tcltest::filesMade {}
+       foreach index [list "Total" "Passed" "Skipped" "Failed"] {
+           set ::tcltest::numTests($index) 0
+       }
+
+       # exit only if running Tk in non-interactive mode
+
+       global tk_version tcl_interactive
+       if {[info exists tk_version] && !$tcl_interactive} {
+           exit
+       }
+    } else {
+
+       # if we're deferring stat-reporting until all files are sourced,
+       # then add current file to failFile list if any tests in this file
+       # failed
+
+       incr ::tcltest::numTestFiles
+       if {($::tcltest::currentFailure) && \
+               ([lsearch -exact $::tcltest::failFiles $tail] == -1)} {
+           lappend ::tcltest::failFiles $tail
+       }
+       set ::tcltest::currentFailure false
+    }
+}
+
+
+# test --
+#
+# This procedure runs a test and prints an error message if the test fails.
+# If ::tcltest::verbose has been set, it also prints a message even if the
+# test succeeds.  The test will be skipped if it doesn't match the
+# ::tcltest::match variable, if it matches an element in
+# ::tcltest::skip, or if one of the elements of "constraints" turns
+# out not to be true.
+#
+# Arguments:
+# name -               Name of test, in the form foo-1.2.
+# description -                Short textual description of the test, to
+#                      help humans understand what it does.
+# constraints -                A list of one or more keywords, each of
+#                      which must be the name of an element in
+#                      the array "::tcltest::testConfig".  If any of these
+#                      elements is zero, the test is skipped.
+#                      This argument may be omitted.
+# script -             Script to run to carry out the test.  It must
+#                      return a result that can be checked for
+#                      correctness.
+# expectedAnswer -     Expected result from script.
+
+proc ::tcltest::test {name description script expectedAnswer args} {
+    incr ::tcltest::numTests(Total)
+
+    # skip the test if it's name matches an element of skip
+
+    foreach pattern $::tcltest::skip {
+       if {[string match $pattern $name]} {
+           incr ::tcltest::numTests(Skipped)
+           return
+       }
+    }
+    # skip the test if it's name doesn't match any element of match
+
+    if {[llength $::tcltest::match] > 0} {
+       set ok 0
+       foreach pattern $::tcltest::match {
+           if {[string match $pattern $name]} {
+               set ok 1
+               break
+           }
+        }
+       if {!$ok} {
+           incr ::tcltest::numTests(Skipped)
+           return
+       }
+    }
+    set i [llength $args]
+    if {$i == 0} {
+       set constraints {}
+    } elseif {$i == 1} {
+
+       # "constraints" argument exists;  shuffle arguments down, then
+       # make sure that the constraints are satisfied.
+
+       set constraints $script
+       set script $expectedAnswer
+       set expectedAnswer [lindex $args 0]
+       set doTest 0
+       if {[string match {*[$\[]*} $constraints] != 0} {
+
+           # full expression, e.g. {$foo > [info tclversion]}
+
+           catch {set doTest [uplevel #0 expr $constraints]}
+
+       } elseif {[regexp {[^.a-zA-Z0-9 ]+} $constraints] != 0} {
+
+           # something like {a || b} should be turned into 
+           # $::tcltest::testConfig(a) || $::tcltest::testConfig(b).
+
+           regsub -all {[.a-zA-Z0-9]+} $constraints \
+                   {$::tcltest::testConfig(&)} c
+           catch {set doTest [eval expr $c]}
+       } else {
+
+           # just simple constraints such as {unixOnly fonts}.
+
+           set doTest 1
+           foreach constraint $constraints {
+               if {![info exists ::tcltest::testConfig($constraint)]
+                       || !$::tcltest::testConfig($constraint)} {
+                   set doTest 0
+
+                   # store the constraint that kept the test from running
+
+                   set constraints $constraint
+                   break
+               }
+           }
+       }
+       if {$doTest == 0} {
+           incr ::tcltest::numTests(Skipped)
+           if {[string first s $::tcltest::verbose] != -1} {
+               puts stdout "++++ $name SKIPPED: $constraints"
+           }
+
+           # add the constraint to the list of constraints the kept tests
+           # from running
+
+           if {[info exists ::tcltest::skippedBecause($constraints)]} {
+               incr ::tcltest::skippedBecause($constraints)
+           } else {
+               set ::tcltest::skippedBecause($constraints) 1
+           }
+           return      
+       }
+    } else {
+       error "wrong # args: must be \"test name description ?constraints? script expectedAnswer\""
+    }
+    memory tag $name
+    set code [catch {uplevel $script} actualAnswer]
+    if {$code != 0 || [string compare $actualAnswer $expectedAnswer] != 0} {
+       incr ::tcltest::numTests(Failed)
+       set ::tcltest::currentFailure true
+       if {[string first b $::tcltest::verbose] == -1} {
+           set script ""
+       }
+       puts stdout "\n==== $name $description FAILED"
+       if {$script != ""} {
+           puts stdout "==== Contents of test case:"
+           puts stdout $script
+       }
+       if {$code != 0} {
+           if {$code == 1} {
+               puts stdout "==== Test generated error:"
+               puts stdout $actualAnswer
+           } elseif {$code == 2} {
+               puts stdout "==== Test generated return exception;  result was:"
+               puts stdout $actualAnswer
+           } elseif {$code == 3} {
+               puts stdout "==== Test generated break exception"
+           } elseif {$code == 4} {
+               puts stdout "==== Test generated continue exception"
+           } else {
+               puts stdout "==== Test generated exception $code;  message was:"
+               puts stdout $actualAnswer
+           }
+       } else {
+           puts stdout "---- Result was:\n$actualAnswer"
+       }
+       puts stdout "---- Result should have been:\n$expectedAnswer"
+       puts stdout "==== $name FAILED\n" 
+    } else { 
+       incr ::tcltest::numTests(Passed)
+       if {[string first p $::tcltest::verbose] != -1} {
+           puts stdout "++++ $name PASSED"
+       }
+    }
+}
+
+# ::tcltest::dotests --
+#
+#      takes two arguments--the name of the test file (such
+#      as "parse.test"), and a pattern selecting the tests you want to
+#      execute.  It sets ::tcltest::matching to the second argument, calls
+#      "source" on the file specified in the first argument, and restores
+#      ::tcltest::matching to its pre-call value at the end.
+#
+# Arguments:
+#      file    name of tests file to source
+#      args    pattern selecting the tests you want to execute
+#
+# Results:
+#      none
+
+proc ::tcltest::dotests {file args} {
+    set savedTests $::tcltest::match
+    set ::tcltest::match $args
+    source $file
+    set ::tcltest::match $savedTests
+}
+
+proc ::tcltest::openfiles {} {
+    if {[catch {testchannel open} result]} {
+       return {}
+    }
+    return $result
+}
+
+proc ::tcltest::leakfiles {old} {
+    if {[catch {testchannel open} new]} {
+        return {}
+    }
+    set leak {}
+    foreach p $new {
+       if {[lsearch $old $p] < 0} {
+           lappend leak $p
+       }
+    }
+    return $leak
+}
+
+set ::tcltest::saveState {}
+
+proc ::tcltest::saveState {} {
+    uplevel #0 {set ::tcltest::saveState [list [info procs] [info vars]]}
+}
+
+proc ::tcltest::restoreState {} {
+    foreach p [info procs] {
+       if {[lsearch [lindex $::tcltest::saveState 0] $p] < 0} {
+           rename $p {}
+       }
+    }
+    foreach p [uplevel #0 {info vars}] {
+       if {[lsearch [lindex $::tcltest::saveState 1] $p] < 0} {
+           uplevel #0 "unset $p"
+       }
+    }
+}
+
+proc ::tcltest::normalizeMsg {msg} {
+    regsub "\n$" [string tolower $msg] "" msg
+    regsub -all "\n\n" $msg "\n" msg
+    regsub -all "\n\}" $msg "\}" msg
+    return $msg
+}
+
+# makeFile --
+#
+# Create a new file with the name <name>, and write <contents> to it.
+#
+# If this file hasn't been created via makeFile since the last time
+# cleanupTests was called, add it to the $filesMade list, so it will
+# be removed by the next call to cleanupTests.
+#
+proc ::tcltest::makeFile {contents name} {
+    set fd [open $name w]
+    fconfigure $fd -translation lf
+    if {[string index $contents [expr {[string length $contents] - 1}]] == "\n"} {
+       puts -nonewline $fd $contents
+    } else {
+       puts $fd $contents
+    }
+    close $fd
+
+    set fullName [file join [pwd] $name]
+    if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} {
+       lappend ::tcltest::filesMade $fullName
+    }
+}
+
+proc ::tcltest::removeFile {name} {
+    file delete $name
+}
+
+# makeDirectory --
+#
+# Create a new dir with the name <name>.
+#
+# If this dir hasn't been created via makeDirectory since the last time
+# cleanupTests was called, add it to the $directoriesMade list, so it will
+# be removed by the next call to cleanupTests.
+#
+proc ::tcltest::makeDirectory {name} {
+    file mkdir $name
+
+    set fullName [file join [pwd] $name]
+    if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} {
+       lappend ::tcltest::filesMade $fullName
+    }
+}
+
+proc ::tcltest::removeDirectory {name} {
+    file delete -force $name
+}
+
+proc ::tcltest::viewFile {name} {
+    global tcl_platform
+    if {($tcl_platform(platform) == "macintosh") || \
+               ($::tcltest::testConfig(unixExecs) == 0)} {
+       set f [open $name]
+       set data [read -nonewline $f]
+       close $f
+       return $data
+    } else {
+       exec cat $name
+    }
+}
+
+#
+# Construct a string that consists of the requested sequence of bytes,
+# as opposed to a string of properly formed UTF-8 characters.  
+# This allows the tester to 
+# 1. Create denormalized or improperly formed strings to pass to C procedures 
+#    that are supposed to accept strings with embedded NULL bytes.
+# 2. Confirm that a string result has a certain pattern of bytes, for instance
+#    to confirm that "\xe0\0" in a Tcl script is stored internally in 
+#    UTF-8 as the sequence of bytes "\xc3\xa0\xc0\x80".
+#
+# Generally, it's a bad idea to examine the bytes in a Tcl string or to
+# construct improperly formed strings in this manner, because it involves
+# exposing that Tcl uses UTF-8 internally.
+
+proc ::tcltest::bytestring {string} {
+    encoding convertfrom identity $string
+}
+
+# Locate tcltest executable
+
+if {![info exists tk_version]} {
+    set tcltest [info nameofexecutable]
+
+    if {$tcltest == "{}"} {
+       set tcltest {}
+    }
+}
+
+set ::tcltest::testConfig(stdio) 0
+catch {
+    catch {file delete -force tmp}
+    set f [open tmp w]
+    puts $f {
+       exit
+    }
+    close $f
+
+    set f [open "|[list $tcltest tmp]" r]
+    close $f
+    
+    set ::tcltest::testConfig(stdio) 1
+}
+catch {file delete -force tmp}
+
+# Deliberately call the socket with the wrong number of arguments.  The error
+# message you get will indicate whether sockets are available on this system.
+
+catch {socket} msg
+set ::tcltest::testConfig(socket) \
+       [expr {$msg != "sockets are not available on this system"}]
+
+#
+# Internationalization / ISO support procs     -- dl
+#
+
+if {[info commands testlocale]==""} {
+
+    # No testlocale command, no tests...
+    # (it could be that we are a sub interp and we could just load
+    # the Tcltest package but that would interfere with tests
+    # that tests packages/loading in slaves...)
+
+    set ::tcltest::testConfig(hasIsoLocale) 0
+} else {
+    proc ::tcltest::set_iso8859_1_locale {} {
+       set ::tcltest::previousLocale [testlocale ctype]
+       testlocale ctype $::tcltest::isoLocale
+    }
+
+    proc ::tcltest::restore_locale {} {
+       testlocale ctype $::tcltest::previousLocale
+    }
+
+    if {![info exists ::tcltest::isoLocale]} {
+       set ::tcltest::isoLocale fr
+        switch $tcl_platform(platform) {
+           "unix" {
+
+               # Try some 'known' values for some platforms:
+
+               switch -exact -- $tcl_platform(os) {
+                   "FreeBSD" {
+                       set ::tcltest::isoLocale fr_FR.ISO_8859-1
+                   }
+                   HP-UX {
+                       set ::tcltest::isoLocale fr_FR.iso88591
+                   }
+                   Linux -
+                   IRIX {
+                       set ::tcltest::isoLocale fr
+                   }
+                   default {
+
+                       # Works on SunOS 4 and Solaris, and maybe others...
+                       # define it to something else on your system
+                       #if you want to test those.
+
+                       set ::tcltest::isoLocale iso_8859_1
+                   }
+               }
+           }
+           "windows" {
+               set ::tcltest::isoLocale French
+           }
+       }
+    }
+
+    set ::tcltest::testConfig(hasIsoLocale) \
+           [string length [::tcltest::set_iso8859_1_locale]]
+    ::tcltest::restore_locale
+} 
+
+#
+# procedures that are Tk specific
+#
+
+if {[info exists tk_version]} {
+
+    # If the main window isn't already mapped (e.g. because the tests are
+    # being run automatically) , specify a precise size for it so that the
+    # user won't have to position it manually.
+
+    if {![winfo ismapped .]} {
+       wm geometry . +0+0
+       update
+    }
+
+    # The following code can be used to perform tests involving a second
+    # process running in the background.
+    
+    # Locate the tktest executable
+
+    set ::tcltest::tktest [info nameofexecutable]
+    if {$::tcltest::tktest == "{}"} {
+       set ::tcltest::tktest {}
+       puts stdout \
+               "Unable to find tktest executable, skipping multiple process tests."
+    }
+
+    # Create background process
+    
+    proc ::tcltest::setupbg args {
+       if {$::tcltest::tktest == ""} {
+           error "you're not running tktest so setupbg should not have been called"
+       }
+       if {[info exists ::tcltest::fd] && ($::tcltest::fd != "")} {
+           cleanupbg
+       }
+       
+       # The following code segment cannot be run on Windows prior
+       # to Tk 8.1b3 due to a channel I/O bug (bugID 1495).
+
+       global tcl_platform
+       set ::tcltest::fd [open "|[list $::tcltest::tktest -geometry +0+0 -name tktest] $args" r+]
+       puts $::tcltest::fd "puts foo; flush stdout"
+       flush $::tcltest::fd
+       if {[gets $::tcltest::fd data] < 0} {
+           error "unexpected EOF from \"$::tcltest::tktest\""
+       }
+       if {[string compare $data foo]} {
+           error "unexpected output from background process \"$data\""
+       }
+       fileevent $::tcltest::fd readable bgReady
+    }
+    
+    # Send a command to the background process, catching errors and
+    # flushing I/O channels
+
+    proc ::tcltest::dobg {command} {
+       puts $::tcltest::fd "catch [list $command] msg; update; puts \$msg; puts **DONE**; flush stdout"
+       flush $::tcltest::fd
+       set ::tcltest::bgDone 0
+       set ::tcltest::bgData {}
+       tkwait variable ::tcltest::bgDone
+       set ::tcltest::bgData
+    }
+
+    # Data arrived from background process.  Check for special marker
+    # indicating end of data for this command, and make data available
+    # to dobg procedure.
+
+    proc ::tcltest::bgReady {} {
+       set x [gets $::tcltest::fd]
+       if {[eof $::tcltest::fd]} {
+           fileevent $::tcltest::fd readable {}
+           set ::tcltest::bgDone 1
+       } elseif {$x == "**DONE**"} {
+           set ::tcltest::bgDone 1
+       } else {
+           append ::tcltest::bgData $x
+       }
+    }
+
+    # Exit the background process, and close the pipes
+
+    proc ::tcltest::cleanupbg {} {
+       catch {
+           puts $::tcltest::fd "exit"
+           close $::tcltest::fd
+       }
+       set ::tcltest::fd ""
+    }
+
+    # Clean up focus after using generate event, which
+    # can leave the window manager with the wrong impression
+    # about who thinks they have the focus. (BW)
+    
+    proc ::tcltest::fixfocus {} {
+       catch {destroy .focus}
+       toplevel .focus
+       wm geometry .focus +0+0
+       entry .focus.e
+       .focus.e insert 0 "fixfocus"
+       pack .focus.e
+       update
+       focus -force .focus.e
+       destroy .focus
+    }
+}
+
+# threadReap --
+#
+#      Kill all threads except for the main thread.
+#      Do nothing if testthread is not defined.
+#
+# Arguments:
+#      none.
+#
+# Results:
+#      Returns the number of existing threads.
+
+if {[info commands testthread] != {}} {
+    proc ::tcltest::threadReap {} {
+       testthread errorproc ThreadNullError
+       while {[llength [testthread names]] > 1} {
+           foreach tid [testthread names] {
+               if {$tid != $::tcltest::mainThread} {
+                   catch {testthread send -async $tid {testthread exit}}
+                   update
+               }
+           }
+       }
+       testthread errorproc ThreadError
+       return [llength [testthread names]]
+    }
+} else {
+    proc ::tcltest::threadReap {} {
+       return 1
+    }   
+}
+
+# Need to catch the import because it fails if defs.tcl is sourced
+# more than once.
+
+catch {namespace import ::tcltest::*}
+return
diff --git a/tk/tests/get.test b/tk/tests/get.test
new file mode 100644 (file)
index 0000000..0bfa5b9
--- /dev/null
@@ -0,0 +1,97 @@
+# This file is a Tcl script to test out the procedures in the file
+# tkGet.c.  It is organized in the standard fashion for Tcl
+# white-box tests.
+#
+# Copyright (c) 1998 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+eval destroy [winfo children .]
+wm geometry . {}
+raise .
+
+button .b
+test get-1.1 {Tk_GetAnchorFromObj} {
+    .b configure -anchor n
+    .b cget -anchor
+} {n}
+test get-1.2 {Tk_GetAnchorFromObj} {
+    .b configure -anchor ne
+    .b cget -anchor
+} {ne}
+test get-1.3 {Tk_GetAnchorFromObj} {
+    .b configure -anchor e
+    .b cget -anchor
+} {e}
+test get-1.4 {Tk_GetAnchorFromObj} {
+    .b configure -anchor se
+    .b cget -anchor
+} {se}
+test get-1.5 {Tk_GetAnchorFromObj} {
+    .b configure -anchor s
+    .b cget -anchor
+} {s}
+test get-1.6 {Tk_GetAnchorFromObj} {
+    .b configure -anchor sw
+    .b cget -anchor
+} {sw}
+test get-1.7 {Tk_GetAnchorFromObj} {
+    .b configure -anchor w
+    .b cget -anchor
+} {w}
+test get-1.8 {Tk_GetAnchorFromObj} {
+    .b configure -anchor nw
+    .b cget -anchor
+} {nw}
+test get-1.9 {Tk_GetAnchorFromObj} {
+    .b configure -anchor n
+    .b cget -anchor
+} {n}
+test get-1.10 {Tk_GetAnchorFromObj} {
+    .b configure -anchor center
+    .b cget -anchor
+} {center}
+test get-1.11 {Tk_GetAnchorFromObj - error} {
+    list [catch {.b configure -anchor unknown} msg] $msg
+} {1 {bad anchor "unknown": must be n, ne, e, se, s, sw, w, nw, or center}}
+
+catch {destroy .b}
+button .b
+test get-2.1 {Tk_GetJustifyFromObj} {
+    .b configure -justify left
+    .b cget -justify
+} {left}
+test get-2.2 {Tk_GetJustifyFromObj} {
+    .b configure -justify right
+    .b cget -justify
+} {right}
+test get-2.3 {Tk_GetJustifyFromObj} {
+    .b configure -justify center
+    .b cget -justify
+} {center}
+test get-2.4 {Tk_GetJustifyFromObj - error} {
+    list [catch {.b configure -justify stupid} msg] $msg
+} {1 {bad justification "stupid": must be left, right, or center}}
+
+# cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/unixSelect.test b/tk/tests/unixSelect.test
new file mode 100644 (file)
index 0000000..9a29d0a
--- /dev/null
@@ -0,0 +1,244 @@
+# This file contains tests for the tkUnixSelect.c file.
+#
+# This file contains a collection of tests for one or more of the Tcl
+# built-in commands.  Sourcing this file into Tcl runs the tests and
+# generates output for errors.  No output means no errors were found.
+#
+# Copyright (c) 1999 by Scriptics Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {$tcl_platform(platform) != "unix"} {
+    puts "skipping: Unix only tests..."
+    ::tcltest::cleanupTests
+    return
+}
+
+eval destroy [winfo child .]
+
+global longValue selValue selInfo
+
+set selValue {}
+set selInfo {}
+
+proc handler {type offset count} {
+    global selValue selInfo
+    lappend selInfo $type $offset $count
+    set numBytes [expr {[string length $selValue] - $offset}]
+    if {$numBytes <= 0} {
+       return ""
+    }
+    string range $selValue $offset [expr $numBytes+$offset]
+}
+
+proc errIncrHandler {type offset count} {
+    global selValue selInfo pass
+    if {$offset == 4000} {
+       if {$pass == 0} {
+           # Just sizing the selection;  don't do anything here.
+           set pass 1
+       } else {
+           # Fetching the selection;  wait long enough to cause a timeout.
+           after 6000
+       }
+    }
+    lappend selInfo $type $offset $count
+    set numBytes [expr {[string length $selValue] - $offset}]
+    if {$numBytes <= 0} {
+       return ""
+    }
+    string range $selValue $offset [expr $numBytes+$offset]
+}
+
+proc errHandler args {
+    error "selection handler aborted"
+}
+
+proc badHandler {path type offset count} {
+    global selValue selInfo
+    selection handle -type $type $path {}
+    lappend selInfo $path $type $offset $count
+    set numBytes [expr {[string length $selValue] - $offset}]
+    if {$numBytes <= 0} {
+       return ""
+    }
+    string range $selValue $offset [expr $numBytes+$offset]
+}
+proc reallyBadHandler {path type offset count} {
+    global selValue selInfo pass
+    if {$offset == 4000} {
+       if {$pass == 0} {
+           set pass 1
+       } else {
+           selection handle -type $type $path {}
+       }
+    }
+    lappend selInfo $path $type $offset $count
+    set numBytes [expr {[string length $selValue] - $offset}]
+    if {$numBytes <= 0} {
+       return ""
+    }
+    string range $selValue $offset [expr $numBytes+$offset]
+}
+
+# Eliminate any existing selection on the screen.  This is needed in case
+# there is a selection in some other application, in order to prevent races
+# from causing false errors in the tests below.
+
+selection clear .
+after 1500
+
+# common setup code
+proc setup {{path .f1} {display {}}} {
+    catch {destroy $path}
+    if {$display == {}} {
+       frame $path
+    } else {
+       toplevel $path -screen $display
+       wm geom $path +0+0
+    }
+    selection own $path
+}
+
+# set up a very large buffer to test INCR retrievals
+set longValue ""
+foreach i {a b c d e f g j h i j k l m o p q r s t u v w x y z} {
+    set j $i.1$i.2$i.3$i.4$i.5$i.6$i.7$i.8$i.9$i.10$i.11$i.12$i.13$i.14
+    append longValue A$j B$j C$j D$j E$j F$j G$j H$j I$j K$j L$j M$j N$j
+}
+
+test unixSelect-1.1 {TkSelGetSelection procedure: simple i18n text} {unixOnly} {
+    setupbg
+    entry .e
+    pack .e
+    update
+    .e insert 0 [encoding convertfrom identity \u00fcber]
+    .e selection range 0 end
+    set result [dobg {string bytelength [selection get]}]
+    cleanupbg
+    destroy .e
+    set result
+} {5}
+test unixSelect-1.2 {TkSelGetSelection procedure: simple i18n text, iso8859-1} {unixOnly} {
+    setupbg
+    dobg {
+       entry .e; pack .e; update
+       .e insert 0 \u00fc\u0444
+       .e selection range 0 end
+    }
+    set x [selection get]
+    cleanupbg
+    list [string equal \u00fc? $x] \
+           [string length $x] [string bytelength $x]
+} {1 2 3}
+test unixSelect-1.4 {TkSelGetSelection procedure: simple i18n text, iso2022} {unixOnly} {
+    setupbg
+    setup
+    selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . \
+           {handler COMPOUND_TEXT}
+    selection own .
+    set selValue \u00fc\u0444
+    set selInfo {}
+    set result [dobg {
+       set x [selection get -type COMPOUND_TEXT]
+       list [string equal \u00fc\u0444 $x] \
+               [string length $x] [string bytelength $x]
+    }]
+    cleanupbg
+    lappend result $selInfo
+} {1 2 4 {COMPOUND_TEXT 0 4000}}
+test unixSelect-1.5 {TkSelGetSelection procedure: INCR i18n text, iso2022} {unixOnly} {
+
+    # This test is subtle.  The selection ends up getting fetched twice by
+    # Tk:  once to compute the length, and again to actually send the data.
+    # The first time through, we don't convert the data to ISO2022, so the
+    # buffer boundaries end up being different in the two passes.
+
+    setupbg
+    setup
+    selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . \
+           {handler COMPOUND_TEXT}
+    selection own .
+    set selValue [string repeat x 3999]\u00fc\u0444[string repeat x 3999]
+    set selInfo {}
+    set result [dobg {
+       set x [selection get -type COMPOUND_TEXT]
+       list [string equal \
+               [string repeat x 3999]\u00fc\u0444[string repeat x 3999] $x] \
+               [string length $x] [string bytelength $x]
+    }]
+    cleanupbg
+    lappend result $selInfo
+} {1 8000 8002 {COMPOUND_TEXT 0 4000 COMPOUND_TEXT 4000 3999 COMPOUND_TEXT 7998 4000 COMPOUND_TEXT 0 4000 COMPOUND_TEXT 4000 3998 COMPOUND_TEXT 7997 4000}}
+test unixSelect-1.6 {TkSelGetSelection procedure: simple i18n text, iso2022} {unixOnly} {
+    setupbg
+    setup
+    selection handle -type COMPOUND_TEXT -format COMPOUND_TEXT . \
+           {handler COMPOUND_TEXT}
+    selection own .
+    set selValue \u00fc\u0444
+    set selInfo {}
+    set result [dobg {
+       set x [selection get -type COMPOUND_TEXT]
+       list [string equal \u00fc\u0444 $x] \
+               [string length $x] [string bytelength $x]
+    }]
+    cleanupbg
+    lappend result $selInfo
+} {1 2 4 {COMPOUND_TEXT 0 4000}}
+test unixSelect-1.7 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
+    setupbg
+    dobg "entry .e; pack .e; update
+    .e insert 0 \[encoding convertfrom identity \\u00fcber\]$longValue
+    .e selection range 0 end"
+    set result [string bytelength [selection get]]
+    cleanupbg
+    set result
+} [expr {5 + [string bytelength $longValue]}]
+test unixSelect-1.8 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
+    setupbg
+    dobg {
+       entry .e; pack .e; update
+       .e insert 0 [string repeat x 3999]\u00fc
+       .e selection range 0 end
+    }
+    set x [selection get]
+    cleanupbg
+    list [string equal [string repeat x 3999]\u00fc $x] \
+           [string length $x] [string bytelength $x]
+} {1 4000 4001}
+test unixSelect-1.9 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
+    setupbg
+    dobg {
+       entry .e; pack .e; update
+       .e insert 0 \u00fc[string repeat x 3999]
+       .e selection range 0 end
+    }
+    set x [selection get]
+    cleanupbg
+    list [string equal \u00fc[string repeat x 3999] $x] \
+           [string length $x] [string bytelength $x]
+} {1 4000 4001}
+test unixSelect-1.10 {TkSelGetSelection procedure: INCR i18n text} {unixOnly} {
+    setupbg
+    dobg {
+       entry .e; pack .e; update
+       .e insert 0 [string repeat x 3999]\u00fc[string repeat x 4000]
+       .e selection range 0 end
+    }
+    set x [selection get]
+    cleanupbg
+    list [string equal [string repeat x 3999]\u00fc[string repeat x 4000] $x] \
+           [string length $x] [string bytelength $x]
+} {1 8000 8001}
+
+# cleanup
+::tcltest::cleanupTests
+return
diff --git a/tk/tests/unixSend.test b/tk/tests/unixSend.test
new file mode 100644 (file)
index 0000000..0afdd49
--- /dev/null
@@ -0,0 +1,679 @@
+# This file is a Tcl script to test out the "send" command and the
+# other procedures in the file tkSend.c.  It is organized in the
+# standard fashion for Tcl tests.
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {$tcl_platform(platform) == "macintosh"} {
+    puts "send is not available on the Mac - skipping tests"
+    ::tcltest::cleanupTests
+    return
+}
+if {$tcl_platform(platform) == "windows"} {
+    puts "skipping: Unix only tests..."
+    ::tcltest::cleanupTests
+    return
+}
+if {[auto_execok xhost] == ""} {
+    puts "xhost application isn't available - skipping tests"
+    ::tcltest::cleanupTests
+    return
+}
+
+if {[info commands testsend] == "testsend"} {
+    set gotTestCmds 1
+} else {
+    set gotTestCmds 0
+}
+
+foreach i [winfo children .] {
+    destroy $i
+}
+wm geometry . {}
+raise .
+
+# If send is disabled because of inadequate security, don't run any
+# of these tests at all.
+
+setupbg
+set app [dobg {tk appname}]
+if {[catch {send $app set a 0} msg] == 1} {
+    if [string match "X server insecure *" $msg] {
+       puts -nonewline "Your X server is insecure, so \"send\" can't be used;"
+       puts " skipping \"send\" tests."
+       cleanupbg
+       ::tcltest::cleanupTests
+       return
+    }
+}
+cleanupbg
+
+# Compute a script that will load Tk into a child interpreter.
+
+foreach pkg [info loaded] {
+    if {[lindex $pkg 1] == "Tk"} {
+       set loadTk "load $pkg"
+       break
+    }
+}
+
+# Procedure to create a new application with a given name and class.
+
+proc newApp {screen name class} {
+    global loadTk
+    interp create $name
+    $name eval [list set argv [list -display $screen -name $name -class $class]]
+    eval $loadTk $name
+}
+
+set name [tk appname]
+if $gotTestCmds {
+    set registry [testsend prop root InterpRegistry]
+    set commId [lindex [testsend prop root InterpRegistry] 0]
+}
+tk appname tktest
+catch {send t_s_1 destroy .}
+catch {send t_s_2 destroy .}
+
+if $gotTestCmds {
+    test unixSend-1.1 {RegOpen procedure, bogus property} {
+       testsend bogus
+       set result [winfo interps]
+       tk appname tktest
+       list $result [winfo interps]
+    } {{} tktest}
+    test unixSend-1.2 {RegOpen procedure, bogus property} {
+       testsend prop root InterpRegistry {}
+       set result [winfo interps]
+       tk appname tktest
+       list $result [winfo interps]
+    } {{} tktest}
+    test unixSend-1.3 {RegOpen procedure, bogus property} {
+       testsend prop root InterpRegistry abcdefg
+       tk appname tktest
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " tktest\nabcdefg\n"
+
+    frame .f -width 1 -height 1
+    set id [string range [winfo id .f] 2 end]
+    test unixSend-2.1 {RegFindName procedure} {
+       testsend prop root InterpRegistry {}
+       list [catch {send foo bar} msg] $msg
+    } {1 {no application named "foo"}}
+    test unixSend-2.2 {RegFindName procedure} {
+       testsend prop root InterpRegistry " abc\n def\nghi\n\n$id foo\n"
+       tk appname foo
+    } {foo #2}
+    test unixSend-2.3 {RegFindName procedure} {
+       testsend prop root InterpRegistry "gyz foo\n"
+       tk appname foo
+    } {foo}
+    test unixSend-2.4 {RegFindName procedure} {
+       testsend prop root InterpRegistry "${id}z foo\n"
+       tk appname foo
+    } {foo}
+
+    test unixSend-3.1 {RegDeleteName procedure} {
+       tk appname tktest
+       testsend prop root InterpRegistry "012345 gorp\n12345 foo\n12345 tktest"
+       tk appname x
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " x\n012345 gorp\n12345 foo\n"
+    test unixSend-3.2 {RegDeleteName procedure} {
+       tk appname tktest
+       testsend prop root InterpRegistry "012345 gorp\n12345 tktest\n23456 tktest"
+       tk appname x
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " x\n012345 gorp\n23456 tktest\n"
+    test unixSend-3.3 {RegDeleteName procedure} {
+       tk appname tktest
+       testsend prop root InterpRegistry "012345 tktest\n12345 bar\n23456 tktest"
+       tk appname x
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " x\n12345 bar\n23456 tktest\n"
+    test unixSend-3.4 {RegDeleteName procedure} {
+       tk appname tktest
+       testsend prop root InterpRegistry "foo"
+       tk appname x
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " x\nfoo\n"
+    test unixSend-3.5 {RegDeleteName procedure} {
+       tk appname tktest
+       testsend prop root InterpRegistry ""
+       tk appname x
+       set x [testsend prop root InterpRegistry]
+       string range $x [string first " " $x] end
+    } " x\n"
+
+    test unixSend-4.1 {RegAddName procedure} {
+       testsend prop root InterpRegistry ""
+       tk appname bar
+       testsend prop root InterpRegistry
+    } "$commId bar\n"
+    test unixSend-4.2 {RegAddName procedure} {
+       testsend prop root InterpRegistry "abc def"
+       tk appname bar
+       tk appname foo
+       testsend prop root InterpRegistry
+    } "$commId foo\nabc def\n"
+
+    # Previous checks should already cover the Regclose procedure.
+
+    test unixSend-5.1 {ValidateName procedure} {
+       testsend prop root InterpRegistry "123 abc\n"
+       winfo interps
+    } {}
+    test unixSend-5.2 {ValidateName procedure} {
+       testsend prop root InterpRegistry "$id Hi there"
+       winfo interps
+    } {{Hi there}}
+    test unixSend-5.3 {ValidateName procedure} {
+       testsend prop root InterpRegistry "$id Bogus"
+       list [catch {send Bogus set a 44} msg] $msg
+    } {1 {target application died or uses a Tk version before 4.0}}
+    test unixSend-5.4 {ValidateName procedure} {
+       tk appname test
+       testsend prop root InterpRegistry "$commId Bogus\n$commId test\n"
+       winfo interps
+    } {test}
+}
+
+winfo interps
+tk appname tktest
+update
+setupbg
+set x [split [exec xhost] \n]
+foreach i [lrange $x 1 end]  {
+    exec xhost - $i
+}
+test unixSend-6.1 {ServerSecure procedure} {nonPortable} {
+    set a 44
+    list [dobg [list send [tk appname] set a 55]] $a
+} {55 55}
+test unixSend-6.2 {ServerSecure procedure} {nonPortable} {
+    set a 22
+    exec xhost [exec hostname]
+    list [catch {dobg [list send [tk appname] set a 33]} msg] $a $msg
+} {0 22 {X server insecure (must use xauth-style authorization); command ignored}}
+test unixSend-6.3 {ServerSecure procedure} {nonPortable} {
+    set a abc
+    exec xhost - [exec hostname]
+    list [dobg [list send [tk appname] set a new]] $a
+} {new new}
+cleanupbg
+
+if $gotTestCmds {
+    test unixSend-7.1 {Tk_SetAppName procedure} {
+       testsend prop root InterpRegistry ""
+       tk appname newName
+       list [tk appname oldName] [testsend prop root InterpRegistry]
+    } "oldName {$commId oldName\n}"
+    test unixSend-7.2 {Tk_SetAppName procedure, name not in use} {
+       testsend prop root InterpRegistry ""
+       list [tk appname gorp] [testsend prop root InterpRegistry]
+    } "gorp {$commId gorp\n}"
+    test unixSend-7.3 {Tk_SetAppName procedure, name in use by us} {
+       tk appname name1
+       testsend prop root InterpRegistry "$commId name2\n"
+       list [tk appname name2] [testsend prop root InterpRegistry]
+    } "name2 {$commId name2\n}"
+    test unixSend-7.4 {Tk_SetAppName procedure, name in use} {
+       tk appname name1
+       testsend prop root InterpRegistry "$id foo\n$id foo #2\n$id foo #3\n"
+       list [tk appname foo] [testsend prop root InterpRegistry]
+    } "{foo #4} {$commId foo #4\n$id foo\n$id foo #2\n$id foo #3\n}"
+}
+
+test unixSend-8.1 {Tk_SendCmd procedure, options} {
+    setupbg
+    set app [dobg {tk appname}]
+    set a 66
+    send -async $app [list send [tk appname] set a 77]
+    set result $a
+    after 200 set x 40
+    tkwait variable x
+    cleanupbg
+    lappend result $a
+} {66 77}
+if [info exists env(TK_ALT_DISPLAY)] {
+    test unixSend-8.2 {Tk_SendCmd procedure, options} {
+       setupbg -display $env(TK_ALT_DISPLAY)
+       tk appname xyzgorp
+       set a homeDisplay
+       set result [dobg "
+           toplevel .t -screen [winfo screen .]
+           wm geometry .t +0+0
+           set a altDisplay
+           tk appname xyzgorp
+           list \[send xyzgorp set a\] \[send -displayof .t xyzgorp set a\]
+       "]
+       cleanupbg
+       set result
+    } {altDisplay homeDisplay}
+}
+test unixSend-8.3 {Tk_SendCmd procedure, options} {
+    list [catch {send -- -async foo bar baz} msg] $msg
+} {1 {no application named "-async"}}
+test unixSend-8.4 {Tk_SendCmd procedure, options} {
+    list [catch {send -gorp foo bar baz} msg] $msg
+} {1 {bad option "-gorp": must be -async, -displayof, or --}}
+test unixSend-8.5 {Tk_SendCmd procedure, options} {
+    list [catch {send -async foo} msg] $msg
+} {1 {wrong # args: should be "send ?options? interpName arg ?arg ...?"}}
+test unixSend-8.6 {Tk_SendCmd procedure, options} {
+    list [catch {send foo} msg] $msg
+} {1 {wrong # args: should be "send ?options? interpName arg ?arg ...?"}}
+test unixSend-8.7 {Tk_SendCmd procedure, local execution} {
+    set a initial
+    send [tk appname] {set a new}
+    set a
+} {new}
+test unixSend-8.8 {Tk_SendCmd procedure, local execution} {
+    set a initial
+    send [tk appname] set a new
+    set a
+} {new}
+test unixSend-8.9 {Tk_SendCmd procedure, local execution} {
+    set a initial
+    string tolower [list [catch {send [tk appname] open bad_file} msg] \
+           $msg $errorInfo $errorCode]
+} {1 {couldn't open "bad_file": no such file or directory} {couldn't open "bad_file": no such file or directory
+    while executing
+"open bad_file"
+    invoked from within
+"send [tk appname] open bad_file"} {posix enoent {no such file or directory}}}
+test unixSend-8.10 {Tk_SendCmd procedure, no such interpreter} {
+    list [catch {send bogus_name bogus_command} msg] $msg
+} {1 {no application named "bogus_name"}}
+if $gotTestCmds {
+    newApp "" t_s_1 Test
+    t_s_1 eval wm withdraw .
+    test unixSend-8.11 {Tk_SendCmd procedure, local execution, different interp} {
+       set a us
+       send t_s_1 set a them
+       list $a [send t_s_1 set a]
+    } {us them}
+    test unixSend-8.12 {Tk_SendCmd procedure, local execution, different interp} {
+       set a us
+       send t_s_1 {set a them}
+       list $a [send t_s_1 {set a}]
+    } {us them}
+    test unixSend-8.13 {Tk_SendCmd procedure, local execution, different interp} {
+       set a us
+       send t_s_1 {set a them}
+       list $a [send t_s_1 {set a}]
+    } {us them}
+    test unixSend-8.14 {Tk_SendCmd procedure, local interp killed by send} {
+       newApp "" t_s_2 Test
+       list [catch {send t_s_2 {destroy .; concat result}} msg] $msg
+    } {0 result}
+    interp delete t_s_2
+    test unixSend-8.15 {Tk_SendCmd procedure, local interp, error info} {
+       catch {error foo}
+       list [catch {send t_s_1 {if 1 {open bogus_file_name}}} msg] $msg $errorInfo $errorCode
+    } {1 {couldn't open "bogus_file_name": no such file or directory} {couldn't open "bogus_file_name": no such file or directory
+    while executing
+"open bogus_file_name"
+    invoked from within
+"if 1 {open bogus_file_name}"
+    invoked from within
+"send t_s_1 {if 1 {open bogus_file_name}}"} {POSIX ENOENT {no such file or directory}}}
+    test unixSend-8.16 {Tk_SendCmd procedure, bogusCommWindow} {
+       testsend prop root InterpRegistry "10234 bogus\n"
+       set result [list [catch {send bogus bogus command} msg] $msg]
+       winfo interps
+       tk appname tktest
+       set result
+    } {1 {no application named "bogus"}}
+    interp delete t_s_1
+}
+test unixSend-8.17 {Tk_SendCmd procedure, deferring events} {nonPortable} {
+    # Non-portable because some window managers ignore "raise"
+    # requests so can't guarantee that new app's window won't
+    # obscure .f, thereby masking the Expose event.
+
+    setupbg
+    set app [dobg {tk appname}]
+    raise .            ; # Don't want new app obscuring .f
+    catch {destroy .f}
+    frame .f
+    place .f -x 0 -y 0
+    bind .f <Expose> {set a exposed}
+    set a {no event yet}
+    set result ""
+    lappend result [send $app send [list [tk appname]] set a]
+    lappend result $a
+    update
+    cleanupbg
+    lappend result $a
+} {{no event yet} {no event yet} exposed}
+test unixSend-8.18 {Tk_SendCmd procedure, error in remote app} {
+    setupbg
+    set app [dobg {tk appname}]
+    set result [string tolower [list [catch {send $app open bad_name} msg] \
+           $msg $errorInfo $errorCode]]
+    cleanupbg
+    set result
+} {1 {couldn't open "bad_name": no such file or directory} {couldn't open "bad_name": no such file or directory
+    while executing
+"open bad_name"
+    invoked from within
+"send $app open bad_name"} {posix enoent {no such file or directory}}}
+test unixSend-8.19 {Tk_SendCmd, using modal timeouts} {
+    setupbg
+    set app [dobg {tk appname}]
+    set x no
+    set result ""
+    after 0 {set x yes}
+    lappend result [send $app {concat x y z}]
+    lappend result $x
+    update
+    cleanupbg
+    lappend result $x
+} {{x y z} no yes}
+
+tk appname tktest
+catch {destroy .f}
+frame .f
+set id [string range [winfo id .f] 2 end]
+if $gotTestCmds {
+    test unixSend-9.1 {Tk_GetInterpNames procedure} {
+       testsend prop root InterpRegistry \
+               "$commId tktest\nfoo bar\n$commId tktest\n$id frame .f\n\n\n"
+       list [winfo interps] [testsend prop root InterpRegistry]
+    } "{tktest tktest {frame .f}} {$commId tktest\n$commId tktest\n$id frame .f
+}"
+    test unixSend-9.2 {Tk_GetInterpNames procedure} {
+       testsend prop root InterpRegistry \
+               "$commId tktest\nfoobar\n$commId gorp\n"
+       list [winfo interps] [testsend prop root InterpRegistry]
+    } "tktest {$commId tktest\n}"
+    test unixSend-9.3 {Tk_GetInterpNames procedure} {
+       testsend prop root InterpRegistry {}
+       list [winfo interps] [testsend prop root InterpRegistry]
+    } {{} {}}
+
+    testsend prop root InterpRegistry "$commId tktest\n$id dummy\n"
+    test unixSend-10.1 {SendEventProc procedure, bogus comm property} {
+       testsend prop comm Comm {abc def}
+       testsend prop comm Comm {}
+       update
+    } {}
+    test unixSend-10.2 {SendEventProc procedure, simultaneous messages} {
+       testsend prop comm Comm \
+               "c\n-n tktest\n-s set a 44\nc\n-n tktest\n-s set b 45\n"
+       set a null
+       set b xyzzy
+       update
+       list $a $b
+    } {44 45}
+    test unixSend-10.3 {SendEventProc procedure, simultaneous messages} {
+       testsend prop comm Comm \
+               "c\n-n tktest\n-s set a newA\nr\n-s [testsend serial]\n-r 12345\nc\n-n tktest\n-s set b newB\n"
+       set a null
+       set b xyzzy
+       set x [send dummy bogus]
+       list $x $a $b
+    } {12345 newA newB}
+    test unixSend-10.4 {SendEventProc procedure, leading nulls, bogus commands} {
+       testsend prop comm Comm \
+               "\n\nx\n-bogus\n\nc\n-n tktest\n-s set a 44\n"
+       set a null
+       update
+       set a
+    } {44}
+    test unixSend-10.5 {SendEventProc procedure, extraneous command options} {
+       testsend prop comm Comm \
+               "c\n-n tktest\n-x miscellanous\n-y who knows?\n-s set a new\n"
+       set a null
+       update
+       set a
+    } {new}
+    test unixSend-10.6 {SendEventProc procedure, unknown interpreter} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n unknown\n-r $id 44\n-s set a new\n"
+       set a null
+       update
+       list [testsend prop [winfo id .f] Comm] $a
+    } "{\nr\n-s 44\n-r receiver never heard of interpreter \"unknown\"\n-c 1\n} null"
+    test unixSend-10.7 {SendEventProc procedure, error in script} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-r $id 62\n-s foreach i {1 2 3} {error {test error} {Initial errorInfo} {test code}}\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {
+r
+-s 62
+-r test error
+-i Initial errorInfo
+    ("foreach" body line 1)
+    invoked from within
+"foreach i {1 2 3} {error {test error} {Initial errorInfo} {test code}}"
+-e test code
+-c 1
+}
+    test unixSend-10.8 {SendEventProc procedure, exceptional return} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-r $id 62\n-s break\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {
+r
+-s 62
+-r 
+-c 3
+}
+    test unixSend-10.9 {SendEventProc procedure, empty return} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-r $id 62\n-s concat\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {
+r
+-s 62
+-r 
+}
+    test unixSend-10.10 {SendEventProc procedure, asynchronous calls} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-s foreach i {1 2 3} {error {test error} {Initial errorInfo} {test code}}\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {}
+    test unixSend-10.11 {SendEventProc procedure, exceptional return} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-s break\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {}
+    test unixSend-10.12 {SendEventProc procedure, empty return} {
+       testsend prop [winfo id .f] Comm {}
+       testsend prop comm Comm \
+               "c\n-n tktest\n-s concat\n"
+       update
+       testsend prop [winfo id .f] Comm
+    } {}
+    test unixSend-10.13 {SendEventProc procedure, return processing} {
+       testsend prop comm Comm \
+               "r\n-c 1\n-e test1\n-i test2\n-r test3\n-s [testsend serial]\n"
+       list [catch {send dummy foo} msg] $msg $errorInfo $errorCode
+    } {1 test3 {test2
+    invoked from within
+"send dummy foo"} test1}
+    test unixSend-10.14 {SendEventProc procedure, extraneous return options} {
+       testsend prop comm Comm \
+               "r\n-x test1\n-y test2\n-r result\n-s [testsend serial]\n"
+       list [catch {send dummy foo} msg] $msg
+    } {0 result}
+    test unixSend-10.15 {SendEventProc procedure, serial number} {
+       testsend prop comm Comm \
+               "r\n-r response\n"
+       list [catch {send dummy foo} msg] $msg
+    } {1 {target application died or uses a Tk version before 4.0}}
+    test unixSend-10.16 {SendEventProc procedure, serial number} {
+       testsend prop comm Comm \
+               "r\n-r response\n\n-s 0"
+       list [catch {send dummy foo} msg] $msg
+    } {1 {target application died or uses a Tk version before 4.0}}
+    test unixSend-10.17 {SendEventProc procedure, errorCode and errorInfo} {
+       testsend prop comm Comm \
+               "r\n-i test1\n-e test2\n-c 4\n-s [testsend serial]\n"
+       set errorCode oldErrorCode
+       set errorInfo oldErrorInfo
+       list [catch {send dummy foo} msg] $msg $errorInfo $errorCode
+    } {4 {} oldErrorInfo oldErrorCode}
+    test unixSend-10.18 {SendEventProc procedure, send kills application} {
+       setupbg
+       dobg {tk appname t_s_3}
+       set x [list [catch {send t_s_3 destroy .} msg] $msg]
+       cleanupbg
+       set x
+    } {0 {}}
+    test unixSend-10.19 {SendEventProc procedure, send exits} {
+       setupbg
+       dobg {tk appname t_s_3}
+       set x [list [catch {send t_s_3 exit} msg] $msg]
+       close $::tcltest::fd
+       set x
+    } {1 {target application died}}
+
+    test unixSend-11.1 {AppendPropCarefully and AppendErrorProc procedures} {
+       testsend prop root InterpRegistry "0x21447 dummy\n"
+       list [catch {send dummy foo} msg] $msg
+    } {1 {no application named "dummy"}}
+    test unixSend-11.2 {AppendPropCarefully and AppendErrorProc procedures} {
+       testsend prop comm Comm "c\n-r0x123 44\n-n tktest\n-s concat a b c\n"
+       update
+    } {}
+}
+
+winfo interps
+tk appname tktest
+catch {destroy .f}
+frame .f
+set id [string range [winfo id .f] 2 end]
+if $gotTestCmds {
+    test unixSend-12.1 {TimeoutProc procedure} {
+        testsend prop root InterpRegistry "$id dummy\n"
+        list [catch {send dummy foo} msg] $msg
+    } {1 {target application died or uses a Tk version before 4.0}}
+    testsend prop root InterpRegistry ""
+}
+test unixSend-12.2 {TimeoutProc procedure} {
+    winfo interps
+    tk appname tktest
+    update
+    setupbg
+    puts $::tcltest::fd {after 10 {after 5000; exit}; puts [tk appname]; puts **DONE**; flush stdout}
+    set ::tcltest::bgDone 0
+    set ::tcltest::bgData {}
+    flush $::tcltest::fd
+    tkwait variable ::tcltest::bgDone
+    set app $::tcltest::bgData
+    after 200
+    set result [list [catch {send $app foo} msg] $msg]
+    close $::tcltest::fd
+    set result
+} {1 {target application died}}
+
+winfo interps
+tk appname tktest
+test unixSend-13.1 {DeleteProc procedure} {
+    setupbg
+    set app [dobg {rename send {}; tk appname}]
+    set result [list [catch {send $app foo} msg] $msg [winfo interps]]
+    cleanupbg
+    set result
+} {1 {no application named "tktest #2"} tktest}
+test unixSend-13.2 {DeleteProc procedure} {
+    winfo interps
+    tk appname tktest
+    rename send {}
+    set result {}
+    lappend result [winfo interps] [info commands send]
+    tk appname foo
+    lappend result [winfo interps] [info commands send]
+} {{} {} foo send}
+
+if [info exists env(TK_ALT_DISPLAY)] {
+    test unixSend-14.1 {SendRestrictProc procedure, sends crossing from different displays} {
+       setupbg -display $env(TK_ALT_DISPLAY)
+       set result [dobg "
+           toplevel .t -screen [winfo screen .]
+           wm geometry .t +0+0
+           tk appname xyzgorp1
+           set x child
+       "]
+       toplevel .t -screen $env(TK_ALT_DISPLAY)
+       wm geometry .t +0+0
+       tk appname xyzgorp2
+       update
+       set y parent
+       set result [send -displayof .t xyzgorp1 {list $x [send -displayof .t xyzgorp2 set y]}]
+       destroy .t
+       cleanupbg
+       set result
+    } {child parent}
+}
+
+if $gotTestCmds {
+    testsend prop root InterpRegister $registry
+    tk appname tktest
+    test unixSend-15.1 {UpdateCommWindow procedure} {
+       set x [list [testsend prop comm TK_APPLICATION]]
+       newApp "" t_s_1 Test
+       send t_s_1 wm withdraw .
+       newApp "" t_s_2 Test
+       send t_s_2 wm withdraw .
+       lappend x [testsend prop comm TK_APPLICATION]
+       interp delete t_s_1
+       lappend x [testsend prop comm TK_APPLICATION]
+       interp delete t_s_2
+       lappend x [testsend prop comm TK_APPLICATION]
+    } {tktest {t_s_2 t_s_1 tktest} {t_s_2 tktest} tktest}
+}
+
+tk appname $name
+if $gotTestCmds {
+    testsend prop root InterpRegistry $registry
+}
+if $gotTestCmds {
+    testdeleteapps
+}
+rename newApp {}
+
+# cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/tests/visual_bb.test b/tk/tests/visual_bb.test
new file mode 100644 (file)
index 0000000..e0eea2f
--- /dev/null
@@ -0,0 +1,111 @@
+#!/usr/local/bin/wish -f
+#
+# This script displays provides visual tests for many of Tk's features.
+# Each test displays a window with various information in it, along
+# with instructions about how the window should appear.  You can look
+# at the window to make sure it appears as expected.  Individual tests
+# are kept in separate ".tcl" files in this directory.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+set auto_path ". $auto_path"
+wm title . "Visual Tests for Tk"
+
+set testNum 1
+
+# Each menu entry invokes a visual test file
+
+proc runTest {file} {
+    global testNum
+
+    test "2.$testNum" "testing $file" {userInteraction} {
+       uplevel \#0 source [file join $::tcltest::testsDir $file]
+       concat ""
+    } {}
+    incr testNum
+}
+
+# The following procedure is invoked to print the contents of a canvas:
+
+proc lpr c {
+    exec rm -f tmp.ps
+    $c postscript -file tmp.ps
+    exec lpr tmp.ps
+    exec rm -f tmp.ps
+}
+
+test 1.1 "running visual tests" {userInteraction} {
+
+    #-------------------------------------------------------
+    # The code below create the main window, consisting of a
+    # menu bar and a message explaining the basic operation
+    # of the program.
+    #-------------------------------------------------------
+
+    frame .menu -relief raised -borderwidth 1
+    message .msg -font {Times 18} -relief raised -width 4i \
+           -borderwidth 1 -text "This application provides a collection of visual tests for the Tk toolkit.  Each menu entry invokes a test, which displays information on the screen.  You can then verify visually that the information is being displayed in the correct way.  The tests under the \"Postscript\" menu exercise the Postscript-generation capabilities of canvas widgets."
+    
+    pack .menu -side top -fill x
+    pack .msg -side bottom -expand yes -fill both
+
+    #-------------------------------------------------------
+    # The code below creates all the menus, which invoke procedures
+    # to create particular demonstrations of various widgets.
+    #-------------------------------------------------------
+
+    menubutton .menu.file -text "File" -menu .menu.file.m
+    menu .menu.file.m
+    .menu.file.m add command -label "Quit" -command ::tcltest::cleanupTests
+    
+    menubutton .menu.group1 -text "Group 1" -menu .menu.group1.m
+    menu .menu.group1.m
+    .menu.group1.m add command -label "Canvas arcs" -command {runTest arc.tcl}
+    .menu.group1.m add command -label "Beveled borders in text widgets" \
+           -command {runTest bevel.tcl}
+    .menu.group1.m add command -label "Colormap management" \
+           -command {runTest cmap.tcl}
+    .menu.group1.m add command -label "Label/button geometry" \
+           -command {runTest butGeom.tcl}
+    .menu.group1.m add command -label "Label/button colors" \
+           -command {runTest butGeom2.tcl}
+    
+    menubutton .menu.ps -text "Canvas Postscript" -menu .menu.ps.m
+    menu .menu.ps.m
+    .menu.ps.m add command -label "Rectangles and other graphics" \
+           -command {runTest canvPsGrph.tcl}
+    .menu.ps.m add command -label "Text" \
+           -command {runTest canvPsText.tcl}
+    .menu.ps.m add command -label "Bitmaps" \
+           -command {runTest canvPsBmap.tcl}
+    .menu.ps.m add command -label "Images" \
+           -command {source canvPsImg.tcl}
+    .menu.ps.m add command -label "Arcs" \
+           -command {runTest canvPsArc.tcl}
+    
+    pack .menu.file .menu.group1 .menu.ps -side left -padx 1m
+    
+    # Set up for keyboard-based menu traversal
+    
+    bind . <Any-FocusIn> {
+       if {("%d" == "NotifyVirtual") && ("%m" == "NotifyNormal")} {
+           focus .menu
+       }
+    }
+    tk_menuBar .menu .menu.file .menu.group1 .menu.ps
+
+    # Set up a class binding to allow objects to be deleted from a canvas
+    # by clicking with mouse button 1:
+
+    bind Canvas <1> {%W delete [%W find closest %x %y]}
+
+    concat ""
+} {}
+
+if {!$::tcltest::testConfig(userInteraction)} {
+    ::tcltest::cleanupTests
+}
diff --git a/tk/tests/winDialog.test b/tk/tests/winDialog.test
new file mode 100644 (file)
index 0000000..4d01ae9
--- /dev/null
@@ -0,0 +1,333 @@
+# This file is a Tcl script to test the Windows specific behavior of
+# the common dialog boxes.  It is organized in the standard
+# fashion for Tcl tests.
+#
+# Copyright (c) 1997 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[info command testwinevent] == ""} {
+    puts "skipping: tests require the testwinevent command"
+    ::tcltest::cleanupTests
+    return
+}
+
+testwinevent debug 1
+
+eval destroy [winfo children .] 
+wm geometry . {}
+raise .
+
+proc start {arg} {
+    set ::tk_dialog 0
+    set ::iter_after 0
+
+    after 1 $arg
+}
+
+proc then {cmd} {
+    set ::command $cmd
+    set ::dialogresult {}
+
+    afterbody
+    vwait ::dialogresult
+    return $::dialogresult
+}
+
+proc afterbody {} {
+    if {$::tk_dialog == 0} {
+       if {[incr ::iter_after] > 30} {
+           set ::dialogresult ">30 iterations waiting on tk_dialog"
+           return
+       }
+       after 100 {afterbody}
+       return
+    }
+    uplevel #0 {set dialogresult [eval $command]}
+}    
+
+proc Click {button} {
+    testwinevent $::tk_dialog $button WM_LBUTTONDOWN 1 0x000a000b
+    testwinevent $::tk_dialog $button WM_LBUTTONUP 0 0x000a000b
+}          
+
+proc GetText {button} {
+    return [testwinevent $::tk_dialog $button WM_GETTEXT]
+}
+
+proc SetText {button text} {
+    return [testwinevent $::tk_dialog $button WM_SETTEXT $text]
+}
+
+test winDialog-1.1 {Tk_ChooseColorObjCmd} {nt} {
+} {}
+
+test winDialog-2.1 {ColorDlgHookProc} {nt} {
+} {}
+
+test winDialog-3.1 {Tk_GetOpenFileObjCmd} {nt} {
+    start {tk_getOpenFile}
+    then {
+       set x [GetText 2]
+       Click 2
+    }
+    set x
+} {Cancel}
+
+test winDialog-4.1 {Tk_GetSaveFileObjCmd} {nt} {
+    start {tk_getSaveFile}
+    then {
+       set x [GetText 2]
+       Click 2
+    }
+    set x
+} {Cancel}
+
+test winDialog-5.1 {GetFileName: no arguments} {nt} {
+    start {tk_getOpenFile -title Open}
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-5.2 {GetFileName: one argument} {nt} {
+    list [catch {tk_getOpenFile -foo} msg] $msg
+} {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -parent, or -title}}
+test winDialog-5.4 {GetFileName: many arguments} {nt} {
+    start {tk_getOpenFile -initialdir c:/ -parent . -title test -initialfile foo}
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-5.5 {GetFileName: Tcl_GetIndexFromObj() != TCL_OK} {nt} {
+    list [catch {tk_getOpenFile -foo bar -abc} msg] $msg
+} {1 {bad option "-foo": must be -defaultextension, -filetypes, -initialdir, -initialfile, -parent, or -title}}
+test winDialog-5.6 {GetFileName: Tcl_GetIndexFromObj() == TCL_OK} {nt} {
+    start {tk_getOpenFile -title bar}
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-5.7 {GetFileName: valid option, but missing value} {nt} {
+    list [catch {tk_getOpenFile -initialdir bar -title} msg] $msg
+} {1 {value for "-title" missing}}
+test winDialog-5.8 {GetFileName: extension begins with .} {nt} {
+#    if (string[0] == '.') {
+#      string++;
+#    }
+
+    start {set x [tk_getSaveFile -defaultextension .foo -title Save]}
+    then {
+       SetText 0x480 bar
+       Click 1
+    }
+    set x
+} [file join [pwd] bar.foo]
+test winDialog-5.9 {GetFileName: extension doesn't begin with .} {nt} {
+    start {set x [tk_getSaveFile -defaultextension foo -title Save]}
+    then {
+       SetText 0x480 bar
+       Click 1
+    }
+    set x
+} [file join [pwd] bar.foo]
+test winDialog-5.10 {GetFileName: file types} {nt} {
+#          case FILE_TYPES: 
+
+    start {tk_getSaveFile -filetypes {{"foo files" .foo FOOF}} -title Foo}
+    then {
+       set x [GetText 0x470]
+       Click cancel
+    }
+    set x
+} {foo files (*.foo)}
+test winDialog-5.11 {GetFileName: file types: MakeFilter() fails} {nt} {
+#              if (MakeFilter(interp, string, &utfFilterString) != TCL_OK) 
+
+    list [catch {tk_getSaveFile -filetypes {{"foo" .foo FOO}}} msg] $msg
+} {1 {bad Macintosh file type "FOO"}}
+test winDialog-5.12 {GetFileName: initial directory} {nt} {
+#          case FILE_INITDIR: 
+
+    start {set x [tk_getSaveFile -initialdir c:/ -initialfile "12x 455" -title Foo]}
+    then {
+       Click 1
+    }
+    set x
+} {C:/12x 455}
+test winDialog-5.13 {GetFileName: initial directory: Tcl_TranslateFilename()} \
+       {nt} {
+#              if (Tcl_TranslateFileName(interp, string, &ds) == NULL) 
+    
+    list [catch {tk_getOpenFile -initialdir ~12x/455} msg] $msg
+} {1 {user "12x" doesn't exist}}
+test winDialog-5.14 {GetFileName: initial file} {nt} {
+#          case FILE_INITFILE: 
+
+    start {set x [tk_getSaveFile -initialfile "12x 456" -title Foo]}
+    then {
+       Click 1
+    }
+    set x
+} [file join [pwd] "12x 456"]
+test winDialog-5.15 {GetFileName: initial file: Tcl_TranslateFileName()} {nt} {
+#              if (Tcl_TranslateFileName(interp, string, &ds) == NULL) 
+    list [catch {tk_getOpenFile -initialfile ~12x/455} msg] $msg
+} {1 {user "12x" doesn't exist}}
+set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+append a $a
+append a $a
+append a $a
+append a $a
+test winDialog-5.16 {GetFileName: initial file: long name} {nt} {
+    start {set x [tk_getSaveFile -initialfile $a -title Long]}
+    then {
+       Click 1
+    }
+    set x
+} [string range [file join [pwd] $a] 0 257]
+test winDialog-5.17 {GetFileName: parent} {nt} {
+#          case FILE_PARENT: 
+
+    toplevel .t
+    set x 0
+    start {tk_getOpenFile -parent .t -title Parent; set x 1}
+    then {
+       destroy .t
+    }
+    set x
+} {1}
+test winDialog-5.18 {GetFileName: title} {nt} {
+#          case FILE_TITLE: 
+    
+    start {tk_getOpenFile -title Narf}
+    then {
+       Click 2
+    }
+} {0}
+test winDialog-5.19 {GetFileName: no filter specified} {nt} {
+#    if (ofn.lpstrFilter == NULL) 
+
+    start {tk_getOpenFile -title Filter} 
+    then {
+       set x [GetText 0x470]
+       Click 2
+    }
+    set x
+} {All Files (*.*)}
+test winDialog-5.20 {GetFileName: parent HWND doesn't yet exist} {nt} {
+#    if (Tk_WindowId(parent) == None) 
+
+    toplevel .t
+    start {tk_getOpenFile -parent .t -title Open}
+    then {
+       destroy .t
+    }
+} {}
+test winDialog-5.21 {GetFileName: parent HWND already exists} {nt} {
+    toplevel .t
+    update
+    start {tk_getOpenFile -parent .t -title Open}
+    then {
+       destroy .t
+    }
+} {}
+test winDialog-5.22 {GetFileName: call GetOpenFileName} {nt} {
+#          winCode = GetOpenFileName(&ofn);
+    
+    start {tk_getOpenFile -title Open}
+    then {
+       set x [GetText 1]
+       Click 2
+    }
+    set x
+} {&Open}
+test winDialog-5.23 {GetFileName: call GetSaveFileName} {nt} {
+#          winCode = GetSaveFileName(&ofn);
+
+    start {tk_getSaveFile -title Save}
+    then {
+       set x [GetText 1]
+       Click 2
+    }
+    set x
+} {&Save}
+test winDialog-5.24 {GetFileName: convert \ to /} {nt} {
+    start {set x [tk_getSaveFile -title Back]}
+    then {
+       SetText 0x480 "c:\\12x 457"
+       Click 1
+    }
+    set x
+} {c:/12x 457}
+
+test winDialog-6.1 {MakeFilter} {emptyTest nt} {} {}
+
+test winDialog-7.1 {Tk_MessageBoxObjCmd} {emptyTest nt} {} {}
+
+test winDialog-8.1 {OFNHookProc} {emptyTest nt} {} {}
+
+## The Tk_ChooseDirectoryObjCmd hang on the static build of Windows
+## because somehow the GetOpenFileName ends up a noop in the static
+## build.
+##
+test winDialog-9.1 {Tk_ChooseDirectoryObjCmd: no arguments} {nt} {
+    start {tk_chooseDirectory}
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-9.2 {Tk_ChooseDirectoryObjCmd: one argument} {nt} {
+    list [catch {tk_chooseDirectory -foo} msg] $msg
+} {1 {bad option "-foo": must be -initialdir, -mustexist, -parent, or -title}}
+test winDialog-9.3 {Tk_ChooseDirectoryObjCmd: many arguments} {nt} {
+    start {
+       tk_chooseDirectory -initialdir c:/ -mustexist 1 -parent . -title test
+    }
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-9.4 {Tk_ChooseDirectoryObjCmd:\
+       Tcl_GetIndexFromObj() != TCL_OK} {nt} {
+    list [catch {tk_chooseDirectory -foo bar -abc} msg] $msg
+} {1 {bad option "-foo": must be -initialdir, -mustexist, -parent, or -title}}
+test winDialog-9.5 {Tk_ChooseDirectoryObjCmd:\
+       Tcl_GetIndexFromObj() == TCL_OK} {nt} {
+    start {tk_chooseDirectory -title bar}
+    then {
+       Click cancel
+    }
+} {0}
+test winDialog-9.6 {Tk_ChooseDirectoryObjCmd:\
+       valid option, but missing value} {nt} {
+    list [catch {tk_chooseDirectory -initialdir bar -title} msg] $msg
+} {1 {value for "-title" missing}}
+test winDialog-9.7 {Tk_ChooseDirectoryObjCmd: -initialdir} {nt} {
+#          case DIR_INITIAL: 
+
+    start {set x [tk_chooseDirectory -initialdir c:/ -title Foo]}
+    then {
+       Click 1
+    }
+    string tolower [set x]
+} {c:/}
+test winDialog-9.8 {Tk_ChooseDirectoryObjCmd:\
+       initial directory: Tcl_TranslateFilename()} {nt} {
+#              if (Tcl_TranslateFileName(interp, string, 
+#                      &utfDirString) == NULL) 
+    
+    list [catch {tk_chooseDirectory -initialdir ~12x/455} msg] $msg
+} {1 {user "12x" doesn't exist}}
+
+testwinevent debug 0
+
+# cleanup
+::tcltest::cleanupTests
+return
+
diff --git a/tk/tests/winSend.test b/tk/tests/winSend.test
new file mode 100644 (file)
index 0000000..54cec4c
--- /dev/null
@@ -0,0 +1,428 @@
+# This file is a Tcl script to test out the "send" command and the
+# other procedures in the file tkSend.c.  It is organized in the
+# standard fashion for Tcl tests.
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {$tcl_platform(platform) != "windows"} {
+    puts "skipping: Windows only tests..."
+    ::tcltest::cleanupTests
+    return
+}
+
+if {[info commands send] != "send"} {
+    puts "skipping: Unimplemented send command"
+    ::tcltest::cleanupTests
+    return
+}
+
+foreach i [winfo children .] {
+    destroy $i
+}
+wm geometry . {}
+raise .
+
+set currentInterps [winfo interps]
+
+if {[catch {exec tktest &}] == 1} {
+    puts "Could not run winSend.test because another instance of tktest could not be loaded."
+    ::tcltest::cleanupTests
+    return;
+}
+
+# Compute a script that will load Tk into a child interpreter.
+
+foreach pkg [info loaded] {
+    if {[lindex $pkg 1] == "Tk"} {
+       set loadTk "load $pkg"
+       break
+    }
+}
+
+# Procedure to create a new application with a given name and class.
+
+proc newApp {name {safe {}}} {
+    global loadTk
+    if {[string compare $safe "-safe"] == 0} {
+       interp create -safe $name
+    } else {
+       interp create $name
+    }
+    $name eval [list set argv [list -name $name]]
+    catch {eval $loadTk $name}
+}
+
+# Wait until the child application has launched.
+
+while {[llength [winfo interps]] == [llength $currentInterps]} {
+}
+
+# Now find an interp to send to
+set newInterps [winfo interps]
+foreach interp $newInterps {
+    if {[lsearch -exact $currentInterps $interp] < 0} {
+       break
+    }
+}
+
+# Now we have found our interpreter we are going to send to. Make sure that
+# it works first.
+if {[catch {send $interp {console hide; update}}] == 1} {
+    puts "Could not send to child interpreter $interp"
+    ::tcltest::cleanupTests
+   return
+}
+
+# setting up dde server is done when the first interp is created and
+# cannot be tested very easily.
+test winSend-1.1 {Tk_SetAppName - changing name of interp} {
+    newApp testApp
+    list [testApp eval tk appname testApp2] [interp delete testApp]
+} {testApp2 {}}
+test winSend-1.2 {Tk_SetAppName - changing name - not front of linked list} {
+    newApp testApp
+    newApp testApp2
+    list [testApp eval tk appname testApp3] [interp delete testApp] [interp delete testApp2]
+} {testApp3 {} {}}
+test winSend-1.3 {Tk_SetAppName - unique name - no conflicts} {
+    newApp testApp
+    list [testApp eval tk appname testApp] [interp delete testApp]
+} {testApp {}}
+test winSend-1.4 {Tk_SetAppName - unique name - one conflict} {
+    newApp testApp
+    newApp foobar
+    list [foobar eval tk appname testApp] [interp delete foobar] [interp delete testApp]
+} {{testApp #2} {} {}}
+test winSend-1.5 {Tk_SetAppName - unique name - one conflict} {
+    newApp testApp
+    newApp foobar
+    newApp blaz
+    foobar eval tk appname testApp
+    list [blaz eval tk appname testApp] [interp delete foobar] [interp delete testApp] [interp delete blaz]
+} {{testApp #3} {} {} {}}
+test winSend-1.6 {Tk_SetAppName - safe interps} {
+    newApp testApp -safe
+    list [catch {testApp eval send testApp {set foo a}} msg] $msg [interp delete testApp]
+} {1 {invalid command name "send"} {}}
+
+test winSend-2.1 {Tk_SendObjCmd - # of args} {
+    list [catch {send tktest} msg] $msg
+} {1 {wrong # args: should be "send ?options? interpName arg ?arg ...?"}}
+test winSend-2.1 {Tk_SendObjCmd: arguments} {
+    list [catch {send -bogus tktest} msg] $msg
+} {1 {bad option "-bogus": must be -async, -displayof, or --}}
+test winSend-2.1 {Tk_SendObjCmd: arguments} {
+    list [catch {send -async bogus foo} msg] $msg
+} {1 {no registered server named "bogus"}}
+test winSend-2.1 {Tk_SendObjCmd: arguments} {
+    list [catch {send -displayof . bogus foo} msg] $msg
+} {1 {no registered server named "bogus"}}
+test winSend-2.1 {Tk_SendObjCmd: arguments} {
+    list [catch {send -- -bogus foo} msg] $msg
+} {1 {no registered server named "-bogus"}}
+test winSend-2.2 {Tk_SendObjCmd - sending to ourselves} {
+    list [send [tk appname] {set foo a}]
+} {a}
+test winSend-2.3 {Tk_SendObjCmd - sending to ourselves in a different interpreter} {
+    newApp testApp
+    list [catch {send testApp {set foo b}} msg] $msg [interp delete testApp]
+} {0 b {}}
+test winSend-2.4 {Tk_SendObjCmd - sending to ourselves in a different interp with errors} {
+    newApp testApp
+    list [catch {send testApp {expr 2 / 0}} msg] $msg $errorCode $errorInfo [interp delete testApp]
+} "1 {divide by zero} {ARITH DIVZERO {divide by zero}} {divide by zero\n    while executing\n\"expr 2 / 0\"\n    invoked from within\n\"send testApp {expr 2 / 0}\"} {}"
+test winSend-2.5 {Tk_SendObjCmd - sending to another app async} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {send -async $interp {set foo a}} msg] $msg
+} {0 {}}
+test winSend-2.6 {Tk_SendObjCmd - sending to another app sync - no error} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {send $interp {set foo a}} msg] $msg
+} {0 a}
+test winSend-2.7 {Tk_SendObjCmd - sending to another app - error} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {send $interp {expr 2 / 0}} msg] $msg $errorCode $errorInfo
+} "1 {divide by zero} {ARITH DIVZERO {divide by zero}} {divide by zero\n    while executing\n\"expr 2 / 0\"\n    invoked from within\n\"send \$interp {expr 2 / 0}\"}"
+
+test winSend-3.1 {TkGetInterpNames} {
+    set origLength [llength $currentInterps]
+    set newLength [llength [winfo interps]]
+    expr {($newLength - 2) == $origLength}
+} {1}
+
+test winSend-4.1 {DeleteProc - changing name of app} {
+    newApp a
+    list [a eval tk appname foo] [interp delete a]
+} {foo {}}
+test winSend-4.2 {DeleteProc - normal} {
+    newApp a
+    list [interp delete a]
+} {{}}
+
+test winSend-5.1 {ExecuteRemoteObject - no error} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [send $interp {send [tk appname] {expr 2 / 1}}]
+} {2}
+test winSend-5.2 {ExecuteRemoteObject - error} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {send $interp {send [tk appname] {expr 2 / 0}}} msg] $msg
+} {1 {divide by zero}}
+
+test winSend-6.1 {SendDDEServer - XTYP_CONNECT} {
+    set foo "Hello, World"
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde request Tk [tk appname] foo"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 {Hello, World}}
+test winSend-6.2 {SendDDEServer - XTYP_CONNECT_CONFIRM} {
+    set foo "Hello, World"
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde request Tk [tk appname] foo"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 {Hello, World}}
+test winSend-6.3 {SendDDEServer - XTYP_DISCONNECT} {
+    set foo "Hello, World"
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde request Tk [tk appname] foo"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 {Hello, World}}
+test winSend-6.4 {SendDDEServer - XTYP_REQUEST variable} {
+    set foo "Hello, World"
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde request Tk [tk appname] foo"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 {Hello, World}}
+test winSend-6.5 {SendDDEServer - XTYP_REQUEST array} {
+    catch {unset foo}
+    set foo(test) "Hello, World"
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde request Tk [tk appname] foo(test)"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg [catch {unset foo}]
+} {0 {Hello, World} 0}
+test winSend-6.6 {SendDDEServer - XTYP_REQUEST return results} {
+    set foo 3
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "send [tk appname] {expr $foo + 1}"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 4}
+test winSend-6.7 {SendDDEServer - XTYP_EXECUTE} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "send [tk appname] {expr 4 / 2}"
+    list [catch "send \{$interp\} \{$command\}" msg] $msg
+} {0 2}
+test winSend-6.8 {SendDDEServer - XTYP_WILDCONNECT} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    set command "dde services Tk {}"
+    list [catch "send \{$interp\} \{$command\}"]
+} {0}
+
+test winSend-7.1 {DDEExitProc} {
+    newApp testApp
+    list [interp delete testApp]
+} {{}}
+
+test winSend-8.1 {SendDdeConnect} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [send $interp {set tk foo}]
+} {foo}
+
+test winSend-9.1 {SetDDEError} {
+    list [catch {dde execute Tk foo {set foo hello}} msg] $msg
+} {1 {dde command failed}}
+
+test winSend-10.1 {Tk_DDEObjCmd - wrong num args} {
+    list [catch {dde} msg] $msg
+} {1 {wrong # args: should be "dde ?-async? serviceName topicName value"}}
+test winSend-10.2 {Tk_DDEObjCmd - unknown subcommand} {
+    list [catch {dde foo} msg] $msg
+} {1 {bad command "foo": must be execute, request, or services}}
+test winSend-10.3 {Tk_DDEObjCmd - execute - wrong num args} {
+    list [catch {dde execute} msg] $msg
+} {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
+test winSend-10.4 {Tk_DDEObjCmd - execute - wrong num args} {
+    list [catch {dde execute 3 4 5 6 7} msg] $msg
+} {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
+test winSend-10.5 {Tk_DDEObjCmd - execute async - wrong num args} {
+    list [catch {dde execute -async} msg] $msg
+} {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
+test winSend-10.6 {Tk_DDEObjCmd - request - wrong num args} {
+    list [catch {dde request} msg] $msg
+} {1 {wrong # args: should be "dde request serviceName topicName value"}}
+test winSend-10.7 {Tk_DDEObjCmd - services wrong num args} {
+    list [catch {dde services} msg] $msg
+} {1 {wrong # args: should be "dde services serviceName topicName"}}
+test winSend-10.8 {Tk_DDEObjCmd - null service name} {
+    list [catch {dde services {} {tktest #2}}]
+} {0}
+test winSend-10.9 {Tk_DDEObjCmd - null topic name} {
+    list [catch {dde services {Tk} {}}]
+} {0}
+test winSend-10.10 {Tk_DDEObjCmd - execute - nothing to execute} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {dde execute Tk $interp {}} msg] $msg
+} {1 {cannot execute null data}}
+test winSend-10.11 {Tk_DDEObjCmd - execute - no such conversation} {
+    list [catch {dde execute Tk foo {set foo hello}} msg] $msg
+} {1 {dde command failed}}
+test winSend-10.12 {Tk_DDEObjCmd - execute - async} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {dde execute -async Tk $interp {set foo hello}} msg] $msg
+} {0 {}}
+test winSend-10.13 {Tk_DDEObjCmd - execute} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {dde execute Tk $interp {set foo goodbye}} msg] $msg
+} {0 {}}
+test winSend-10.14 {Tk_DDEObjCmd - request - nothing to request} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {dde request Tk $interp {}} msg] $msg
+} {1 {cannot request value of null data}}
+test winSend-10.15 {Tk_DDEObjCmd - request - invalid interp} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    list [catch {dde request Tk foo foo} msg] $msg
+} {1 {dde command failed}}
+test winSend-10.16 {Tk_DDEObjCmd - invalid variable} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    send $interp {unset foo}
+    list [catch {dde request Tk $interp foo} msg] $msg
+} {1 {remote server cannot handle this command}}
+test winSend-10.17 {Tk_DDEObjCmd - valid variable} {
+    set newInterps [winfo interps]
+    foreach interp $newInterps {
+       if {[lsearch $currentInterps $interp] < 0} {
+           break
+       }
+    }
+    send $interp {set foo winSend-10.17}
+    list [catch {dde request Tk $interp foo} msg] $msg
+} {0 winSend-10.17}
+test winSend-10.18 {Tk_DDEObjCmd - services} {
+    set currentService [list Tk [tk appname]]
+    list [catch {dde services Tk {}} msg] [expr [lsearch $msg $currentService] >= 0]
+} {0 1}
+
+# Get rid of the other app and all of its interps
+
+set newInterps [winfo interps]
+while {[llength $newInterps] != [llength $currentInterps]} {
+    foreach interp $newInterps {
+       if {[lsearch -exact $currentInterps $interp] < 0} {
+           catch {send $interp exit}
+           set newInterps [winfo interps]
+           break
+       }
+    }
+}
+
+# cleanup
+::tcltest::cleanupTests
+return
+
diff --git a/tk/tests/wm.test b/tk/tests/wm.test
new file mode 100644 (file)
index 0000000..e696354
--- /dev/null
@@ -0,0 +1,674 @@
+# This file is a Tcl script to test out Tk's interactions with
+# the window manager, including the "wm" command.  It is organized
+# in the standard fashion for Tcl tests.
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994-1995 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# SCCS: @(#) wm.test 1.31 96/03/01 11:36:58
+
+if {[string compare test [info procs test]] == 1} {
+    source defs
+}
+
+proc sleep ms {
+    global x
+    after $ms {set x 1}
+    tkwait variable x
+}
+
+set i 1
+foreach geom {+20+80 +80+20 +0+0} {
+    catch {destroy .t}
+    test wm-1.$i {initial window position} {
+       toplevel .t -width 200 -height 150
+       wm geom .t $geom
+       update
+       wm geom .t
+    } 200x150$geom
+    incr i
+}
+
+# The tests below are tricky because window managers don't all move
+# windows correctly.  Try one motion and compute the window manager's
+# error, then factor this error into the actual tests.  In other words,
+# this just makes sure that things are consistent between moves.
+
+set i 1
+catch {destroy .t}
+toplevel .t -width 100 -height 150
+wm geom .t +200+200
+update
+wm geom .t +150+150
+update
+scan [wm geom .t] %dx%d+%d+%d width height x y
+set xerr [expr 150-$x]
+set yerr [expr 150-$y]
+foreach geom {+20+80 +80+20 +0+0 -0-0 +0-0 -0+0 -10-5 -10+5 +10-5} {
+    test wm-2.$i {moving window while mapped} {
+       wm geom .t $geom
+       update
+       scan [wm geom .t] %dx%d%1s%d%1s%d width height xsign x ysign y
+       format "%s%d%s%d" $xsign [expr $x$xsign$xerr] $ysign \
+               [expr $y$ysign$yerr]
+    } $geom
+    incr i
+}
+
+set i 1
+foreach geom {+20+80 +80+20 +0+0 -0-0 +0-0 -0+0 -10-5 -10+5 +10-5} {
+    test wm-3.$i {moving window while iconified} {
+       wm iconify .t
+       sleep 200
+       wm geom .t $geom
+       update
+       wm deiconify .t
+       scan [wm geom .t] %dx%d%1s%d%1s%d width height xsign x ysign y
+       format "%s%d%s%d" $xsign [expr $x$xsign$xerr] $ysign \
+               [expr $y$ysign$yerr]
+    } $geom
+    incr i
+}
+
+set i 1
+foreach geom {+20+80 +100+40 +0+0} {
+    test wm-4.$i {moving window while withdrawn} {
+       wm withdraw .t
+       sleep 200
+       wm geom .t $geom
+       update
+       wm deiconify .t
+       wm geom .t
+    } 100x150$geom
+    incr i
+}
+
+test wm-5.1 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm withdraw .t
+    wm deiconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {1 normal}
+test wm-5.2 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm withdraw .t
+    wm deiconify .t
+    wm withdraw .t
+    list [winfo ismapped .t] [wm state .t]
+} {0 withdrawn}
+test wm-5.3 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm iconify .t
+    wm deiconify .t
+    wm iconify .t
+    wm deiconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {1 normal}
+test wm-5.4 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm iconify .t
+    wm deiconify .t
+    wm iconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {0 iconic}
+test wm-5.5 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm iconify .t
+    wm withdraw .t
+    list [winfo ismapped .t] [wm state .t]
+} {0 withdrawn}
+test wm-5.6 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm iconify .t
+    wm withdraw .t
+    wm deiconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {1 normal}
+test wm-5.7 {compounded state changes} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 100
+    wm geometry .t +100+100
+    update
+    wm withdraw .t
+    wm iconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {0 iconic}
+
+catch {destroy .t}
+toplevel .t -width 200 -height 100
+wm geom .t +10+10
+wm minsize .t 1 1
+update
+test wm-6.1 {size changes} {
+    .t config -width 180 -height 150
+    update
+    wm geom .t
+} 180x150+10+10
+test wm-6.2 {size changes} {
+    wm geom .t 250x60
+    .t config -width 170 -height 140
+    update
+    wm geom .t
+} 250x60+10+10
+test wm-6.3 {size changes} {
+    wm geom .t 250x60
+    .t config -width 170 -height 140
+    wm geom .t {}
+    update
+    wm geom .t
+} 170x140+10+10
+test wm-6.4 {size changes} {nonPortable} {
+    wm minsize .t 1 1
+    update
+    puts stdout "Please resize window \"t\" with the mouse (but don't move it!),"
+    puts -nonewline stdout "then hit return: "
+    flush stdout
+    gets stdin
+    update
+    set width [winfo width .t]
+    set height [winfo height .t]
+    .t config -width 230 -height 110
+    update
+    incr width -[winfo width .t]
+    incr height -[winfo height .t]
+    wm geom .t {}
+    update
+    set w2 [winfo width .t]
+    set h2 [winfo height .t]
+    .t config -width 114 -height 261
+    update
+    list $width $height $w2 $h2 [wm geom .t]
+} {0 0 230 110 114x261+10+10}
+
+test wm-7.1 {window initially withdrawn} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    wm withdraw .t
+    sleep 200
+    set result [winfo ismapped .t]
+    wm deiconify .t
+    list $result [winfo ismapped .t]
+} {0 1}
+test wm-7.2 {window initially withdrawn} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    wm withdraw .t
+    wm deiconify .t
+    sleep 200
+    winfo ismapped .t
+} 1
+
+test wm-8.1 {window initially iconic} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    wm title .t 1
+    wm iconify .t
+    update idletasks
+    list [winfo ismapped .t] [wm state .t]
+} {0 iconic}
+
+# I don't know why the wait below is needed, but without it the test
+# fails under twm.
+sleep 200
+
+test wm-8.2 {window initially iconic} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    wm title .t 2
+    wm iconify .t
+    update idletasks
+    wm withdraw .t
+    wm deiconify .t
+    list [winfo ismapped .t] [wm state .t]
+} {1 normal}
+
+catch {destroy .m}
+menu .m
+foreach i {{Test label} Another {Yet another} {Last label}} {
+    .m add command -label $i
+}
+.m post 100 200
+test wm-9.1 {override_redirect and Tk_MoveTopLevelWindow} {
+    list [winfo ismapped .m] [wm state .m] [winfo x .m] [winfo y .m]
+} {1 normal 100 200}
+.m post 150 210
+test wm-9.2 {override_redirect and Tk_MoveTopLevelWindow} {
+    list [winfo ismapped .m] [wm state .m] [winfo x .m] [winfo y .m]
+} {1 normal 150 210}
+.m unpost
+test wm-9.3 {override_redirect and Tk_MoveTopLevelWindow} {
+    list [winfo ismapped .m]
+} 0
+destroy .m
+catch {destroy .t}
+
+test wm-10.1 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    toplevel .icon -width 50 -height 50 -bg red
+    wm iconwindow .t .icon
+    list [catch {wm iconify .icon} msg] $msg
+} {1 {can't iconify .icon: it is an icon for .icon}}
+test wm-10.2 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    toplevel .icon -width 50 -height 50 -bg red
+    wm iconwindow .t .icon
+    list [catch {wm deiconify .icon} msg] $msg
+} {1 {can't deiconify .icon: it is an icon for .icon}}
+test wm-10.3 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    wm geometry .t +0+0
+    toplevel .icon -width 50 -height 50 -bg red
+    wm iconwindow .t .icon
+    list [catch {wm withdraw .icon} msg] $msg
+} {1 {can't withdraw .icon: it is an icon for .t}}
+test wm-10.4 {icon windows} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    list [catch {wm iconwindow} msg] $msg
+} {1 {wrong # args: should be "wm option window ?arg ...?"}}
+test wm-10.5 {icon windows} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    list [catch {wm iconwindow .t b c} msg] $msg
+} {1 {wrong # arguments: must be "wm iconwindow window ?pathName?"}}
+test wm-10.6 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    wm geom .t +0+0
+    set result [wm iconwindow .t]
+    toplevel .icon -width 50 -height 50 -bg red
+    wm iconwindow .t .icon
+    lappend result [wm iconwindow .t] [wm state .icon]
+    wm iconwindow .t {}
+    lappend result [wm iconwindow .t] [wm state .icon]
+    update
+    lappend result [winfo ismapped .t] [winfo ismapped .icon]
+    wm iconify .t
+    update
+    lappend result [winfo ismapped .t] [winfo ismapped .icon]
+} {.icon icon {} withdrawn 1 0 0 0}
+test wm-10.7 {icon windows} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    list [catch {wm iconwindow .t .gorp} msg] $msg
+} {1 {bad window path name ".gorp"}}
+test wm-10.8 {icon windows} {
+    catch {destroy .t}
+    toplevel .t -width 100 -height 30
+    frame .t.icon -width 50 -height 50 -bg red
+    list [catch {wm iconwindow .t .t.icon} msg] $msg
+} {1 {can't use .t.icon as icon window: not at top level}}
+test wm-10.9 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    wm geom .t +0+0
+    toplevel .icon -width 50 -height 50 -bg red
+    toplevel .icon2 -width 50 -height 50 -bg green
+    wm iconwindow .t .icon
+    set result "[wm iconwindow .t] [wm state .icon] [wm state .icon2]"
+    wm iconwindow .t .icon2
+    lappend result [wm iconwindow .t] [wm state .icon] [wm state .icon2]
+} {.icon icon normal .icon2 withdrawn icon}
+catch {destroy .icon2}
+test wm-10.10 {icon windows} {
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .icon -width 50 -height 50 -bg red
+    wm geom .icon +0+0
+    update
+    set result [winfo ismapped .icon]
+    toplevel .t -width 100 -height 30
+    wm geom .t +0+0
+    wm iconwindow .t .icon
+    after 500 {set x 1}
+    tkwait variable x
+    lappend result [winfo ismapped .t] [winfo ismapped .icon]
+} {1 1 0}
+test wm-10.11 {icon windows} {nonPortable} {
+    # This test is non-portable because some window managers will
+    # destroy an icon window when it's associated window is destroyed.
+
+    catch {destroy .t}
+    catch {destroy .icon}
+    toplevel .t -width 100 -height 30
+    toplevel .icon -width 50 -height 50 -bg red
+    wm geom .t +0+0
+    wm iconwindow .t .icon
+    update
+    set result "[wm state .icon] [winfo ismapped .t] [winfo ismapped .icon]"
+    destroy .t
+    wm geom .icon +0+0
+    update
+    lappend result [winfo ismapped .icon] [wm state .icon]
+    wm deiconify .icon
+    update
+    lappend result [winfo ismapped .icon] [wm state .icon]
+} {icon 1 0 0 withdrawn 1 normal}
+
+test wm-11.1 {colormapwindows} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200 -colormap new
+    wm geom .t +0+0
+    frame .t.a -width 100 -height 30
+    frame .t.b -width 100 -height 30 -colormap new
+    pack .t.a .t.b -side top
+    update
+    set x [wm colormapwindows .t]
+    frame .t.c -width 100 -height 30 -colormap new
+    pack .t.c -side top
+    update
+    list $x [wm colormapwindows .t]
+} {{.t.b .t} {.t.b .t.c .t}}
+test wm-11.2 {colormapwindows} {
+    list [catch {wm colormapwindows . 1 2} msg] $msg
+} {1 {wrong # arguments: must be "wm colormapwindows window ?windowList?"}}
+test wm-11.3 {colormapwindows} {
+    list [catch {wm col . "a \{"} msg] $msg
+} {1 {unmatched open brace in list}}
+test wm-11.4 {colormapwindows} {
+    list [catch {wm colormapwindows . foo} msg] $msg
+} {1 {bad window path name "foo"}}
+test wm-11.5 {colormapwindows} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200 -colormap new
+    wm geom .t +0+0
+    frame .t.a -width 100 -height 30
+    frame .t.b -width 100 -height 30
+    frame .t.c -width 100 -height 30
+    pack .t.a .t.b .t.c -side top
+    wm colormapwindows .t {.t.c .t .t.a}
+    wm colormapwindows .t
+} {.t.c .t .t.a}
+test wm-11.6 {colormapwindows} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200
+    wm geom .t +0+0
+    frame .t.a -width 100 -height 30
+    frame .t.b -width 100 -height 30
+    frame .t.c -width 100 -height 30
+    pack .t.a .t.b .t.c -side top
+    wm colormapwindows .t {.t.b .t.a}
+    wm colormapwindows .t
+} {.t.b .t.a}
+test wm-11.7 {colormapwindows} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200 -colormap new
+    wm geom .t +0+0
+    set x [wm colormapwindows .t]
+    wm colormapwindows .t {}
+    list $x [wm colormapwindows .t]
+} {{} {}}
+
+catch {destroy .t}
+catch {destroy .icon}
+
+toplevel .t -width 100 -height 50
+wm geom .t +0+0
+update
+test wm-12.1 {Tk_WmCmd procedure, "maxsize" option} {
+    list [catch {wm maxsize} msg]  $msg
+} {1 {wrong # args: should be "wm option window ?arg ...?"}}
+test wm-12.2 {Tk_WmCmd procedure, "maxsize" option} {
+    list [catch {wm maxsize . a} msg]  $msg
+} {1 {wrong # arguments: must be "wm maxsize window ?width height?"}}
+test wm-12.3 {Tk_WmCmd procedure, "maxsize" option} {
+    list [catch {wm maxsize . a b c} msg]  $msg
+} {1 {wrong # arguments: must be "wm maxsize window ?width height?"}}
+test wm-12.4 {Tk_WmCmd procedure, "maxsize" option} {nonPortable} {
+    wm maxsize .t
+}  {1137 870}
+test wm-12.5 {Tk_WmCmd procedure, "maxsize" option} {
+    list [catch {wm maxsize . x 100} msg]  $msg
+} {1 {expected integer but got "x"}}
+test wm-12.6 {Tk_WmCmd procedure, "maxsize" option} {
+    list [catch {wm maxsize . 100 bogus} msg]  $msg
+} {1 {expected integer but got "bogus"}}
+test wm-12.7 {Tk_WmCmd procedure, "maxsize" option} {
+    wm maxsize .t 200 150
+    wm maxsize .t
+} {200 150}
+test wm-12.8 {Tk_WmCmd procedure, "maxsize" option} {nonPortable} {
+    # Not portable, because some window managers let applications override
+    # minsize and maxsize.
+
+    wm maxsize .t 200 150
+    wm geom .t 300x200
+    update
+    list [winfo width .t] [winfo height .t]
+} {200 150}
+destroy .t
+
+toplevel .t -width 300 -height 200
+wm geom .t +0+0
+update
+test wm-13.1 {Tk_WmCmd procedure, "minsize" option} {
+    list [catch {wm minsize} msg]  $msg
+} {1 {wrong # args: should be "wm option window ?arg ...?"}}
+test wm-13.2 {Tk_WmCmd procedure, "minsize" option} {
+    list [catch {wm minsize . a} msg]  $msg
+} {1 {wrong # arguments: must be "wm minsize window ?width height?"}}
+test wm-13.3 {Tk_WmCmd procedure, "minsize" option} {
+    list [catch {wm minsize . a b c} msg]  $msg
+} {1 {wrong # arguments: must be "wm minsize window ?width height?"}}
+test wm-13.4 {Tk_WmCmd procedure, "minsize" option} {
+    wm minsize .t
+}  {1 1}
+test wm-13.5 {Tk_WmCmd procedure, "minsize" option} {
+    list [catch {wm minsize . x 100} msg]  $msg
+} {1 {expected integer but got "x"}}
+test wm-13.6 {Tk_WmCmd procedure, "minsize" option} {
+    list [catch {wm minsize . 100 bogus} msg]  $msg
+} {1 {expected integer but got "bogus"}}
+test wm-13.7 {Tk_WmCmd procedure, "minsize" option} {
+    wm minsize .t 200 150
+    wm minsize .t
+} {200 150}
+test wm-13.8 {Tk_WmCmd procedure, "minsize" option} {nonPortable} {
+    # Not portable, because some window managers let applications override
+    # minsize and maxsize.
+
+    wm minsize .t 150 100
+    wm geom .t 50x50
+    update
+    list [winfo width .t] [winfo height .t]
+} {150 100}
+test wm-13.9 {Tk_WmCmd procedure, "resizable" option} {
+    list [catch {wm resizable . a} msg]  $msg
+} {1 {wrong # arguments: must be "wm resizable window ?width height?"}}
+test wm-13.10 {Tk_WmCmd procedure, "resizable" option} {
+    list [catch {wm resizable . a b c} msg]  $msg
+} {1 {wrong # arguments: must be "wm resizable window ?width height?"}}
+test wm-13.11 {Tk_WmCmd procedure, "resizable" option} {
+    list [catch {wm resizable .foo a b c} msg]  $msg
+} {1 {bad window path name ".foo"}}
+test wm-13.12 {Tk_WmCmd procedure, "resizable" option} {
+    list [catch {wm resizable . x 1} msg]  $msg
+} {1 {expected boolean value but got "x"}}
+test wm-13.13 {Tk_WmCmd procedure, "resizable" option} {
+    list [catch {wm resizable . 0 gorp} msg]  $msg
+} {1 {expected boolean value but got "gorp"}}
+test wm-13.14 {Tk_WmCmd procedure, "resizable" option} {
+    catch {destroy .t2}
+    toplevel .t2 -width 200 -height 100
+    wm geom .t2 +0+0
+    set result ""
+    lappend result [wm resizable .t2]
+    wm resizable .t2 1 0
+    lappend result [wm resizable .t2]
+    wm resizable .t2 no off
+    lappend result [wm resizable .t2]
+    wm resizable .t2 false true
+    lappend result [wm resizable .t2]
+} {{1 1} {1 0} {0 0} {0 1}}
+destroy .t2
+
+test wm-14.1 {TopLevelReqProc procedure, resize causes window to move} \
+       {nonPortable} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200
+    wm geom .t +0+0
+    update
+    wm geom .t -0-0
+    update
+    set x [winfo x .t]
+    set y [winfo y .t]
+    .t configure -width 300 -height 150
+    update
+    list [expr [winfo x .t] - $x] [expr [winfo y .t] - $y] \
+           [winfo width .t] [winfo height .t]
+} {-100 50 300 150}
+
+test wm-15.1 {Tk_SetGrid procedure, set grid dimensions before turning on grid} {nonPortable} {
+    catch {destroy .t}
+    toplevel .t
+    wm geometry .t 30x10+0+0
+    listbox .t.l -height 20 -width 20 -setgrid 1 
+    pack .t.l -fill both -expand 1
+    update
+    wm geometry .t
+} {30x10+0+0}
+test wm-15.2 {Tk_SetGrid procedure, turning on grid when dimensions already set} {
+    catch {destroy .t}
+    toplevel .t
+    wm geometry .t 200x100+0+0
+    listbox .t.l -height 20 -width 20 
+    pack .t.l -fill both -expand 1
+    update
+    .t.l configure -setgrid 1
+    update
+    wm geometry .t
+} {20x20+0+0}
+
+test wm-16.1 {WaitForEvent procedure, use of modal timeout} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200
+    wm geom .t +0+0
+    update
+    wm iconify .t
+    set x no
+    after 0 {set x yes}
+    wm deiconify .t
+    set result $x
+    update
+    list $result $x
+} {no yes}
+
+test wm-17.1 {ParseGeometry procedure, resize causes window to move} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200
+    wm geom .t +0+0
+    update
+    wm geom .t -0-0
+    update
+    set x [winfo x .t]
+    set y [winfo y .t]
+    wm geometry .t 150x300
+    update
+    list [expr [winfo x .t] - $x] [expr [winfo y .t] - $y] \
+           [winfo width .t] [winfo height .t]
+} {50 -100 150 300}
+
+test wm-18.1 {TkWmAddToColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -width 200 -height 200 -colormap new -relief raised -bd 2
+    wm geom .t +0+0
+    update
+    wm colormap .t
+} {}
+test wm-18.2 {TkWmAddToColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -colormap new -relief raised -bd 2
+    wm geom .t +0+0
+    frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f
+    update
+    wm colormap .t
+} {.t.f .t}
+test wm-18.3 {TkWmAddToColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -colormap new
+    wm geom .t +0+0
+    frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f
+    frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f2
+    update
+    wm colormap .t
+} {.t.f .t.f2 .t}
+test wm-18.4 {TkWmAddToColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -colormap new
+    wm geom .t +0+0
+    frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f
+    update
+    wm colormapwindows .t .t.f
+    frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f2
+    update
+    wm colormapwindows .t
+} {.t.f}
+
+test wm-19.1 {TkWmRemoveFromColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -colormap new
+    wm geom .t +0+0
+    frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f
+    frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f2
+    update
+    destroy .t.f2
+    wm colormap .t
+} {.t.f .t}
+test wm-19.2 {TkWmRemoveFromColormapWindows procedure} {
+    catch {destroy .t}
+    toplevel .t -colormap new
+    wm geom .t +0+0
+    frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f
+    frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
+    pack .t.f2
+    update
+    wm colormapwindows .t .t.f2
+    destroy .t.f2
+    wm colormap .t
+} {}
+
+catch {destroy .t}
+concat {}
diff --git a/tk/tests/xmfbox.test b/tk/tests/xmfbox.test
new file mode 100644 (file)
index 0000000..fd20939
--- /dev/null
@@ -0,0 +1,156 @@
+# xmfbox.test -- 
+#
+#      This file is a Tcl script to test the file dialog that's used
+#      when the tk_strictMotif flag is set. Because the file dialog
+#      runs in a modal loop, the only way to test it sufficiently is
+#      to call the internal Tcl procedures in xmfbox.tcl directly.
+#
+# Copyright (c) 1997 Sun Microsystems, Inc.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+# All rights reserved.
+#
+# RCS: @(#) $Id$
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+    source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+set testPWD [pwd]
+eval destroy [winfo children .]
+catch {unset foo}
+
+catch {unset data foo}
+
+proc cleanup {} {
+    global testPWD
+
+    set err0 [catch {
+       cd $testPWD
+    } msg0]
+
+    set err1 [catch {
+       if [file exists ./~nosuchuser1] {
+           file delete ./~nosuchuser1
+       }
+    } msg1]
+
+    set err2 [catch {
+       if [file exists ./~nosuchuser2] {
+           file delete ./~nosuchuser2
+       }
+    } msg2]
+
+    set err3 [catch {
+       if [file exists ./~nosuchuser3] {
+           file delete ./~nosuchuser3
+       }
+    } msg3]
+
+    set err4 [catch {
+       if [file exists ./~nosuchuser4] {
+           file delete ./~nosuchuser4
+       }
+    } msg4]
+
+    if {$err0 || $err1 || $err2 || $err3 || $err4} {
+       error [list $msg0 $msg1 $msg2 $msg3 $msg4] 
+    }
+    catch {unset foo}
+    catch {destroy .foo}
+}
+
+test xmfbox-1.1 {tkMotifFDialog_Create, -parent switch} {unixOnly} {
+    catch {unset foo}
+    set x [tkMotifFDialog_Create foo open {-parent .}]
+    catch {destroy $x}
+    set x
+} .foo
+
+test xmfbox-1.2 {tkMotifFDialog_Create, -parent switch} {unixOnly} {
+    catch {unset foo}
+    toplevel .bar
+    wm geometry .bar +0+0
+    set x [tkMotifFDialog_Create foo open {-parent .bar}]
+    catch {destroy $x}
+    catch {destroy .bar}
+    set x
+} .bar.foo
+
+test xmfbox-2.1 {tkMotifFDialog_InterpFilter, ~ in dir names} {unixOnly} {
+    cleanup
+    file mkdir ./~nosuchuser1
+    set x [tkMotifFDialog_Create foo open {}]
+    $::tk::dialog::file::foo(fEnt) delete 0 end
+    $::tk::dialog::file::foo(fEnt) insert 0 [pwd]/~nosuchuser1
+    set kk [tkMotifFDialog_InterpFilter $x]
+} [list $testPWD/~nosuchuser1 *]
+
+test xmfbox-2.2 {tkMotifFDialog_InterpFilter, ~ in file names} {unixOnly} {
+    cleanup
+    close [open ./~nosuchuser1 {CREAT TRUNC WRONLY}]
+    set x [tkMotifFDialog_Create foo open {}]
+    $::tk::dialog::file::foo(fEnt) delete 0 end
+    $::tk::dialog::file::foo(fEnt) insert 0 [pwd]/~nosuchuser1
+    set kk [tkMotifFDialog_InterpFilter $x]
+} [list $testPWD ./~nosuchuser1]
+
+test xmfbox-2.3 {tkMotifFDialog_Update, ~ in file names} {unixOnly} {
+    cleanup
+    close [open ./~nosuchuser1 {CREAT TRUNC WRONLY}]
+    set x [tkMotifFDialog_Create foo open {}]
+    $::tk::dialog::file::foo(fEnt) delete 0 end
+    $::tk::dialog::file::foo(fEnt) insert 0 [pwd]/~nosuchuser1
+    tkMotifFDialog_InterpFilter $x
+    tkMotifFDialog_Update $x
+    $::tk::dialog::file::foo(fList) get end
+} ~nosuchuser1
+
+test xmfbox-2.4 {tkMotifFDialog_LoadFile, ~ in file names} {unixOnly} {
+    cleanup
+    close [open ./~nosuchuser1 {CREAT TRUNC WRONLY}]
+    set x [tkMotifFDialog_Create foo open {}]
+    set i [lsearch [$::tk::dialog::file::foo(fList) get 0 end] ~nosuchuser1]
+    expr {$i >= 0}
+} 1
+
+test xmfbox-2.5 {tkMotifFDialog_BrowseFList, ~ in file names} {unixOnly} {
+    cleanup
+    close [open ./~nosuchuser1 {CREAT TRUNC WRONLY}]
+    set x [tkMotifFDialog_Create foo open {}]
+    set i [lsearch [$::tk::dialog::file::foo(fList) get 0 end] ~nosuchuser1]
+    $::tk::dialog::file::foo(fList) selection clear 0 end
+    $::tk::dialog::file::foo(fList) selection set $i
+    tkMotifFDialog_BrowseFList $x
+    $::tk::dialog::file::foo(sEnt) get
+} $testPWD/~nosuchuser1
+
+test xmfbox-2.5 {tkMotifFDialog_ActivateFList, ~ in file names} {unixOnly} {
+    cleanup
+    close [open ./~nosuchuser1 {CREAT TRUNC WRONLY}]
+    set x [tkMotifFDialog_Create foo open {}]
+    set i [lsearch [$::tk::dialog::file::foo(fList) get 0 end] ~nosuchuser1]
+    $::tk::dialog::file::foo(fList) selection clear 0 end
+    $::tk::dialog::file::foo(fList) selection set $i
+    tkMotifFDialog_BrowseFList $x
+    tkMotifFDialog_ActivateFList $x
+    list $::tk::dialog::file::foo(selectPath) \
+           $::tk::dialog::file::foo(selectFile) $tkPriv(selectFilePath)
+} [list $testPWD ~nosuchuser1 $testPWD/~nosuchuser1]
+
+# cleanup
+cleanup
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tk/unix/aclocal.m4 b/tk/unix/aclocal.m4
new file mode 100644 (file)
index 0000000..005783c
--- /dev/null
@@ -0,0 +1,2 @@
+builtin(include,tcl.m4)
+builtin(include,../cygtcl.m4)
diff --git a/tk/unix/porting.old b/tk/unix/porting.old
new file mode 100644 (file)
index 0000000..ea8aa5c
--- /dev/null
@@ -0,0 +1,324 @@
+This is an old version of the file "porting.notes".  It contains
+porting information that people submitted for Tk releases numbered
+3.6 and earlier.  You may find information in this file useful if
+there is no information available for your machine in the current
+version of "porting.notes".
+
+I don't have personal access to any of these machines, so I make
+no guarantees that the notes are correct, complete, or up-to-date.
+If you see the word "I" in any explanations, it refers to the person
+who contributed the information, not to me;  this means that I
+probably can't answer any questions about any of this stuff. In
+some cases, a person has volunteered to act as a contact point for
+questions about porting Tcl to a particular machine;  in these
+cases the person's name and e-mail address are listed.  I'd be
+happy to receive corrections or updates.
+
+sccsid = SCCS: @(#) porting.old 1.2 96/02/16 10:27:30
+
+---------------------------------------------
+DEC Alphas:
+---------------------------------------------
+
+1. There appears to be a compiler/library bug that prevents tkTrig.c
+from compiling unless you turn off optimization (remove the -O compiler
+switch).  The problem appears to have been fixed in the 1.3-4 version
+of the compiler.
+
+---------------------------------------------
+HP-UX systems:
+---------------------------------------------
+
+1. Configuration:
+           HP-UX Release 7.05 on a series 300 (68k) machine.
+           The native cc has been used for production.
+           X11r4 libraries and include files were taken from
+           internet archives, where as the server came with HPUX release 7.05.
+    
+    Problems:
+           Symbol table space for cc had to be increased with: -Wc,-Ns3000
+           tkBind.c did not compile under -O:
+                   C1 internal error in "GetField": Set Error Detected
+                   *** Error code 1
+           tkBind.c did compile without optimization (no -O).
+
+2. Note: if you have trouble getting xauth-style access control to work
+(and you'll need xauth if you want to use "send"), be sure to uncomment
+the line
+
+# Vuelogin*authorize:         True
+
+in the file /usr/vue/config/Xconfig, so that the server starts up with
+authorization enabled.  Also, you may have to reboot the machine in
+order to force the server to restart.
+
+---------------------------------------------
+SCO Unix:
+---------------------------------------------
+
+Getting Tk to run under SCO Unix:
+
+Add a "#undef select" to tkEvent.c, and remove the reference to TK_EXCEPTION
+around line 460 of main.c.
+
+Tk uses its own scheme for allocating the border colors for its 3D widgets,
+which causes problems when running TK on a system with "PseudoColor"
+display class, and a 16-cell colormap.
+
+If you can't go to eight bitplanes, you can instead start the server with a
+"-static" (Xsco) or "-analog" (Xsight) option, making the display class 
+become "StaticColor".  This makes the entire colormap read-only, and it will
+return the color that most closely maps to the desired color as possible.
+
+---------------------------------------------
+Silicon Graphics systems:
+---------------------------------------------
+
+1. Change the CC variable in the Makefile to:
+
+CC =           cc -xansi -D__STDC__ -signed
+
+2. Change the LIBS variable in the Makefile to use the X11 shared library
+   ("-lX11_s" instead of "-lX11").
+
+3. Under some versions of IRIX (e.g. 4.0.1) you have to turn off
+   optimization (e.g.  change "-O" in CFLAGS to "-O0" or remove it
+   entirely) because of faulty code generation.  If the Tcl or Tk test
+   suites fail, turn off optimization.
+
+4. Add a "-lsun" switch just before "-lm" in the LIBS definition.
+   Under some versions of IRIX (5.1.1.3?) you'll need to omit the
+   "-lsun" switch, plus remove the "-lsocket" and "-lnsl" switches
+   added by the configure script;  otherwise you won't be able to
+   use symbolic host names for the display, only numerical Internet
+   addresses.
+
+5. Rumor has it that you'll also need a "-lmalloc" switch in the
+   LIBS definition.
+
+6. In IRIX 5.2 you'll have to modify Makefile to fix the following problems:
+    - The "-c" option is illegal with this version of install, but
+      the "-F" switch is needed instead.  Change this in the "INSTALL ="
+      definition line.
+    - The order of file and directory have to be changed in all the
+      invocations of INSTALL_DATA or INSTALL_PROGRAM.
+
+---------------------------------------------
+IBM RS/6000's:
+---------------------------------------------
+1. To allow ALT- sequences to work on the RS-6000, the following
+line should be changed in tkBind.c:
+
+    OLD LINE:
+     {"Alt",   Mod2Mask,       0},
+    NEW LINE:
+     {"Alt",   Mod1Mask,       0},
+
+---------------------------------------------
+AT&T SVR4:
+---------------------------------------------
+
+1. The first major hurdle is that SVR4's select() subtly differs
+from BSD select.  This impacts Tk in two ways, some of the Xlib calls
+make use of select() and are inherently broken and Tk itself makes
+extensive use of select().  The first problem can't be fixed without
+rebuilding one's Xlib, but can be avoided.  I intend to submit part
+of my work the XFree86 guys so that the next version of XFree86 for
+SVR4 will not be broken.  Until then, it is necessary to comment out
+this section of code from Tk_DoOneEvent() (which is near line 1227):
+
+#if !defined(SVR4)
+                    void (*oldHandler)();
+
+                    oldHandler = (void (*)()) signal(SIGPIPE, SIG_IGN);
+                    XNoOp(display);
+                    XFlush(display);
+                    (void) signal(SIGPIPE, oldHandler);
+#endif /* SVR4 */
+
+if you don't comment it out, some scripts cause wish to go into
+an infinite loop of sending no-ops to the X server.
+
+2. As for fixing Tk's calls to select(), I've taken the simple
+approach of writing a wrapper for select and then using #define to
+replace all calls to select with the wrapper.  I chose tkConfig.h
+to load the wrapper.  So at the very end of tkConfig.h, it now looks
+like:
+
+#if defined(SVR4)
+#  include "BSDselect.h"
+#endif 
+
+#endif /* _TKCONFIG */
+
+The file BSDselect.h looks like this:
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/select.h>
+
+/*  This is a fix for the difference between BSD's select() and
+ *  SVR4's select().  SVR4's select() can never return a value larger
+ *  than the total number of file descriptors being checked.  So, if
+ *  you select for read and write on one file descriptor, and both
+ *  are true, SVR4 select() will only return 1.  BSD select in the
+ *  same situation will return 2.
+ *
+ *     Additionally, BSD select() on timing out, will zero the masks,
+ *     while SVR4 does not.  This is fixed here as well.
+ *
+ *     Set your tabstops to 4 characters to have this code nicely formatted.
+ *
+ *     Jerry Whelan, guru@bradley.edu, June 12th, 1993
+ */
+
+
+int
+BSDselect(nfds, readfds, writefds, exceptfds, timeout)
+int nfds;
+fd_set *readfds, *writefds, *exceptfds;
+struct timeval *timeout;
+{
+       int             rval,
+                       i;
+
+       rval = select(nfds, readfds, writefds, exceptfds, timeout);
+
+       switch(rval) {
+               case -1:        return(rval);
+                                       break;
+
+               case 0:         if(readfds != NULL)
+                                               FD_ZERO(readfds);
+                                       if(writefds != NULL)
+                                               FD_ZERO(writefds);
+                                       if(exceptfds != NULL)
+                                               FD_ZERO(exceptfds);
+
+                                       return(rval);
+                                       break;
+
+               default:        for(i=0, rval=0; i < nfds; i++) {
+                                               if((readfds != NULL) && FD_ISSET
+(i, readfds)) rval++;
+                                               if((writefds != NULL) && FD_ISSE
+T(i, writefds)) rval++;
+                                               if((writefds != NULL) && FD_ISSE
+T(i, exceptfds)) rval++;
+                                       }
+                                       return(rval);
+               }
+/* Should never get here */
+}
+
+---------------------------------------------
+CDC 4680MP, EP/IX 1.4.3:
+---------------------------------------------
+
+The installation was done in the System V environment (-systype sysv)
+with the BSD extensions available (-I/usr/include/bsd and -lbsd).  It was
+built with the 2.20 level C compiler.  The 2.11 level can be used, but
+it is better to match what TCL is built with, which must be 2.20 or
+higher (see the porting notes with TCL for the details).
+
+To make the configure script find the BSD extensions, I set environment
+variable DEFS to "-I/usr/include/bsd" and LIBS to "-lbsd" before
+running it.  I would have also set CC to "cc2.20", but that compiler
+driver has a bug that loader errors (e.g. not finding a library routine,
+which the script uses to tell what is available) do not cause an error
+status to be returned to the shell (but see the Tcl 2.1.1 porting notes
+for comments about using "-non_shared").
+
+After running configure, I changed the CC definition line in Makefile
+from:
+       CC=cc
+to
+       CC=cc2.20
+to match the TCL build.  Skip this if the default compiler is already 2.20
+(or later).
+
+---------------------------------------------
+CDC 4680MP, EP/IX 2.1.1:
+---------------------------------------------
+
+The installation was done in the System V environment (-systype sysv)
+with the BSD extensions available (-I/usr/include/bsd and -lbsd).  It was
+built with the 3.11 level C compiler.  Earlier levels can be used, but it
+is better to match what TCL is built with, which must be 2.20 or higher
+(see the porting notes with TCL for the details).
+
+To make the configure script find the BSD extensions, I set environment
+variable DEFS to "-I/usr/include/bsd -non_shared" and LIBS to "-lbsd"
+before running it.
+
+See the Tcl porting notes for comments on why "-non_shared" is needed
+during the configuration step.  It was removed from AC_FLAGS before
+building.
+
+-------------------------------------------------
+Pyramid, OSx 5.1a (UCB universe, GCC installed):
+-------------------------------------------------
+
+Instead of typing "./configure" to configure, type
+
+    DEFS="-I/usr/include/X11/attinc" ./configure
+
+to sh to do the configuration.
+
+-------------------------------------------------
+NextSTEP 3.1:
+-------------------------------------------------
+
+1. Run configure with predefined CPP:
+       CPP='cc -E' ./configure
+   (If your shell is [t]csh, do a "setenv CPP 'cc -E'")
+
+2. Edit Makefile: 
+  -add the following to AC_FLAGS:
+       -Dstrtod=tcl_strtod
+
+Note: Tk's raise test may fail when running the tvtwm window manager.
+Changing to either twm or even better fvwm ensures that this test will
+succeed. 
+
+-------------------------------------------------
+Encore 91, UMAX V 3.0.9.3:
+-------------------------------------------------
+
+1. Modify the CFLAGS definition in Makefile to include -DENCORE:
+
+    CFLAGS = -O -DENCORE
+
+2. "mkdir" does not by default create the parent directories.  The mkdir
+directives should be modified to "midir -p".
+
+3. An error of a redeclaration of read, can be resolved by conditionally
+not compiling if an ENCORE system.
+
+#ifndef ENCORE
+extern int              read _ANSI_ARGS_((int fd, char *buf, size_t size));
+#endif
+
+-------------------------------------------------
+Sequent machines running Dynix:
+Contact: Andrew Swan (aswan@soda.berkeley.edu)
+-------------------------------------------------
+
+1. Use gcc instead of the cc distributed by Sequent
+
+2. There are problems with the distributed version of
+   <stddef.h>.  The easiest solution is probably to create a
+   copy of stddef.h, make sure it comes early in the include
+   path and then edit it as need be to eliminate conflicts
+   with the X11 header files.
+
+3. The same comments about the tanh function from the notes on
+   porting Tcl apply to Tk.
+
+-------------------------------------------------
+Systems running Interactive 4.0:
+-------------------------------------------------
+
+1. Add "-posix" to CFLAGS in Makefile (or Makefile.in).
+
+2. Add "-lnsl_s" to LIBS in Makefile (or Makefile.in).
diff --git a/tk/unix/tcl.m4 b/tk/unix/tcl.m4
new file mode 100644 (file)
index 0000000..6ebd6a4
--- /dev/null
@@ -0,0 +1,1882 @@
+#------------------------------------------------------------------------
+# SC_PATH_TCLCONFIG --
+#
+#      Locate the tclConfig.sh file and perform a sanity check on
+#      the Tcl compile flags
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Defines the following vars:
+#              TCL_BIN_DIR     Full path to the directory containing
+#                              the tclConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_PATH_TCLCONFIG, [
+    #
+    # Ok, lets find the tcl configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tcl
+    #
+
+    if test x"${no_tcl}" = x ; then
+       # we reset no_tcl in case something fails here
+       no_tcl=true
+       AC_ARG_WITH(tcl, [  --with-tcl              directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
+       AC_MSG_CHECKING([for Tcl configuration])
+       AC_CACHE_VAL(ac_cv_c_tclconfig,[
+
+           # First check to see if --with-tclconfig was specified.
+           if test x"${with_tclconfig}" != x ; then
+               if test -f "${with_tclconfig}/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tcl installation
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ../tcl \
+                       `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tcl \
+                       `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tcl \
+                       `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
+                       break
+                   fi
+                   if test -f "$i/win/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig=`(cd $i/win; pwd)`
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few common install locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` ; do
+                   if test -f "$i/tclConfig.sh" ; then
+                       ac_cv_c_tclconfig=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+
+           # check in a few other private locations
+           if test x"${ac_cv_c_tclconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tcl \
+                       `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test -f "$i/unix/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
+                   break
+                   fi
+                   if test -f "$i/win/tclConfig.sh" ; then
+                   ac_cv_c_tclconfig=`(cd $i/win; pwd)`
+                   break
+                   fi
+               done
+           fi
+       ])
+
+       if test x"${ac_cv_c_tclconfig}" = x ; then
+           TCL_BIN_DIR="# no Tcl configs found"
+           AC_MSG_ERROR(Can't find Tcl configuration definitions)
+           exit 0
+       else
+           no_tcl=
+           TCL_BIN_DIR=${ac_cv_c_tclconfig}
+           AC_MSG_RESULT(found $TCL_BIN_DIR/tclConfig.sh)
+       fi
+    fi
+])
+
+#------------------------------------------------------------------------
+# SC_PATH_TKCONFIG --
+#
+#      Locate the tkConfig.sh file
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tk=...
+#
+#      Defines the following vars:
+#              TK_BIN_DIR      Full path to the directory containing
+#                              the tkConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_PATH_TKCONFIG, [
+    #
+    # Ok, lets find the tk configuration
+    # First, look for one uninstalled.
+    # the alternative search directory is invoked by --with-tk
+    #
+
+    if test x"${no_tk}" = x ; then
+       # we reset no_tk in case something fails here
+       no_tk=true
+       AC_ARG_WITH(tk, [  --with-tk               directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval})
+       AC_MSG_CHECKING([for Tk configuration])
+       AC_CACHE_VAL(ac_cv_c_tkconfig,[
+
+           # First check to see if --with-tkconfig was specified.
+           if test x"${with_tkconfig}" != x ; then
+               if test -f "${with_tkconfig}/tkConfig.sh" ; then
+                   ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)`
+               else
+                   AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
+               fi
+           fi
+
+           # then check for a private Tk library
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ../tk \
+                       `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../tk \
+                       `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
+                       ../../../tk \
+                       `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
+                       break
+                   fi
+                   if test -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig=`(cd $i/win; pwd)`
+                       break
+                   fi
+               done
+           fi
+           # check in a few common install locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in `ls -d ${prefix}/lib 2>/dev/null` \
+                       `ls -d /usr/local/lib 2>/dev/null` ; do
+                   if test -f "$i/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig=`(cd $i; pwd)`
+                       break
+                   fi
+               done
+           fi
+           # check in a few other private locations
+           if test x"${ac_cv_c_tkconfig}" = x ; then
+               for i in \
+                       ${srcdir}/../tk \
+                       `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
+                   if test -f "$i/unix/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
+                       break
+                   fi
+                   if test -f "$i/win/tkConfig.sh" ; then
+                       ac_cv_c_tkconfig=`(cd $i/win; pwd)`
+                       break
+                   fi
+               done
+           fi
+       ])
+       if test x"${ac_cv_c_tkconfig}" = x ; then
+           TK_BIN_DIR="# no Tk configs found"
+           AC_MSG_ERROR(Can't find Tk configuration definitions)
+           exit 0
+       else
+           no_tk=
+           TK_BIN_DIR=${ac_cv_c_tkconfig}
+           AC_MSG_RESULT(found $TK_BIN_DIR/tkConfig.sh)
+       fi
+    fi
+
+])
+
+#------------------------------------------------------------------------
+# SC_LOAD_TCLCONFIG --
+#
+#      Load the tclConfig.sh file
+#
+# Arguments:
+#      
+#      Requires the following vars to be set:
+#              TCL_BIN_DIR
+#
+# Results:
+#
+#      Subst the following vars:
+#              TCL_BIN_DIR
+#              TCL_SRC_DIR
+#              TCL_LIB_FILE
+#
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_LOAD_TCLCONFIG, [
+    AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh])
+
+    if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . $TCL_BIN_DIR/tclConfig.sh
+    else
+        AC_MSG_RESULT([file not found])
+    fi
+
+    #
+    # The eval is required to do the TCL_DBGX substitution in the
+    # TCL_LIB_FILE variable
+    #
+
+    eval TCL_LIB_FILE=${TCL_LIB_FILE}
+    eval TCL_LIB_FLAG=${TCL_LIB_FLAG}
+
+    AC_SUBST(TCL_BIN_DIR)
+    AC_SUBST(TCL_SRC_DIR)
+    AC_SUBST(TCL_LIB_FILE)
+])
+
+#------------------------------------------------------------------------
+# SC_LOAD_TKCONFIG --
+#
+#      Load the tkConfig.sh file
+#
+# Arguments:
+#      
+#      Requires the following vars to be set:
+#              TK_BIN_DIR
+#
+# Results:
+#
+#      Sets the following vars that should be in tkConfig.sh:
+#              TK_BIN_DIR
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_LOAD_TKCONFIG, [
+    AC_MSG_CHECKING([for existence of $TCLCONFIG])
+
+    if test -f "$TK_BIN_DIR/tkConfig.sh" ; then
+        AC_MSG_CHECKING([loading $TK_BIN_DIR/tkConfig.sh])
+       . $TK_BIN_DIR/tkConfig.sh
+    else
+        AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh])
+    fi
+
+    AC_SUBST(TK_BIN_DIR)
+    AC_SUBST(TK_SRC_DIR)
+    AC_SUBST(TK_LIB_FILE)
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SHARED --
+#
+#      Allows the building of shared libraries
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-shared=yes|no
+#
+#      Defines the following vars:
+#              STATIC_BUILD    Used for building import/export libraries
+#                              on Windows.
+#
+#      Sets the following vars:
+#              SHARED_BUILD    Value of 1 or 0
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_SHARED, [
+    AC_MSG_CHECKING([how to build libraries])
+    AC_ARG_ENABLE(shared,
+       [  --enable-shared         build and link with shared libraries [--enable-shared]],
+       [tcl_ok=$enableval], [tcl_ok=no])
+
+    if test "${enable_shared+set}" = set; then
+       enableval="$enable_shared"
+       tcl_ok=$enableval
+    else
+       tcl_ok=no
+    fi
+
+    if test "$tcl_ok" = "yes" ; then
+       AC_MSG_RESULT([shared])
+       SHARED_BUILD=1
+    else
+       AC_MSG_RESULT([static])
+       SHARED_BUILD=0
+       AC_DEFINE(STATIC_BUILD)
+    fi
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_THREADS --
+#
+#      Specify if thread support should be enabled
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-threads
+#
+#      Sets the following vars:
+#              THREADS_LIBS    Thread library(s)
+#
+#      Defines the following vars:
+#              TCL_THREADS
+#              _REENTRANT
+#
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_THREADS, [
+    AC_MSG_CHECKING(for building with threads)
+    AC_ARG_ENABLE(threads, [  --enable-threads        build with threads],
+       [tcl_ok=$enableval], [tcl_ok=no])
+
+    if test "$tcl_ok" = "yes"; then
+       AC_MSG_RESULT(yes)
+       TCL_THREADS=1
+       AC_DEFINE(TCL_THREADS)
+       AC_DEFINE(_REENTRANT)
+       AC_DEFINE(_THREAD_SAFE)
+       AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+       if test "$tcl_ok" = "no"; then
+           # Check a little harder for __pthread_mutex_init in the same
+           # library, as some systems hide it there until pthread.h is
+           # defined.  We could alternatively do an AC_TRY_COMPILE with
+           # pthread.h, but that will work with libpthread really doesn't
+           # exist, like AIX 4.2.  [Bug: 4359]
+           AC_CHECK_LIB(pthread,__pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+       fi
+
+       if test "$tcl_ok" = "yes"; then
+           # The space is needed
+           THREADS_LIBS=" -lpthread"
+       else
+           AC_CHECK_LIB(pthreads,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+           if test "$tcl_ok" = "yes"; then
+               # The space is needed
+               THREADS_LIBS=" -lpthreads"
+           else
+               AC_CHECK_LIB(c,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
+               if test "$tcl_ok" = "no"; then
+                   TCL_THREADS=0
+                   AC_MSG_WARN("Don t know how to find pthread lib on your system - you must disable thread support or edit the LIBS in the Makefile...")
+               fi
+           fi
+       fi
+
+       # Does the pthread-implementation provide
+       # 'pthread_attr_setstacksize' ?
+
+       AC_CHECK_FUNCS(pthread_attr_setstacksize)
+    else
+       TCL_THREADS=0
+       AC_MSG_RESULT(no (default))
+    fi
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SYMBOLS --
+#
+#      Specify if debugging symbols should be used
+#
+# Arguments:
+#      none
+#      
+#      Requires the following vars to be set in the Makefile:
+#              CFLAGS_DEBUG
+#              CFLAGS_OPTIMIZE
+#              LDFLAGS_DEBUG
+#              LDFLAGS_OPTIMIZE
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-symbols
+#
+#      Defines the following vars:
+#              CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
+#                              Sets to $(CFLAGS_OPTIMIZE) if false
+#              LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
+#                              Sets to $(LDFLAGS_OPTIMIZE) if false
+#              DBGX            Debug library extension
+#
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_SYMBOLS, [
+    AC_MSG_CHECKING([for build with symbols])
+    AC_ARG_ENABLE(symbols, [  --enable-symbols        build with debugging symbols [--disable-symbols]],    [tcl_ok=$enableval], [tcl_ok=no])
+    if test "$tcl_ok" = "yes"; then
+       CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
+       LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
+       DBGX=g
+       AC_MSG_RESULT([yes])
+    else
+       CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
+       LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
+       DBGX=""
+       AC_MSG_RESULT([no])
+    fi
+])
+
+#--------------------------------------------------------------------
+# SC_CONFIG_CFLAGS
+#
+#      Try to determine the proper flags to pass to the compiler
+#      for building shared libraries and other such nonsense.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Defines the following vars:
+#
+#       DL_OBJS -       Name of the object file that implements dynamic
+#                       loading for Tcl on this system.
+#       DL_LIBS -       Library file(s) to include in tclsh and other base
+#                       applications in order for the "load" command to work.
+#       LDFLAGS -      Flags to pass to the compiler when linking object
+#                       files into an executable application binary such
+#                       as tclsh.
+#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
+#                       that tell the run-time dynamic linker where to look
+#                       for shared libraries such as libtcl.so.  Depends on
+#                       the variable LIB_RUNTIME_DIR in the Makefile.
+#       MAKE_LIB -      Command to execute to build the Tcl library;
+#                       differs depending on whether or not Tcl is being
+#                       compiled as a shared library.
+#       STLIB_LD -      Base command to use for combining object files
+#                       into a static library.
+#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
+#                       of a shared library (may request position-independent
+#                       code, among other things).
+#       SHLIB_LD -      Base command to use for combining object files
+#                       into a shared library.
+#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
+#                       creating shared libraries.  This symbol typically
+#                       goes at the end of the "ld" commands that build
+#                       shared libraries. The value of the symbol is
+#                       "${LIBS}" if all of the dependent libraries should
+#                       be specified when creating a shared library.  If
+#                       dependent libraries should not be specified (as on
+#                       SunOS 4.x, where they cause the link to fail, or in
+#                       general if Tcl and Tk aren't themselves shared
+#                       libraries), then this symbol has an empty string
+#                       as its value.
+#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
+#                       extensions.  An empty string means we don't know how
+#                       to use shared libraries on this platform.
+#       TCL_LIB_FILE -  Name of the file that contains the Tcl library, such
+#                       as libtcl7.8.so or libtcl7.8.a.
+#       TCL_LIB_SUFFIX -Specifies everything that comes after the "libtcl"
+#                       in the shared library name, using the $VERSION variable
+#                       to put the version in the right place.  This is used
+#                       by platforms that need non-standard library names.
+#                       Examples:  ${VERSION}.so.1.1 on NetBSD, since it needs
+#                       to have a version after the .so, and ${VERSION}.a
+#                       on AIX, since the Tcl shared library needs to have
+#                       a .a extension whereas shared objects for loadable
+#                       extensions have a .so extension.  Defaults to
+#                       ${VERSION}${SHLIB_SUFFIX}.
+#       TCL_NEEDS_EXP_FILE -
+#                       1 means that an export file is needed to link to a
+#                       shared library.
+#       TCL_EXP_FILE -  The name of the installed export / import file which
+#                       should be used to link to the Tcl shared library.
+#                       Empty if Tcl is unshared.
+#       TCL_BUILD_EXP_FILE -
+#                       The name of the built export / import file which
+#                       should be used to link to the Tcl shared library.
+#                       Empty if Tcl is unshared.
+#      CFLAGS_DEBUG -
+#                      Flags used when running the compiler in debug mode
+#      CFLAGS_OPTIMIZE -
+#                      Flags used when running the compiler in optimize mode
+#
+#      EXTRA_CFLAGS
+#
+#      Subst's the following vars:
+#              DL_LIBS
+#              CFLAGS_DEBUG
+#              CFLAGS_OPTIMIZE
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_CONFIG_CFLAGS, [
+
+    # Step 0.a: Enable 64 bit support?
+
+    AC_MSG_CHECKING([if 64bit support is requested])
+    AC_ARG_ENABLE(64bit,[  --enable-64bit          enable 64bit support (where applicable)],,enableval="no")
+
+    if test "$enableval" = "yes"; then
+       do64bit=yes
+    else
+       do64bit=no
+    fi
+    AC_MSG_RESULT($do64bit)
+
+    # Step 0.b: Enable Solaris 64 bit VIS support?
+
+    AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
+    AC_ARG_ENABLE(64bit-vis,[  --enable-64bit-vis      enable 64bit Sparc VIS support],,enableval="no")
+
+    if test "$enableval" = "yes"; then
+       # Force 64bit on with VIS
+       do64bit=yes
+       do64bitVIS=yes
+    else
+       do64bitVIS=no
+    fi
+    AC_MSG_RESULT($do64bitVIS)
+
+    # Step 1: set the variable "system" to hold the name and version number
+    # for the system.  This can usually be done via the "uname" command, but
+    # there are a few systems, like Next, where this doesn't work.
+
+    AC_MSG_CHECKING([system version (for dynamic loading)])
+    if test -f /usr/lib/NextStep/software_version; then
+       system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
+    else
+       system=`uname -s`-`uname -r`
+       if test "$?" -ne 0 ; then
+           AC_MSG_RESULT([unknown (can't find uname command)])
+           system=unknown
+       else
+           # Special check for weird MP-RAS system (uname returns weird
+           # results, and the version is kept in special file).
+       
+           if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
+               system=MP-RAS-`awk '{print $3}' /etc/.relid'`
+           fi
+           if test "`uname -s`" = "AIX" ; then
+               system=AIX-`uname -v`.`uname -r`
+           fi
+           AC_MSG_RESULT($system)
+       fi
+    fi
+
+    AC_MSG_CHECKING([if gcc is being used])
+    if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
+       using_gcc="yes"
+    else
+       using_gcc="no"
+    fi
+
+    AC_MSG_RESULT([$using_gcc ($CC)])
+
+    # Step 2: check for existence of -ldl library.  This is needed because
+    # Linux can use either -ldl or -ldld for dynamic loading.
+
+    AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
+
+    # Step 3: set configuration options based on system name and version.
+
+    do64bit_ok=no
+    fullSrcDir=`cd $srcdir; pwd`
+    EXTRA_CFLAGS=""
+    TCL_EXPORT_FILE_SUFFIX=""
+    UNSHARED_LIB_SUFFIX=""
+    TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
+    ECHO_VERSION='`echo ${VERSION}`'
+    TCL_LIB_VERSIONS_OK=ok
+    CFLAGS_DEBUG=-g
+    CFLAGS_OPTIMIZE=-O
+    if test "$using_gcc" = "yes" ; then
+       CFLAGS_WARNING="-Wall -Wconversion -Wno-implicit-int"
+    else
+       CFLAGS_WARNING=""
+    fi
+    TCL_NEEDS_EXP_FILE=0
+    TCL_BUILD_EXP_FILE=""
+    TCL_EXP_FILE=""
+dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed.
+dnl AC_CHECK_TOOL(AR, ar, :)
+    AC_CHECK_PROG(AR, ar, ar)
+    STLIB_LD='${AR} cr'
+    case $system in
+       AIX-4.[[2-9]])
+           if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then
+               # AIX requires the _r compiler when gcc isn't being used
+               if test "${CC}" != "cc_r" ; then
+                   CC=${CC}_r
+               fi
+               AC_MSG_RESULT(Using $CC for compiling with threads)
+           fi
+           SHLIB_CFLAGS=""
+           SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+           TCL_NEEDS_EXP_FILE=1
+           TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
+           ;;
+       AIX-*)
+           if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then
+               # AIX requires the _r compiler when gcc isn't being used
+               if test "${CC}" != "cc_r" ; then
+                   CC=${CC}_r
+               fi
+               AC_MSG_RESULT(Using $CC for compiling with threads)
+           fi
+           SHLIB_CFLAGS=""
+           SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           LIBOBJS="$LIBOBJS tclLoadAix.o"
+           DL_LIBS="-lld"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+           TCL_NEEDS_EXP_FILE=1
+           TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
+           ;;
+       BSD/OS-2.1*|BSD/OS-3*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="shlicc -r"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       BSD/OS-4.*)
+           SHLIB_CFLAGS="-export-dynamic -fPIC"
+           SHLIB_LD="cc -shared"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS="-export-dynamic"
+           LD_SEARCH_FLAGS=""
+           ;;
+       dgux*)
+           SHLIB_CFLAGS="-K PIC"
+           SHLIB_LD="cc -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*|HP-UX-*.11.*)
+           SHLIB_SUFFIX=".sl"
+           AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
+           if test "$tcl_ok" = yes; then
+               SHLIB_CFLAGS="+z"
+               SHLIB_LD="ld -b"
+               SHLIB_LD_LIBS=""
+               DL_OBJS="tclLoadShl.o"
+               DL_LIBS="-ldld"
+               LDFLAGS="-Wl,-E"
+               LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
+           fi
+           ;;
+       IRIX-4.*)
+           SHLIB_CFLAGS="-G 0"
+           SHLIB_SUFFIX=".a"
+           SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
+           SHLIB_LD_LIBS='${LIBS}'
+           DL_OBJS="tclLoadAout.o"
+           DL_LIBS=""
+           LDFLAGS="-Wl,-D,08000000"
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+           SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
+           ;;
+       IRIX-5.*|IRIX-6.*|IRIX64-6.5*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -n32 -shared -rdata_shared"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+           if test "$using_gcc" = "yes" ; then
+               EXTRA_CFLAGS="-mabi=n32"
+               LDFLAGS="-mabi=n32"
+           else
+               case $system in
+                   IRIX-6.3)
+                       # Use to build 6.2 compatible binaries on 6.3.
+                       EXTRA_CFLAGS="-n32 -D_OLD_TERMIOS"
+                       ;;
+                   *)
+                       EXTRA_CFLAGS="-n32"
+                       ;;
+               esac
+               LDFLAGS="-n32"
+           fi
+           ;;
+       IRIX64-6.*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="ld -32 -shared -rdata_shared"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+           ;;
+       Linux*)
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+
+           # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings 
+           # when you inline the string and math operations.  Turn this off to
+           # get rid of the warnings.
+
+           CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
+
+           if test "$have_dl" = yes; then
+               SHLIB_LD="${CC} -shared"
+               DL_OBJS="tclLoadDl.o"
+               DL_LIBS="-ldl"
+               LDFLAGS="-rdynamic"
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+           else
+               AC_CHECK_HEADER(dld.h, [
+                   SHLIB_LD="ld -shared"
+                   DL_OBJS="tclLoadDld.o"
+                   DL_LIBS="-ldld"
+                   LDFLAGS=""
+                   LD_SEARCH_FLAGS=""])
+           fi
+           if test "`uname -m`" = "alpha" ; then
+               EXTRA_CFLAGS="-mieee"
+           fi
+           ;;
+       MP-RAS-02*)
+           SHLIB_CFLAGS="-K PIC"
+           SHLIB_LD="cc -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       MP-RAS-*)
+           SHLIB_CFLAGS="-K PIC"
+           SHLIB_LD="cc -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS="-Wl,-Bexport"
+           LD_SEARCH_FLAGS=""
+           ;;
+       NetBSD-*|FreeBSD-[[1-2]].*|OpenBSD-*)
+           # Not available on all versions:  check for include file.
+           AC_CHECK_HEADER(dlfcn.h, [
+               # NetBSD/SPARC needs -fPIC, -fpic will not do.
+               SHLIB_CFLAGS="-fPIC"
+               SHLIB_LD="ld -Bshareable -x"
+               SHLIB_LD_LIBS=""
+               SHLIB_SUFFIX=".so"
+               DL_OBJS="tclLoadDl.o"
+               DL_LIBS=""
+               LDFLAGS=""
+               LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+               AC_MSG_CHECKING(for ELF)
+               AC_EGREP_CPP(yes, [
+#ifdef __ELF__
+       yes
+#endif
+               ],
+                   AC_MSG_RESULT(yes)
+                   SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so',
+                   AC_MSG_RESULT(no)
+                   SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
+               )
+           ], [
+               SHLIB_CFLAGS=""
+               SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
+               SHLIB_LD_LIBS='${LIBS}'
+               SHLIB_SUFFIX=".a"
+               DL_OBJS="tclLoadAout.o"
+               DL_LIBS=""
+               LDFLAGS=""
+               LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+               SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
+           ])
+
+           # FreeBSD doesn't handle version numbers with dots.
+
+           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       FreeBSD-*)
+           # FreeBSD 3.* and greater have ELF.
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="ld -Bshareable -x"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LDFLAGS="-export-dynamic"
+           LD_SEARCH_FLAGS=""
+           ;;
+       NEXTSTEP-*)
+           SHLIB_CFLAGS=""
+           SHLIB_LD="cc -nostdlib -r"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadNext.o"
+           DL_LIBS=""
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       OS/390-*)
+           CFLAGS_OPTIMIZE=""      # Optimizer is buggy
+           AC_DEFINE(_OE_SOCKETS)  # needed in sys/socket.h
+           ;;      
+       OSF1-1.0|OSF1-1.1|OSF1-1.2)
+           # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
+           SHLIB_CFLAGS=""
+           # Hack: make package name same as library name
+           SHLIB_LD='ld -R -export $@:'
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadOSF.o"
+           DL_LIBS=""
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       OSF1-1.*)
+           # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
+           SHLIB_CFLAGS="-fPIC"
+           SHLIB_LD="ld -shared"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       OSF1-V*)
+           # Digital OSF/1
+           SHLIB_CFLAGS=""
+           SHLIB_LD='ld -shared -expect_unresolved "*"'
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
+           if test "$using_gcc" = "no" ; then
+               EXTRA_CFLAGS="-DHAVE_TZSET -std1"
+           fi
+           # see pthread_intro(3) for pthread support on osf1, k.furukawa
+           if test "${TCL_THREADS}" = "1" ; then
+               EXTRA_CFLAGS="${EXTRA_CFLAGS} -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
+               if test "$using_gcc" = "no" ; then
+                   EXTRA_CFLAGS="${EXTRA_CFLAGS} -pthread"
+                   LDFLAGS="-pthread"
+               else
+                   LIBS=`echo $LIBS | sed s/-lpthreads//`
+                   LIBS="$LIBS -lpthread -lmach -lexc"
+               fi
+           fi
+
+           ;;
+       RISCos-*)
+           SHLIB_CFLAGS="-G 0"
+           SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".a"
+           DL_OBJS="tclLoadAout.o"
+           DL_LIBS=""
+           LDFLAGS="-Wl,-D,08000000"
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+           ;;
+       SCO_SV-3.2*)
+           # Note, dlopen is available only on SCO 3.2.5 and greater. However,
+           # this test works, since "uname -s" was non-standard in 3.2.4 and
+           # below.
+           if test "$using_gcc" = "yes" ; then
+               SHLIB_CFLAGS="-fPIC -melf"
+               LDFLAGS="-melf -Wl,-Bexport"
+           else
+               SHLIB_CFLAGS="-Kpic -belf"
+               LDFLAGS="-belf -Wl,-Bexport"
+           fi
+           SHLIB_LD="ld -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS=""
+           LDFLAGS="-belf -Wl,-Bexport"
+           LD_SEARCH_FLAGS=""
+           ;;
+       SINIX*5.4*)
+           SHLIB_CFLAGS="-K PIC"
+           SHLIB_LD="cc -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS=""
+           ;;
+       SunOS-4*)
+           SHLIB_CFLAGS="-PIC"
+           SHLIB_LD="ld"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+
+           # SunOS can't handle version numbers with dots in them in library
+           # specs, like -ltcl7.5, so use -ltcl75 instead.  Also, it
+           # requires an extra version number at the end of .so file names.
+           # So, the library has to have a name like libtcl75.so.1.0
+
+           SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
+           UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
+           TCL_LIB_VERSIONS_OK=nodots
+           ;;
+       SunOS-5.[[0-6]]*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+
+           # Note: need the LIBS below, otherwise Tk won't find Tcl's
+           # symbols when dynamically loaded into tclsh.
+
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           LDFLAGS=""
+           LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+           ;;
+       SunOS-5*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD="/usr/ccs/bin/ld -G -z text"
+           LDFLAGS=""
+    
+           do64bit_ok=no
+           if test "$do64bit" = "yes" ; then
+               arch=`isainfo`
+               if test "$arch" = "sparcv9 sparc" ; then
+                       if test "$using_gcc" = "no" ; then
+                           do64bit_ok=yes
+                           if test "$do64bitVIS" = "yes" ; then
+                               EXTRA_CFLAGS="-xarch=v9a"
+                               LDFLAGS="-xarch=v9a"
+                           else
+                               EXTRA_CFLAGS="-xarch=v9"
+                               LDFLAGS="-xarch=v9"
+                           fi
+                       else 
+                           AC_MSG_WARN("64bit mode not supported with GCC on $system")
+                       fi
+               else
+                   AC_MSG_WARN("64bit mode only supported sparcv9 system")
+               fi
+           fi
+           
+           # Note: need the LIBS below, otherwise Tk won't find Tcl's
+           # symbols when dynamically loaded into tclsh.
+
+           SHLIB_LD_LIBS='${LIBS}'
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           if test "$using_gcc" = "yes" ; then
+               LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
+           else
+               LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
+           fi
+           ;;
+       ULTRIX-4.*)
+           SHLIB_CFLAGS="-G 0"
+           SHLIB_SUFFIX=".a"
+           SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
+           SHLIB_LD_LIBS='${LIBS}'
+           DL_OBJS="tclLoadAout.o"
+           DL_LIBS=""
+           LDFLAGS="-Wl,-D,08000000"
+           LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
+           if test "$using_gcc" = "no" ; then
+               EXTRA_CFLAGS="-DHAVE_TZSET -std1"
+           fi
+           ;;
+       UNIX_SV* | UnixWare-5*)
+           SHLIB_CFLAGS="-KPIC"
+           SHLIB_LD="cc -G"
+           SHLIB_LD_LIBS=""
+           SHLIB_SUFFIX=".so"
+           DL_OBJS="tclLoadDl.o"
+           DL_LIBS="-ldl"
+           # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
+           # that don't grok the -Bexport option.  Test that it does.
+           hold_ldflags=$LDFLAGS
+           AC_MSG_CHECKING(for ld accepts -Bexport flag)
+           LDFLAGS="${LDFLAGS} -Wl,-Bexport"
+           AC_TRY_LINK(, [int i;], found=yes, found=no)
+           LDFLAGS=$hold_ldflags
+           AC_MSG_RESULT($found)
+           if test $found = yes; then
+           LDFLAGS="-Wl,-Bexport"
+           else
+           LDFLAGS=""
+           fi
+           LD_SEARCH_FLAGS=""
+           ;;
+    esac
+
+    if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then
+    AC_MSG_WARN("64bit support being disabled -- don\'t know magic for this platform")
+    fi
+
+    # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic
+    # Loading for Tcl -- What Became of It?".  Proc. 2nd Tcl/Tk Workshop,
+    # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need
+    # to determine which of several header files defines the a.out file
+    # format (a.out.h, sys/exec.h, or sys/exec_aout.h).  At present, we
+    # support only a file format that is more or less version-7-compatible. 
+    # In particular,
+    #  - a.out files must begin with `struct exec'.
+    #  - the N_TXTOFF on the `struct exec' must compute the seek address
+    #    of the text segment
+    #  - The `struct exec' must contain a_magic, a_text, a_data, a_bss
+    #    and a_entry fields.
+    # The following compilation should succeed if and only if either sys/exec.h
+    # or a.out.h is usable for the purpose.
+    #
+    # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the
+    # `struct exec' includes a second header that contains information that
+    # duplicates the v7 fields that are needed.
+
+    if test "x$DL_OBJS" = "xtclLoadAout.o" ; then
+       AC_MSG_CHECKING(sys/exec.h)
+       AC_TRY_COMPILE([#include <sys/exec.h>],[
+           struct exec foo;
+           unsigned long seek;
+           int flag;
+#if defined(__mips) || defined(mips)
+           seek = N_TXTOFF (foo.ex_f, foo.ex_o);
+#else
+           seek = N_TXTOFF (foo);
+#endif
+           flag = (foo.a_magic == OMAGIC);
+           return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
+    ], tcl_ok=usable, tcl_ok=unusable)
+       AC_MSG_RESULT($tcl_ok)
+       if test $tcl_ok = usable; then
+           AC_DEFINE(USE_SYS_EXEC_H)
+       else
+           AC_MSG_CHECKING(a.out.h)
+           AC_TRY_COMPILE([#include <a.out.h>],[
+               struct exec foo;
+               unsigned long seek;
+               int flag;
+#if defined(__mips) || defined(mips)
+               seek = N_TXTOFF (foo.ex_f, foo.ex_o);
+#else
+               seek = N_TXTOFF (foo);
+#endif
+               flag = (foo.a_magic == OMAGIC);
+               return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
+           ], tcl_ok=usable, tcl_ok=unusable)
+           AC_MSG_RESULT($tcl_ok)
+           if test $tcl_ok = usable; then
+               AC_DEFINE(USE_A_OUT_H)
+           else
+               AC_MSG_CHECKING(sys/exec_aout.h)
+               AC_TRY_COMPILE([#include <sys/exec_aout.h>],[
+                   struct exec foo;
+                   unsigned long seek;
+                   int flag;
+#if defined(__mips) || defined(mips)
+                   seek = N_TXTOFF (foo.ex_f, foo.ex_o);
+#else
+                   seek = N_TXTOFF (foo);
+#endif
+                   flag = (foo.a_midmag == OMAGIC);
+                   return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
+               ], tcl_ok=usable, tcl_ok=unusable)
+               AC_MSG_RESULT($tcl_ok)
+               if test $tcl_ok = usable; then
+                   AC_DEFINE(USE_SYS_EXEC_AOUT_H)
+               else
+                   DL_OBJS=""
+               fi
+           fi
+       fi
+    fi
+
+    # Step 5: disable dynamic loading if requested via a command-line switch.
+
+    AC_ARG_ENABLE(load, [  --disable-load          disallow dynamic loading and "load" command],
+       [tcl_ok=$enableval], [tcl_ok=yes])
+    if test "$tcl_ok" = "no"; then
+       DL_OBJS=""
+    fi
+
+    if test "x$DL_OBJS" != "x" ; then
+       BUILD_DLTEST="\$(DLTEST_TARGETS)"
+    else
+       echo "Can't figure out how to do dynamic loading or shared libraries"
+       echo "on this system."
+       SHLIB_CFLAGS=""
+       SHLIB_LD=""
+       SHLIB_SUFFIX=""
+       DL_OBJS="tclLoadNone.o"
+       DL_LIBS=""
+       LDFLAGS=""
+       LD_SEARCH_FLAGS=""
+       BUILD_DLTEST=""
+    fi
+
+    # If we're running gcc, then change the C flags for compiling shared
+    # libraries to the right flags for gcc, instead of those for the
+    # standard manufacturer compiler.
+
+    if test "$DL_OBJS" != "tclLoadNone.o" ; then
+       if test "$using_gcc" = "yes" ; then
+           case $system in
+               AIX-*)
+                   ;;
+               BSD/OS*)
+                   ;;
+               IRIX*)
+                   ;;
+               NetBSD-*|FreeBSD-*|OpenBSD-*)
+                   ;;
+               RISCos-*)
+                   ;;
+               SCO_SV-3.2*)
+                   ;;
+               ULTRIX-4.*)
+                   ;;
+               *)
+                   SHLIB_CFLAGS="-fPIC"
+                   ;;
+           esac
+       fi
+    fi
+
+    if test "$SHARED_LIB_SUFFIX" = "" ; then
+       SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}'
+    fi
+    if test "$UNSHARED_LIB_SUFFIX" = "" ; then
+       UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
+    fi
+
+# CYGNUS LOCAL
+    TCL_LIB_SUFFIX=.a
+    AC_SUBST(TCL_LIB_SUFFIX)
+# END CYGNUS LOCAL
+
+    AC_SUBST(DL_LIBS)
+    AC_SUBST(CFLAGS_DEBUG)
+    AC_SUBST(CFLAGS_OPTIMIZE)
+    AC_SUBST(CFLAGS_WARNING)
+])
+
+#--------------------------------------------------------------------
+# SC_SERIAL_PORT
+#
+#      Determine which interface to use to talk to the serial port.
+#      Note that #include lines must begin in leftmost column for
+#      some compilers to recognize them as preprocessor directives.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines only one of the following vars:
+#              USE_TERMIOS
+#              USE_TERMIO
+#              USE_SGTTY
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_SERIAL_PORT, [
+    AC_MSG_CHECKING([termios vs. termio vs. sgtty])
+
+    AC_TRY_RUN([
+#include <termios.h>
+
+main()
+{
+    struct termios t;
+    if (tcgetattr(0, &t) == 0) {
+       cfsetospeed(&t, 0);
+       t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+}], tk_ok=termios, tk_ok=no, tk_ok=no)
+
+    if test $tk_ok = termios; then
+       AC_DEFINE(USE_TERMIOS)
+    else
+       AC_TRY_RUN([
+#include <termio.h>
+
+main()
+{
+    struct termio t;
+    if (ioctl(0, TCGETA, &t) == 0) {
+       t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
+       return 0;
+    }
+    return 1;
+    }], tk_ok=termio, tk_ok=no, tk_ok=no)
+
+    if test $tk_ok = termio; then
+       AC_DEFINE(USE_TERMIO)
+    else
+       AC_TRY_RUN([
+#include <sgtty.h>
+
+main()
+{
+    struct sgttyb t;
+    if (ioctl(0, TIOCGETP, &t) == 0) {
+       t.sg_ospeed = 0;
+       t.sg_flags |= ODDP | EVENP | RAW;
+       return 0;
+    }
+    return 1;
+}], tk_ok=sgtty, tk_ok=none, tk_ok=none)
+    if test $tk_ok = sgtty; then
+       AC_DEFINE(USE_SGTTY)
+    fi
+    fi
+    fi
+    AC_MSG_RESULT($tk_ok)
+])
+
+#--------------------------------------------------------------------
+# SC_MISSING_POSIX_HEADERS
+#
+#      Supply substitutes for missing POSIX header files.  Special
+#      notes:
+#          - stdlib.h doesn't define strtol, strtoul, or
+#            strtod insome versions of SunOS
+#          - some versions of string.h don't declare procedures such
+#            as strstr
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines some of the following vars:
+#              NO_DIRENT_H
+#              NO_ERRNO_H
+#              NO_VALUES_H
+#              NO_LIMITS_H
+#              NO_STDLIB_H
+#              NO_STRING_H
+#              NO_SYS_WAIT_H
+#              NO_DLFCN_H
+#              HAVE_UNISTD_H
+#              HAVE_SYS_PARAM_H
+#
+#              HAVE_STRING_H ?
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_MISSING_POSIX_HEADERS, [
+
+    AC_MSG_CHECKING(dirent.h)
+    AC_TRY_LINK([#include <sys/types.h>
+#include <dirent.h>], [
+#ifndef _POSIX_SOURCE
+#   ifdef __Lynx__
+       /*
+        * Generate compilation error to make the test fail:  Lynx headers
+        * are only valid if really in the POSIX environment.
+        */
+
+       missing_procedure();
+#   endif
+#endif
+DIR *d;
+struct dirent *entryPtr;
+char *p;
+d = opendir("foobar");
+entryPtr = readdir(d);
+p = entryPtr->d_name;
+closedir(d);
+], tcl_ok=yes, tcl_ok=no)
+
+    if test $tcl_ok = no; then
+       AC_DEFINE(NO_DIRENT_H)
+    fi
+
+    AC_MSG_RESULT($tcl_ok)
+    AC_CHECK_HEADER(errno.h, , AC_DEFINE(NO_ERRNO_H))
+    AC_CHECK_HEADER(float.h, , AC_DEFINE(NO_FLOAT_H))
+    AC_CHECK_HEADER(values.h, , AC_DEFINE(NO_VALUES_H))
+    AC_CHECK_HEADER(limits.h, , AC_DEFINE(NO_LIMITS_H))
+    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STDLIB_H)
+    fi
+    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
+    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
+    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
+
+    # See also memmove check below for a place where NO_STRING_H can be
+    # set and why.
+
+    if test $tcl_ok = 0; then
+       AC_DEFINE(NO_STRING_H)
+    fi
+
+    AC_CHECK_HEADER(sys/wait.h, , AC_DEFINE(NO_SYS_WAIT_H))
+    AC_CHECK_HEADER(dlfcn.h, , AC_DEFINE(NO_DLFCN_H))
+
+    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
+
+    AC_HAVE_HEADERS(unistd.h sys/param.h)
+
+])
+
+#--------------------------------------------------------------------
+# SC_PATH_X
+#
+#      Locate the X11 header files and the X11 library archive.  Try
+#      the ac_path_x macro first, but if it doesn't find the X stuff
+#      (e.g. because there's no xmkmf program) then check through
+#      a list of possible directories.  Under some conditions the
+#      autoconf macro will return an include directory that contains
+#      no include files, so double-check its result just to be safe.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Sets the the following vars:
+#              XINCLUDES
+#              XLIBSW
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_PATH_X, [
+    AC_PATH_X
+    not_really_there=""
+    if test "$no_x" = ""; then
+       if test "$x_includes" = ""; then
+           AC_TRY_CPP([#include <X11/XIntrinsic.h>], , not_really_there="yes")
+       else
+           if test ! -r $x_includes/X11/Intrinsic.h; then
+               not_really_there="yes"
+           fi
+       fi
+    fi
+    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
+       AC_MSG_CHECKING(for X11 header files)
+       XINCLUDES="# no special path needed"
+       AC_TRY_CPP([#include <X11/Intrinsic.h>], , XINCLUDES="nope")
+       if test "$XINCLUDES" = nope; then
+           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"
+           for i in $dirs ; do
+               if test -r $i/X11/Intrinsic.h; then
+                   AC_MSG_RESULT($i)
+                   XINCLUDES=" -I$i"
+                   break
+               fi
+           done
+       fi
+    else
+       if test "$x_includes" != ""; then
+           XINCLUDES=-I$x_includes
+       else
+           XINCLUDES="# no special path needed"
+       fi
+    fi
+    if test "$XINCLUDES" = nope; then
+       AC_MSG_RESULT(couldn't find any!)
+       XINCLUDES="# no include files found"
+    fi
+
+    if test "$no_x" = yes; then
+       AC_MSG_CHECKING(for X11 libraries)
+       XLIBSW=nope
+       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"
+       for i in $dirs ; do
+           if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then
+               AC_MSG_RESULT($i)
+               XLIBSW="-L$i -lX11"
+               x_libraries="$i"
+               break
+           fi
+       done
+    else
+       if test "$x_libraries" = ""; then
+           XLIBSW=-lX11
+       else
+           XLIBSW="-L$x_libraries -lX11"
+       fi
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
+    fi
+    if test "$XLIBSW" = nope ; then
+       AC_MSG_RESULT(couldn't find any!  Using -lX11.)
+       XLIBSW=-lX11
+    fi
+])
+#--------------------------------------------------------------------
+# SC_BLOCKING_STYLE
+#
+#      The statements below check for systems where POSIX-style
+#      non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. 
+#      On these systems (mostly older ones), use the old BSD-style
+#      FIONBIO approach instead.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines some of the following vars:
+#              HAVE_SYS_IOCTL_H
+#              HAVE_SYS_FILIO_H
+#              USE_FIONBIO
+#              O_NONBLOCK
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_BLOCKING_STYLE, [
+    AC_CHECK_HEADERS(sys/ioctl.h)
+    AC_CHECK_HEADERS(sys/filio.h)
+    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
+    if test -f /usr/lib/NextStep/software_version; then
+       system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
+    else
+       system=`uname -s`-`uname -r`
+       if test "$?" -ne 0 ; then
+           system=unknown
+       else
+           # Special check for weird MP-RAS system (uname returns weird
+           # results, and the version is kept in special file).
+       
+           if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
+               system=MP-RAS-`awk '{print $3}' /etc/.relid'`
+           fi
+           if test "`uname -s`" = "AIX" ; then
+               system=AIX-`uname -v`.`uname -r`
+           fi
+       fi
+    fi
+    case $system in
+       # There used to be code here to use FIONBIO under AIX.  However, it
+       # was reported that FIONBIO doesn't work under AIX 3.2.5.  Since
+       # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO
+       # code (JO, 5/31/97).
+
+       OSF*)
+           AC_DEFINE(USE_FIONBIO)
+           AC_MSG_RESULT(FIONBIO)
+           ;;
+       SunOS-4*)
+           AC_DEFINE(USE_FIONBIO)
+           AC_MSG_RESULT(FIONBIO)
+           ;;
+       ULTRIX-4.*)
+           AC_DEFINE(USE_FIONBIO)
+           AC_MSG_RESULT(FIONBIO)
+           ;;
+       *)
+           AC_MSG_RESULT(O_NONBLOCK)
+           ;;
+    esac
+])
+
+#--------------------------------------------------------------------
+# SC_HAVE_VFORK
+#
+#      Check to see whether the system provides a vfork kernel call.
+#      If not, then use fork instead.  Also, check for a problem with
+#      vforks and signals that can cause core dumps if a vforked child
+#      resets a signal handler.  If the problem exists, then use fork
+#      instead of vfork.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines some of the following vars:
+#              vfork (=fork)
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_HAVE_VFORK, [
+    AC_TYPE_SIGNAL()
+    AC_CHECK_FUNC(vfork, tcl_ok=1, tcl_ok=0)
+    if test "$tcl_ok" = 1; then
+       AC_MSG_CHECKING([vfork/signal bug]);
+       AC_TRY_RUN([
+#include <stdio.h>
+#include <signal.h>
+#include <sys/wait.h>
+int gotSignal = 0;
+sigProc(sig)
+    int sig;
+{
+    gotSignal = 1;
+}
+main()
+{
+    int pid, sts;
+    (void) signal(SIGCHLD, sigProc);
+    pid = vfork();
+    if (pid <  0) {
+       exit(1);
+    } else if (pid == 0) {
+       (void) signal(SIGCHLD, SIG_DFL);
+       _exit(0);
+    } else {
+       (void) wait(&sts);
+    }
+    exit((gotSignal) ? 0 : 1);
+}], tcl_ok=1, tcl_ok=0, tcl_ok=0)
+
+       if test "$tcl_ok" = 1; then
+           AC_MSG_RESULT(ok)
+       else
+           AC_MSG_RESULT([buggy, using fork instead])
+       fi
+    fi
+    rm -f core
+    if test "$tcl_ok" = 0; then
+       AC_DEFINE(vfork, fork)
+    fi
+])
+
+#--------------------------------------------------------------------
+# SC_TIME_HANLDER
+#
+#      Checks how the system deals with time.h, what time structures
+#      are used on the system, and what fields the structures have.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines some of the following vars:
+#              USE_DELTA_FOR_TZ
+#              HAVE_TM_GMTOFF
+#              HAVE_TM_TZADJ
+#              HAVE_TIMEZONE_VAR
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_TIME_HANDLER, [
+    AC_CHECK_HEADERS(sys/time.h)
+    AC_HEADER_TIME
+    AC_STRUCT_TIMEZONE
+
+    AC_MSG_CHECKING([tm_tzadj in struct tm])
+    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
+           [AC_DEFINE(HAVE_TM_TZADJ)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    AC_MSG_CHECKING([tm_gmtoff in struct tm])
+    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
+           [AC_DEFINE(HAVE_TM_GMTOFF)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    #
+    # Its important to include time.h in this check, as some systems
+    # (like convex) have timezone functions, etc.
+    #
+    have_timezone=no
+    AC_MSG_CHECKING([long timezone variable])
+    AC_TRY_COMPILE([#include <time.h>],
+           [extern long timezone;
+           timezone += 1;
+           exit (0);],
+           [have_timezone=yes
+           AC_DEFINE(HAVE_TIMEZONE_VAR)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    #
+    # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
+    #
+    if test "$have_timezone" = no; then
+    AC_MSG_CHECKING([time_t timezone variable])
+    AC_TRY_COMPILE([#include <time.h>],
+           [extern time_t timezone;
+           timezone += 1;
+           exit (0);],
+           [AC_DEFINE(HAVE_TIMEZONE_VAR)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+    fi
+
+    #
+    # On some systems (eg Solaris 2.5.1), timezone is not declared in
+    # time.h unless you jump through hoops.  Instead of that, we just
+    # declare it ourselves when necessary.
+    #
+    if test "$have_timezone" = yes; then
+       AC_MSG_CHECKING(for timezone declaration)
+       changequote(<<,>>)
+       tzrx='^[        ]*extern.*timezone'
+       changequote([,])
+       AC_EGREP_HEADER($tzrx, time.h, [
+       AC_DEFINE(HAVE_TIMEZONE_DECL)
+       AC_MSG_RESULT(found)], AC_MSG_RESULT(missing))
+    fi
+
+    #
+    # AIX does not have a timezone field in struct tm. When the AIX bsd
+    # library is used, the timezone global and the gettimeofday methods are
+    # to be avoided for timezone deduction instead, we deduce the timezone
+    # by comparing the localtime result on a known GMT value.
+    #
+
+    if test "`uname -s`" = "AIX" ; then
+       AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes)
+       if test $libbsd = yes; then
+           AC_DEFINE(USE_DELTA_FOR_TZ)
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# SC_BUGGY_STRTOD
+#
+#      Under Solaris 2.4, strtod returns the wrong value for the
+#      terminating character under some conditions.  Check for this
+#      and if the problem exists use a substitute procedure
+#      "fixstrtod" (provided by Tcl) that corrects the error.
+#      Also, on Compaq's Tru64 Unix 5.0,
+#      strtod(" ") returns 0.0 instead of a failure to convert.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Might defines some of the following vars:
+#              strtod (=fixstrtod)
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_BUGGY_STRTOD, [
+    AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
+    if test "$tcl_strtod" = 1; then
+       AC_MSG_CHECKING([for Solaris2.4/Tru64 strtod bugs])
+       AC_TRY_RUN([
+           extern double strtod();
+           int main()
+           {
+               char *string = "NaN", *spaceString = " ";
+               char *term;
+               double value;
+               value = strtod(string, &term);
+               if ((term != string) && (term[-1] == 0)) {
+                   exit(1);
+               }
+               value = strtod(spaceString, &term);
+               if (term == (spaceString+1)) {
+                   exit(1);
+               }
+               exit(0);
+           }], tcl_ok=1, tcl_ok=0, tcl_ok=0)
+       if test "$tcl_ok" = 1; then
+           AC_MSG_RESULT(ok)
+       else
+           AC_MSG_RESULT(buggy)
+           LIBOBJS="$LIBOBJS fixstrtod.o"
+           AC_DEFINE(strtod, fixstrtod)
+       fi
+    fi
+])
+
+#--------------------------------------------------------------------
+# SC_TCL_LINK_LIBS
+#
+#      Search for the libraries needed to link the Tcl shell.
+#      Things like the math library (-lm) and socket stuff (-lsocket vs.
+#      -lnsl) are dealt with here.
+#
+# Arguments:
+#      Requires the following vars to be set in the Makefile:
+#              DL_LIBS
+#              LIBS
+#              MATH_LIBS
+#      
+# Results:
+#
+#      Subst's the following var:
+#              TCL_LIBS
+#              MATH_LIBS
+#
+#      Might append to the following vars:
+#              LIBS
+#
+#      Might define the following vars:
+#              HAVE_NET_ERRNO_H
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_TCL_LINK_LIBS, [
+    #--------------------------------------------------------------------
+    # On a few very rare systems, all of the libm.a stuff is
+    # already in libc.a.  Set compiler flags accordingly.
+    # Also, Linux requires the "ieee" library for math to work
+    # right (and it must appear before "-lm").
+    #--------------------------------------------------------------------
+
+    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
+    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
+
+    #--------------------------------------------------------------------
+    # On AIX systems, libbsd.a has to be linked in to support
+    # non-blocking file IO.  This library has to be linked in after
+    # the MATH_LIBS or it breaks the pow() function.  The way to
+    # insure proper sequencing, is to add it to the tail of MATH_LIBS.
+    # This library also supplies gettimeofday.
+    #--------------------------------------------------------------------
+
+    libbsd=no
+    if test "`uname -s`" = "AIX" ; then
+       AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes)
+       if test $libbsd = yes; then
+           MATH_LIBS="$MATH_LIBS -lbsd"
+       fi
+    fi
+
+
+    #--------------------------------------------------------------------
+    # Interactive UNIX requires -linet instead of -lsocket, plus it
+    # needs net/errno.h to define the socket-related error codes.
+    #--------------------------------------------------------------------
+
+    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
+    AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H))
+
+    #--------------------------------------------------------------------
+    #  Check for the existence of the -lsocket and -lnsl libraries.
+    #  The order here is important, so that they end up in the right
+    #  order in the command line generated by make.  Here are some
+    #  special considerations:
+    #  1. Use "connect" and "accept" to check for -lsocket, and
+    #     "gethostbyname" to check for -lnsl.
+    #  2. Use each function name only once:  can't redo a check because
+    #     autoconf caches the results of the last check and won't redo it.
+    #  3. Use -lnsl and -lsocket only if they supply procedures that
+    #     aren't already present in the normal libraries.  This is because
+    #     IRIX 5.2 has libraries, but they aren't needed and they're
+    #     bogus:  they goof up name resolution if used.
+    #  4. On some SVR4 systems, can't use -lsocket without -lnsl too.
+    #     To get around this problem, check for both libraries together
+    #     if -lsocket doesn't work by itself.
+    #--------------------------------------------------------------------
+
+    # CYGNUS LOCAL: Store any socket library(ies) in the cache, and don't
+    # mess up the cache values of the functions we check for.
+    AC_CACHE_CHECK([for socket libraries], tcl_cv_lib_sockets,
+       [tcl_cv_lib_sockets=
+           tcl_checkBoth=0
+           unset ac_cv_func_connect
+           AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
+           if test "$tcl_checkSocket" = 1; then
+               unset ac_cv_func_connect
+               AC_CHECK_LIB(socket, main, tcl_cv_lib_sockets="-lsocket",
+                   tcl_checkBoth=1)
+           fi
+           if test "$tcl_checkBoth" = 1; then
+               tcl_oldLibs=$LIBS
+               LIBS="$LIBS -lsocket -lnsl"
+               unset ac_cv_func_accept
+               AC_CHECK_FUNC(accept,
+                   [tcl_checkNsl=0
+                   tcl_cv_lib_sockets="-lsocket -lnsl"])
+               unset ac_cv_func_accept
+               LIBS=$tcl_oldLibs
+           fi
+           unset ac_cv_func_gethostbyname
+            tcl_oldLibs=$LIBS
+           LIBS="$LIBS $tcl_cv_lib_sockets"
+           AC_CHECK_FUNC(gethostbyname, ,
+               [AC_CHECK_LIB(nsl, main,
+               [tcl_cv_lib_sockets="$tcl_cv_lib_sockets -lnsl"])])
+           unset ac_cv_func_gethostbyname
+            LIBS=$tcl_oldLIBS
+       ])
+    test -z "$tcl_cv_lib_sockets" || LIBS="$LIBS $tcl_cv_lib_sockets"
+    
+    # Don't perform the eval of the libraries here because DL_LIBS
+    # won't be set until we call SC_CONFIG_CFLAGS
+
+    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
+    AC_SUBST(TCL_LIBS)
+    AC_SUBST(MATH_LIBS)
+])
+
+dnl CYGNUS LOCAL: This gets the right posix flag for gcc
+
+AC_DEFUN(CY_AC_TCL_LYNX_POSIX,
+[AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING([to see if this is LynxOS])
+AC_CACHE_VAL(ac_cv_os_lynx,
+[AC_EGREP_CPP(yes,
+[/*
+ * The old Lynx "cc" only defines "Lynx", but the newer one uses "__Lynx__"
+ */
+#if defined(__Lynx__) || defined(Lynx)
+yes
+#endif
+], ac_cv_os_lynx=yes, ac_cv_os_lynx=no)])
+#
+if test "$ac_cv_os_lynx" = "yes" ; then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(LYNX)
+  AC_MSG_CHECKING([whether -mposix or -X is available])
+  AC_CACHE_VAL(ac_cv_c_posix_flag,
+  [AC_TRY_COMPILE(,[
+  /*
+   * This flag varies depending on how old the compiler is.
+   * -X is for the old "cc" and "gcc" (based on 1.42).
+   * -mposix is for the new gcc (at least 2.5.8).
+   */
+  #if defined(__GNUC__) && __GNUC__ >= 2
+  choke me
+  #endif
+  ], ac_cv_c_posix_flag=" -mposix", ac_cv_c_posix_flag=" -X")])
+  CC="$CC $ac_cv_c_posix_flag"
+  AC_MSG_RESULT($ac_cv_c_posix_flag)
+  else
+  AC_MSG_RESULT(no)
+fi
+])
diff --git a/tk/unix/tkUnixConfig.c b/tk/unix/tkUnixConfig.c
new file mode 100644 (file)
index 0000000..9db523a
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+ * tkUnixConfig.c --
+ *
+ *     This module implements the Unix system defaults for
+ *     the configuration package.
+ *
+ * Copyright (c) 1997 by Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tk.h"
+#include "tkInt.h"
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkpGetSystemDefault --
+ *
+ *     Given a dbName and className for a configuration option,
+ *     return a string representation of the option.
+ *
+ * Results:
+ *     Returns a Tk_Uid that is the string identifier that identifies
+ *     this option. Returns NULL if there are no system defaults
+ *     that match this pair.
+ *
+ * Side effects:
+ *     None, once the package is initialized.
+ *
+ *----------------------------------------------------------------------
+ */
+
+Tcl_Obj *
+TkpGetSystemDefault(tkwin, dbName, className)
+    Tk_Window tkwin;           /* A window to use. */
+    char *dbName;              /* The option database name. */
+    char *className;           /* The name of the option class. */
+{
+    return NULL;
+}
+
diff --git a/tk/unix/tkUnixKey.c b/tk/unix/tkUnixKey.c
new file mode 100644 (file)
index 0000000..9c3f7f1
--- /dev/null
@@ -0,0 +1,355 @@
+/* 
+ * tkUnixKey.c --
+ *
+ *     This file contains routines for dealing with international keyboard
+ *     input.
+ *
+ * Copyright (c) 1997 by Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tkInt.h"
+
+/*
+ * Prototypes for local procedures defined in this file:
+ */
+
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkpGetString --
+ *
+ *     Retrieve the UTF string associated with a keyboard event.
+ *
+ * Results:
+ *     Returns the UTF string.
+ *
+ * Side effects:
+ *     Stores the input string in the specified Tcl_DString.  Modifies
+ *     the internal input state.  This routine can only be called
+ *     once for a given event.
+ *
+ *----------------------------------------------------------------------
+ */
+
+char *
+TkpGetString(winPtr, eventPtr, dsPtr)
+    TkWindow *winPtr;          /* Window where event occurred:  needed to
+                                * get input context. */
+    XEvent *eventPtr;          /* X keyboard event. */
+    Tcl_DString *dsPtr;                /* Uninitialized or empty string to hold
+                                * result. */
+{
+    int len;
+    Tcl_DString buf;
+    Status status;
+
+    /*
+     * Overallocate the dstring to the maximum stack amount.
+     */
+
+    Tcl_DStringInit(&buf);
+    Tcl_DStringSetLength(&buf, TCL_DSTRING_STATIC_SIZE-1);
+    
+#ifdef TK_USE_INPUT_METHODS
+    if (winPtr->dispPtr->useInputMethods
+           && (winPtr->inputContext != NULL)
+           && (eventPtr->type == KeyPress)) {
+       len = XmbLookupString(winPtr->inputContext, &eventPtr->xkey,
+               Tcl_DStringValue(&buf), Tcl_DStringLength(&buf),
+               (KeySym *) NULL, &status);
+       /*
+        * If the buffer wasn't big enough, grow the buffer and try again.
+        */
+
+       if (status == XBufferOverflow) {
+           Tcl_DStringSetLength(&buf, len);
+           len = XmbLookupString(winPtr->inputContext, &eventPtr->xkey,
+                   Tcl_DStringValue(&buf), len, (KeySym *) NULL, &status);
+       }
+       if ((status != XLookupChars) && (status != XLookupBoth)) {
+           len = 0;
+       }
+    } else {
+       len = XLookupString(&eventPtr->xkey, Tcl_DStringValue(&buf),
+               Tcl_DStringLength(&buf), (KeySym *) NULL,
+               (XComposeStatus *) NULL);
+    }
+#else /* TK_USE_INPUT_METHODS */
+    len = XLookupString(&eventPtr->xkey, Tcl_DStringValue(&buf),
+           Tcl_DStringLength(&buf), (KeySym *) NULL,
+           (XComposeStatus *) NULL);
+#endif /* TK_USE_INPUT_METHODS */
+    Tcl_DStringSetLength(&buf, len);
+
+    Tcl_ExternalToUtfDString(NULL, Tcl_DStringValue(&buf), len, dsPtr);
+    Tcl_DStringFree(&buf);
+
+    return Tcl_DStringValue(dsPtr);
+}
+\f
+/*
+ * When mapping from a keysym to a keycode, need
+ * information about the modifier state that should be used
+ * so that when they call XKeycodeToKeysym taking into
+ * account the xkey.state, they will get back the original
+ * keysym.
+ */
+
+void
+TkpSetKeycodeAndState(tkwin, keySym, eventPtr)
+    Tk_Window tkwin;
+    KeySym keySym;
+    XEvent *eventPtr;
+{
+    Display *display;
+    int state;
+    KeyCode keycode;
+    
+    display = Tk_Display(tkwin);
+    
+    if (keySym == NoSymbol) {
+       keycode = 0;
+    } else {
+       keycode = XKeysymToKeycode(display, keySym);
+    }
+    if (keycode != 0) {
+       for (state = 0; state < 4; state++) {
+           if (XKeycodeToKeysym(display, keycode, state) == keySym) {
+               if (state & 1) {
+                   eventPtr->xkey.state |= ShiftMask;
+               }
+               if (state & 2) {
+                   TkDisplay *dispPtr;
+
+                   dispPtr = ((TkWindow *) tkwin)->dispPtr; 
+                   eventPtr->xkey.state |= dispPtr->modeModMask;
+               }
+               break;
+           }
+       }
+    }
+    eventPtr->xkey.keycode = keycode;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkpGetKeySym --
+ *
+ *     Given an X KeyPress or KeyRelease event, map the
+ *     keycode in the event into a KeySym.
+ *
+ * Results:
+ *     The return value is the KeySym corresponding to
+ *     eventPtr, or NoSymbol if no matching Keysym could be
+ *     found.
+ *
+ * Side effects:
+ *     In the first call for a given display, keycode-to-
+ *     KeySym maps get loaded.
+ *
+ *----------------------------------------------------------------------
+ */
+
+KeySym
+TkpGetKeySym(dispPtr, eventPtr)
+    TkDisplay *dispPtr;        /* Display in which to
+                                        * map keycode. */
+    XEvent *eventPtr;          /* Description of X event. */
+{
+    KeySym sym;
+    int index;
+
+    /*
+     * Refresh the mapping information if it's stale
+     */
+
+    if (dispPtr->bindInfoStale) {
+       TkpInitKeymapInfo(dispPtr);
+    }
+
+    /*
+     * Figure out which of the four slots in the keymap vector to
+     * use for this key.  Refer to Xlib documentation for more info
+     * on how this computation works.
+     */
+
+    index = 0;
+    if (eventPtr->xkey.state & dispPtr->modeModMask) {
+       index = 2;
+    }
+    if ((eventPtr->xkey.state & ShiftMask)
+           || ((dispPtr->lockUsage != LU_IGNORE)
+           && (eventPtr->xkey.state & LockMask))) {
+       index += 1;
+    }
+    sym = XKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode, index);
+
+    /*
+     * Special handling:  if the key was shifted because of Lock, but
+     * lock is only caps lock, not shift lock, and the shifted keysym
+     * isn't upper-case alphabetic, then switch back to the unshifted
+     * keysym.
+     */
+
+    if ((index & 1) && !(eventPtr->xkey.state & ShiftMask)
+           && (dispPtr->lockUsage == LU_CAPS)) {
+       if (!(((sym >= XK_A) && (sym <= XK_Z))
+               || ((sym >= XK_Agrave) && (sym <= XK_Odiaeresis))
+               || ((sym >= XK_Ooblique) && (sym <= XK_Thorn)))) {
+           index &= ~1;
+           sym = XKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode,
+                   index);
+       }
+    }
+
+    /*
+     * Another bit of special handling:  if this is a shifted key and there
+     * is no keysym defined, then use the keysym for the unshifted key.
+     */
+
+    if ((index & 1) && (sym == NoSymbol)) {
+       sym = XKeycodeToKeysym(dispPtr->display, eventPtr->xkey.keycode,
+               index & ~1);
+    }
+    return sym;
+}
+\f
+/*
+ *--------------------------------------------------------------
+ *
+ * TkpInitKeymapInfo --
+ *
+ *     This procedure is invoked to scan keymap information
+ *     to recompute stuff that's important for binding, such
+ *     as the modifier key (if any) that corresponds to "mode
+ *     switch".
+ *
+ * Results:
+ *     None.
+ *
+ * Side effects:
+ *     Keymap-related information in dispPtr is updated.
+ *
+ *--------------------------------------------------------------
+ */
+
+void
+TkpInitKeymapInfo(dispPtr)
+    TkDisplay *dispPtr;                /* Display for which to recompute keymap
+                                * information. */
+{
+    XModifierKeymap *modMapPtr;
+    KeyCode *codePtr;
+    KeySym keysym;
+    int count, i, j, max, arraySize;
+#define KEYCODE_ARRAY_SIZE 20
+
+    dispPtr->bindInfoStale = 0;
+    modMapPtr = XGetModifierMapping(dispPtr->display);
+
+    /*
+     * Check the keycodes associated with the Lock modifier.  If
+     * any of them is associated with the XK_Shift_Lock modifier,
+     * then Lock has to be interpreted as Shift Lock, not Caps Lock.
+     */
+
+    dispPtr->lockUsage = LU_IGNORE;
+    codePtr = modMapPtr->modifiermap + modMapPtr->max_keypermod*LockMapIndex;
+    for (count = modMapPtr->max_keypermod; count > 0; count--, codePtr++) {
+       if (*codePtr == 0) {
+           continue;
+       }
+       keysym = XKeycodeToKeysym(dispPtr->display, *codePtr, 0);
+       if (keysym == XK_Shift_Lock) {
+           dispPtr->lockUsage = LU_SHIFT;
+           break;
+       }
+       if (keysym == XK_Caps_Lock) {
+           dispPtr->lockUsage = LU_CAPS;
+           break;
+       }
+    }
+
+    /*
+     * Look through the keycodes associated with modifiers to see if
+     * the the "mode switch", "meta", or "alt" keysyms are associated
+     * with any modifiers.  If so, remember their modifier mask bits.
+     */
+
+    dispPtr->modeModMask = 0;
+    dispPtr->metaModMask = 0;
+    dispPtr->altModMask = 0;
+    codePtr = modMapPtr->modifiermap;
+    max = 8*modMapPtr->max_keypermod;
+    for (i = 0; i < max; i++, codePtr++) {
+       if (*codePtr == 0) {
+           continue;
+       }
+       keysym = XKeycodeToKeysym(dispPtr->display, *codePtr, 0);
+       if (keysym == XK_Mode_switch) {
+           dispPtr->modeModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+       }
+       if ((keysym == XK_Meta_L) || (keysym == XK_Meta_R)) {
+           dispPtr->metaModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+       }
+       if ((keysym == XK_Alt_L) || (keysym == XK_Alt_R)) {
+           dispPtr->altModMask |= ShiftMask << (i/modMapPtr->max_keypermod);
+       }
+    }
+
+    /*
+     * Create an array of the keycodes for all modifier keys.
+     */
+
+    if (dispPtr->modKeyCodes != NULL) {
+       ckfree((char *) dispPtr->modKeyCodes);
+    }
+    dispPtr->numModKeyCodes = 0;
+    arraySize = KEYCODE_ARRAY_SIZE;
+    dispPtr->modKeyCodes = (KeyCode *) ckalloc((unsigned)
+           (KEYCODE_ARRAY_SIZE * sizeof(KeyCode)));
+    for (i = 0, codePtr = modMapPtr->modifiermap; i < max; i++, codePtr++) {
+       if (*codePtr == 0) {
+           continue;
+       }
+
+       /*
+        * Make sure that the keycode isn't already in the array.
+        */
+
+       for (j = 0; j < dispPtr->numModKeyCodes; j++) {
+           if (dispPtr->modKeyCodes[j] == *codePtr) {
+               goto nextModCode;
+           }
+       }
+       if (dispPtr->numModKeyCodes >= arraySize) {
+           KeyCode *new;
+
+           /*
+            * Ran out of space in the array;  grow it.
+            */
+
+           arraySize *= 2;
+           new = (KeyCode *) ckalloc((unsigned)
+                   (arraySize * sizeof(KeyCode)));
+           memcpy((VOID *) new, (VOID *) dispPtr->modKeyCodes,
+                   (dispPtr->numModKeyCodes * sizeof(KeyCode)));
+           ckfree((char *) dispPtr->modKeyCodes);
+           dispPtr->modKeyCodes = new;
+       }
+       dispPtr->modKeyCodes[dispPtr->numModKeyCodes] = *codePtr;
+       dispPtr->numModKeyCodes++;
+       nextModCode: continue;
+    }
+    XFreeModifiermap(modMapPtr);
+}
+
+
diff --git a/tk/win/aclocal.m4 b/tk/win/aclocal.m4
new file mode 100644 (file)
index 0000000..005783c
--- /dev/null
@@ -0,0 +1,2 @@
+builtin(include,tcl.m4)
+builtin(include,../cygtcl.m4)
diff --git a/tk/win/rc/tk_base.rc b/tk/win/rc/tk_base.rc
new file mode 100644 (file)
index 0000000..52d64d2
--- /dev/null
@@ -0,0 +1,130 @@
+// RCS: @(#) $Id$
+//
+//  Base resources needed by Tk whether it's a DLL or a static library.
+//
+
+//
+//  Tk Icon
+//
+
+tk                      ICON    DISCARDABLE     "tk.ico"
+
+#include <dlgs.h>
+
+FILEOPENORD DIALOG DISCARDABLE  36, 24, 218, 138
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Choose Directory"
+FONT 8, "Helv"
+BEGIN
+    LTEXT           "Directory &name:",-1,8,6,118,9
+    EDITTEXT        edt10,8,26,144,12, WS_TABSTOP | ES_AUTOHSCROLL
+    LISTBOX         lst2,8,40,144,64,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                    LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | 
+                    LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Dri&ves:",stc4,8,106,92,9
+    COMBOBOX        cmb2,8,115,144,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL | WS_TABSTOP
+    DEFPUSHBUTTON   "OK",1,160,6,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",2,160,24,50,14,WS_GROUP
+    PUSHBUTTON      "&Help",psh15,160,42,50,14,WS_GROUP
+    CHECKBOX        "&Read only",chx1,160,66,50,12,WS_GROUP
+    PUSHBUTTON      "Net&work...",psh14,160,115,50,14,WS_GROUP
+
+    LTEXT           "a",stc3,9,143,114,15
+    EDITTEXT        edt1,7,158,135,20,NOT WS_TABSTOP
+    LISTBOX         lst1,8,205,134,42,LBS_NOINTEGRALHEIGHT
+    COMBOBOX        cmb1,8,253,135,21,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL
+
+END
+
+
+//
+// Bitmaps
+//
+
+buttons                        BITMAP  DISCARDABLE     "buttons.bmp"
+
+//
+// Cursors
+//
+
+X_cursor                CURSOR  DISCARDABLE     "cursor00.cur"
+arrow                   CURSOR  DISCARDABLE     "cursor02.cur"
+based_arrow_down        CURSOR  DISCARDABLE     "cursor04.cur"
+based_arrow_up          CURSOR  DISCARDABLE     "cursor06.cur"
+boat                    CURSOR  DISCARDABLE     "cursor08.cur"
+bogosity                CURSOR  DISCARDABLE     "cursor0a.cur"
+bottom_left_corner      CURSOR  DISCARDABLE     "cursor0c.cur"
+bottom_right_corner     CURSOR  DISCARDABLE     "cursor0e.cur"
+bottom_side             CURSOR  DISCARDABLE     "cursor10.cur"
+bottom_tee              CURSOR  DISCARDABLE     "cursor12.cur"
+box_spiral              CURSOR  DISCARDABLE     "cursor14.cur"
+center_ptr              CURSOR  DISCARDABLE     "cursor16.cur"
+circle                  CURSOR  DISCARDABLE     "cursor18.cur"
+clock                   CURSOR  DISCARDABLE     "cursor1a.cur"
+coffee_mug              CURSOR  DISCARDABLE     "cursor1c.cur"
+cross                   CURSOR  DISCARDABLE     "cursor1e.cur"
+cross_reverse           CURSOR  DISCARDABLE     "cursor20.cur"
+crosshair               CURSOR  DISCARDABLE     "cursor22.cur"
+diamond_cross           CURSOR  DISCARDABLE     "cursor24.cur"
+dot                     CURSOR  DISCARDABLE     "cursor26.cur"
+dotbox                  CURSOR  DISCARDABLE     "cursor28.cur"
+double_arrow            CURSOR  DISCARDABLE     "cursor2a.cur"
+draft_large             CURSOR  DISCARDABLE     "cursor2c.cur"
+draft_small             CURSOR  DISCARDABLE     "cursor2e.cur"
+draped_box              CURSOR  DISCARDABLE     "cursor30.cur"
+exchange                CURSOR  DISCARDABLE     "cursor32.cur"
+fleur                   CURSOR  DISCARDABLE     "cursor34.cur"
+gobbler                 CURSOR  DISCARDABLE     "cursor36.cur"
+gumby                   CURSOR  DISCARDABLE     "cursor38.cur"
+hand1                   CURSOR  DISCARDABLE     "cursor3a.cur"
+hand2                   CURSOR  DISCARDABLE     "cursor3c.cur"
+heart                   CURSOR  DISCARDABLE     "cursor3e.cur"
+icon                    CURSOR  DISCARDABLE     "cursor40.cur"
+iron_cross              CURSOR  DISCARDABLE     "cursor42.cur"
+left_ptr                CURSOR  DISCARDABLE     "cursor44.cur"
+left_side               CURSOR  DISCARDABLE     "cursor46.cur"
+left_tee                CURSOR  DISCARDABLE     "cursor48.cur"
+leftbutton              CURSOR  DISCARDABLE     "cursor4a.cur"
+ll_angle                CURSOR  DISCARDABLE     "cursor4c.cur"
+lr_angle                CURSOR  DISCARDABLE     "cursor4e.cur"
+man                     CURSOR  DISCARDABLE     "cursor50.cur"
+middlebutton            CURSOR  DISCARDABLE     "cursor52.cur"
+mouse                   CURSOR  DISCARDABLE     "cursor54.cur"
+pencil                  CURSOR  DISCARDABLE     "cursor56.cur"
+pirate                  CURSOR  DISCARDABLE     "cursor58.cur"
+plus                    CURSOR  DISCARDABLE     "cursor5a.cur"
+question_arrow          CURSOR  DISCARDABLE     "cursor5c.cur"
+right_ptr               CURSOR  DISCARDABLE     "cursor5e.cur"
+right_side              CURSOR  DISCARDABLE     "cursor60.cur"
+right_tee               CURSOR  DISCARDABLE     "cursor62.cur"
+rightbutton             CURSOR  DISCARDABLE     "cursor64.cur"
+rtl_logo                CURSOR  DISCARDABLE     "cursor66.cur"
+sailboat                CURSOR  DISCARDABLE     "cursor68.cur"
+sb_down_arrow           CURSOR  DISCARDABLE     "cursor6a.cur"
+sb_h_double_arrow       CURSOR  DISCARDABLE     "cursor6c.cur"
+sb_left_arrow           CURSOR  DISCARDABLE     "cursor6e.cur"
+sb_right_arrow          CURSOR  DISCARDABLE     "cursor70.cur"
+sb_up_arrow             CURSOR  DISCARDABLE     "cursor72.cur"
+sb_v_double_arrow       CURSOR  DISCARDABLE     "cursor74.cur"
+shuttle                 CURSOR  DISCARDABLE     "cursor76.cur"
+sizing                  CURSOR  DISCARDABLE     "cursor78.cur"
+spider                  CURSOR  DISCARDABLE     "cursor7a.cur"
+spraycan                CURSOR  DISCARDABLE     "cursor7c.cur"
+star                    CURSOR  DISCARDABLE     "cursor7e.cur"
+target                  CURSOR  DISCARDABLE     "cursor80.cur"
+tcross                  CURSOR  DISCARDABLE     "cursor82.cur"
+top_left_arrow          CURSOR  DISCARDABLE     "cursor84.cur"
+top_left_corner         CURSOR  DISCARDABLE     "cursor86.cur"
+top_right_corner        CURSOR  DISCARDABLE     "cursor88.cur"
+top_side                CURSOR  DISCARDABLE     "cursor8a.cur"
+top_tee                 CURSOR  DISCARDABLE     "cursor8c.cur"
+trek                    CURSOR  DISCARDABLE     "cursor8e.cur"
+ul_angle                CURSOR  DISCARDABLE     "cursor90.cur"
+umbrella                CURSOR  DISCARDABLE     "cursor92.cur"
+ur_angle                CURSOR  DISCARDABLE     "cursor94.cur"
+watch                   CURSOR  DISCARDABLE     "cursor96.cur"
+xterm                   CURSOR  DISCARDABLE     "cursor98.cur"
diff --git a/tk/win/rc/tk_dll.rc b/tk/win/rc/tk_dll.rc
new file mode 100644 (file)
index 0000000..4cea329
--- /dev/null
@@ -0,0 +1,169 @@
+// RCS: @(#) $Id$
+//
+// Version
+//
+
+#include <windows.h>
+#define RESOURCE_INCLUDED
+#include <tk.h>
+
+#define STRINGIFY1(x)       #x
+#define STRINGIFY(x)        STRINGIFY1(x) 
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION    TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL
+ PRODUCTVERSION TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL
+ FILEFLAGSMASK 0x3fL
+ FILEFLAGS     0x0L
+ FILEOS                0x4L
+ FILETYPE      0x2L
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription", "Tk DLL\0"
+            VALUE "OriginalFilename", "tk" STRINGIFY(TK_MAJOR_VERSION) STRINGIFY(TK_MINOR_VERSION) ".dll\0"
+            VALUE "CompanyName", "Scriptics Corporation\0"
+            VALUE "FileVersion", TK_PATCH_LEVEL
+            VALUE "LegalCopyright", "Copyright \251 2000 by Scriptics Corporation\0"
+            VALUE "ProductName", "Tk " TK_VERSION " for Windows\0"
+            VALUE "ProductVersion", TK_PATCH_LEVEL
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+// RCS: @(#) $Id$
+//
+//  Base resources needed by Tk whether it's a DLL or a static library.
+//
+
+//
+//  Tk Icon
+//
+
+tk                      ICON    DISCARDABLE     "tk.ico"
+
+#include <dlgs.h>
+
+FILEOPENORD DIALOG DISCARDABLE  36, 24, 218, 138
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Choose Directory"
+FONT 8, "Helv"
+BEGIN
+    LTEXT           "Directory &name:",-1,8,6,118,9
+    EDITTEXT        edt10,8,26,144,12, WS_TABSTOP | ES_AUTOHSCROLL
+    LISTBOX         lst2,8,40,144,64,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                    LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | 
+                    LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Dri&ves:",stc4,8,106,92,9
+    COMBOBOX        cmb2,8,115,144,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL | WS_TABSTOP
+    DEFPUSHBUTTON   "OK",1,160,6,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",2,160,24,50,14,WS_GROUP
+    PUSHBUTTON      "&Help",psh15,160,42,50,14,WS_GROUP
+    CHECKBOX        "&Read only",chx1,160,66,50,12,WS_GROUP
+    PUSHBUTTON      "Net&work...",psh14,160,115,50,14,WS_GROUP
+
+    LTEXT           "a",stc3,9,143,114,15
+    EDITTEXT        edt1,7,158,135,20,NOT WS_TABSTOP
+    LISTBOX         lst1,8,205,134,42,LBS_NOINTEGRALHEIGHT
+    COMBOBOX        cmb1,8,253,135,21,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL
+
+END
+
+
+//
+// Bitmaps
+//
+
+buttons                        BITMAP  DISCARDABLE     "buttons.bmp"
+
+//
+// Cursors
+//
+
+X_cursor                CURSOR  DISCARDABLE     "cursor00.cur"
+arrow                   CURSOR  DISCARDABLE     "cursor02.cur"
+based_arrow_down        CURSOR  DISCARDABLE     "cursor04.cur"
+based_arrow_up          CURSOR  DISCARDABLE     "cursor06.cur"
+boat                    CURSOR  DISCARDABLE     "cursor08.cur"
+bogosity                CURSOR  DISCARDABLE     "cursor0a.cur"
+bottom_left_corner      CURSOR  DISCARDABLE     "cursor0c.cur"
+bottom_right_corner     CURSOR  DISCARDABLE     "cursor0e.cur"
+bottom_side             CURSOR  DISCARDABLE     "cursor10.cur"
+bottom_tee              CURSOR  DISCARDABLE     "cursor12.cur"
+box_spiral              CURSOR  DISCARDABLE     "cursor14.cur"
+center_ptr              CURSOR  DISCARDABLE     "cursor16.cur"
+circle                  CURSOR  DISCARDABLE     "cursor18.cur"
+clock                   CURSOR  DISCARDABLE     "cursor1a.cur"
+coffee_mug              CURSOR  DISCARDABLE     "cursor1c.cur"
+cross                   CURSOR  DISCARDABLE     "cursor1e.cur"
+cross_reverse           CURSOR  DISCARDABLE     "cursor20.cur"
+crosshair               CURSOR  DISCARDABLE     "cursor22.cur"
+diamond_cross           CURSOR  DISCARDABLE     "cursor24.cur"
+dot                     CURSOR  DISCARDABLE     "cursor26.cur"
+dotbox                  CURSOR  DISCARDABLE     "cursor28.cur"
+double_arrow            CURSOR  DISCARDABLE     "cursor2a.cur"
+draft_large             CURSOR  DISCARDABLE     "cursor2c.cur"
+draft_small             CURSOR  DISCARDABLE     "cursor2e.cur"
+draped_box              CURSOR  DISCARDABLE     "cursor30.cur"
+exchange                CURSOR  DISCARDABLE     "cursor32.cur"
+fleur                   CURSOR  DISCARDABLE     "cursor34.cur"
+gobbler                 CURSOR  DISCARDABLE     "cursor36.cur"
+gumby                   CURSOR  DISCARDABLE     "cursor38.cur"
+hand1                   CURSOR  DISCARDABLE     "cursor3a.cur"
+hand2                   CURSOR  DISCARDABLE     "cursor3c.cur"
+heart                   CURSOR  DISCARDABLE     "cursor3e.cur"
+icon                    CURSOR  DISCARDABLE     "cursor40.cur"
+iron_cross              CURSOR  DISCARDABLE     "cursor42.cur"
+left_ptr                CURSOR  DISCARDABLE     "cursor44.cur"
+left_side               CURSOR  DISCARDABLE     "cursor46.cur"
+left_tee                CURSOR  DISCARDABLE     "cursor48.cur"
+leftbutton              CURSOR  DISCARDABLE     "cursor4a.cur"
+ll_angle                CURSOR  DISCARDABLE     "cursor4c.cur"
+lr_angle                CURSOR  DISCARDABLE     "cursor4e.cur"
+man                     CURSOR  DISCARDABLE     "cursor50.cur"
+middlebutton            CURSOR  DISCARDABLE     "cursor52.cur"
+mouse                   CURSOR  DISCARDABLE     "cursor54.cur"
+pencil                  CURSOR  DISCARDABLE     "cursor56.cur"
+pirate                  CURSOR  DISCARDABLE     "cursor58.cur"
+plus                    CURSOR  DISCARDABLE     "cursor5a.cur"
+question_arrow          CURSOR  DISCARDABLE     "cursor5c.cur"
+right_ptr               CURSOR  DISCARDABLE     "cursor5e.cur"
+right_side              CURSOR  DISCARDABLE     "cursor60.cur"
+right_tee               CURSOR  DISCARDABLE     "cursor62.cur"
+rightbutton             CURSOR  DISCARDABLE     "cursor64.cur"
+rtl_logo                CURSOR  DISCARDABLE     "cursor66.cur"
+sailboat                CURSOR  DISCARDABLE     "cursor68.cur"
+sb_down_arrow           CURSOR  DISCARDABLE     "cursor6a.cur"
+sb_h_double_arrow       CURSOR  DISCARDABLE     "cursor6c.cur"
+sb_left_arrow           CURSOR  DISCARDABLE     "cursor6e.cur"
+sb_right_arrow          CURSOR  DISCARDABLE     "cursor70.cur"
+sb_up_arrow             CURSOR  DISCARDABLE     "cursor72.cur"
+sb_v_double_arrow       CURSOR  DISCARDABLE     "cursor74.cur"
+shuttle                 CURSOR  DISCARDABLE     "cursor76.cur"
+sizing                  CURSOR  DISCARDABLE     "cursor78.cur"
+spider                  CURSOR  DISCARDABLE     "cursor7a.cur"
+spraycan                CURSOR  DISCARDABLE     "cursor7c.cur"
+star                    CURSOR  DISCARDABLE     "cursor7e.cur"
+target                  CURSOR  DISCARDABLE     "cursor80.cur"
+tcross                  CURSOR  DISCARDABLE     "cursor82.cur"
+top_left_arrow          CURSOR  DISCARDABLE     "cursor84.cur"
+top_left_corner         CURSOR  DISCARDABLE     "cursor86.cur"
+top_right_corner        CURSOR  DISCARDABLE     "cursor88.cur"
+top_side                CURSOR  DISCARDABLE     "cursor8a.cur"
+top_tee                 CURSOR  DISCARDABLE     "cursor8c.cur"
+trek                    CURSOR  DISCARDABLE     "cursor8e.cur"
+ul_angle                CURSOR  DISCARDABLE     "cursor90.cur"
+umbrella                CURSOR  DISCARDABLE     "cursor92.cur"
+ur_angle                CURSOR  DISCARDABLE     "cursor94.cur"
+watch                   CURSOR  DISCARDABLE     "cursor96.cur"
+xterm                   CURSOR  DISCARDABLE     "cursor98.cur"
diff --git a/tk/win/rc/wish_static.rc b/tk/win/rc/wish_static.rc
new file mode 100644 (file)
index 0000000..80c3398
--- /dev/null
@@ -0,0 +1,177 @@
+// RCS: @(#) $Id$
+//
+// Version
+//
+#include <windows.h>
+
+#define RESOURCE_INCLUDED
+#include <tk.h>
+
+#define STRINGIFY1(x)       #x
+#define STRINGIFY(x)        STRINGIFY1(x) 
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION    TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL
+ PRODUCTVERSION TK_MAJOR_VERSION,TK_MINOR_VERSION,TK_RELEASE_LEVEL,TK_RELEASE_SERIAL
+ FILEFLAGSMASK 0x3fL
+ FILEFLAGS     0x0L
+ FILEOS                0x4L
+ FILETYPE      0x1L
+ FILESUBTYPE   0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "FileDescription", "Wish Application\0"
+            VALUE "OriginalFilename", "wish" STRINGIFY(TK_MAJOR_VERSION) STRINGIFY(TK_MINOR_VERSION) ".exe\0"
+            VALUE "CompanyName", "Scriptics Corporation\0"
+            VALUE "FileVersion", TK_PATCH_LEVEL
+            VALUE "LegalCopyright", "Copyright \251 2000 by Scriptics Corporation\0"
+            VALUE "ProductName", "Tk " TK_VERSION " for Windows\0"
+            VALUE "ProductVersion", TK_PATCH_LEVEL
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+//
+// Icon
+//
+
+wish                      ICON    DISCARDABLE     "wish.ico"
+
+
+// RCS: @(#) $Id$
+//
+//  Base resources needed by Tk whether it's a DLL or a static library.
+//
+
+//
+//  Tk Icon
+//
+
+tk                      ICON    DISCARDABLE     "tk.ico"
+
+#include <dlgs.h>
+
+FILEOPENORD DIALOG DISCARDABLE  36, 24, 218, 138
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Choose Directory"
+FONT 8, "Helv"
+BEGIN
+    LTEXT           "Directory &name:",-1,8,6,118,9
+    EDITTEXT        edt10,8,26,144,12, WS_TABSTOP | ES_AUTOHSCROLL
+    LISTBOX         lst2,8,40,144,64,LBS_SORT | LBS_OWNERDRAWFIXED | 
+                    LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | 
+                    LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Dri&ves:",stc4,8,106,92,9
+    COMBOBOX        cmb2,8,115,144,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL | WS_TABSTOP
+    DEFPUSHBUTTON   "OK",1,160,6,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",2,160,24,50,14,WS_GROUP
+    PUSHBUTTON      "&Help",psh15,160,42,50,14,WS_GROUP
+    CHECKBOX        "&Read only",chx1,160,66,50,12,WS_GROUP
+    PUSHBUTTON      "Net&work...",psh14,160,115,50,14,WS_GROUP
+
+    LTEXT           "a",stc3,9,143,114,15
+    EDITTEXT        edt1,7,158,135,20,NOT WS_TABSTOP
+    LISTBOX         lst1,8,205,134,42,LBS_NOINTEGRALHEIGHT
+    COMBOBOX        cmb1,8,253,135,21,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | 
+                    CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | 
+                    WS_VSCROLL
+
+END
+
+
+//
+// Bitmaps
+//
+
+buttons                        BITMAP  DISCARDABLE     "buttons.bmp"
+
+//
+// Cursors
+//
+
+X_cursor                CURSOR  DISCARDABLE     "cursor00.cur"
+arrow                   CURSOR  DISCARDABLE     "cursor02.cur"
+based_arrow_down        CURSOR  DISCARDABLE     "cursor04.cur"
+based_arrow_up          CURSOR  DISCARDABLE     "cursor06.cur"
+boat                    CURSOR  DISCARDABLE     "cursor08.cur"
+bogosity                CURSOR  DISCARDABLE     "cursor0a.cur"
+bottom_left_corner      CURSOR  DISCARDABLE     "cursor0c.cur"
+bottom_right_corner     CURSOR  DISCARDABLE     "cursor0e.cur"
+bottom_side             CURSOR  DISCARDABLE     "cursor10.cur"
+bottom_tee              CURSOR  DISCARDABLE     "cursor12.cur"
+box_spiral              CURSOR  DISCARDABLE     "cursor14.cur"
+center_ptr              CURSOR  DISCARDABLE     "cursor16.cur"
+circle                  CURSOR  DISCARDABLE     "cursor18.cur"
+clock                   CURSOR  DISCARDABLE     "cursor1a.cur"
+coffee_mug              CURSOR  DISCARDABLE     "cursor1c.cur"
+cross                   CURSOR  DISCARDABLE     "cursor1e.cur"
+cross_reverse           CURSOR  DISCARDABLE     "cursor20.cur"
+crosshair               CURSOR  DISCARDABLE     "cursor22.cur"
+diamond_cross           CURSOR  DISCARDABLE     "cursor24.cur"
+dot                     CURSOR  DISCARDABLE     "cursor26.cur"
+dotbox                  CURSOR  DISCARDABLE     "cursor28.cur"
+double_arrow            CURSOR  DISCARDABLE     "cursor2a.cur"
+draft_large             CURSOR  DISCARDABLE     "cursor2c.cur"
+draft_small             CURSOR  DISCARDABLE     "cursor2e.cur"
+draped_box              CURSOR  DISCARDABLE     "cursor30.cur"
+exchange                CURSOR  DISCARDABLE     "cursor32.cur"
+fleur                   CURSOR  DISCARDABLE     "cursor34.cur"
+gobbler                 CURSOR  DISCARDABLE     "cursor36.cur"
+gumby                   CURSOR  DISCARDABLE     "cursor38.cur"
+hand1                   CURSOR  DISCARDABLE     "cursor3a.cur"
+hand2                   CURSOR  DISCARDABLE     "cursor3c.cur"
+heart                   CURSOR  DISCARDABLE     "cursor3e.cur"
+icon                    CURSOR  DISCARDABLE     "cursor40.cur"
+iron_cross              CURSOR  DISCARDABLE     "cursor42.cur"
+left_ptr                CURSOR  DISCARDABLE     "cursor44.cur"
+left_side               CURSOR  DISCARDABLE     "cursor46.cur"
+left_tee                CURSOR  DISCARDABLE     "cursor48.cur"
+leftbutton              CURSOR  DISCARDABLE     "cursor4a.cur"
+ll_angle                CURSOR  DISCARDABLE     "cursor4c.cur"
+lr_angle                CURSOR  DISCARDABLE     "cursor4e.cur"
+man                     CURSOR  DISCARDABLE     "cursor50.cur"
+middlebutton            CURSOR  DISCARDABLE     "cursor52.cur"
+mouse                   CURSOR  DISCARDABLE     "cursor54.cur"
+pencil                  CURSOR  DISCARDABLE     "cursor56.cur"
+pirate                  CURSOR  DISCARDABLE     "cursor58.cur"
+plus                    CURSOR  DISCARDABLE     "cursor5a.cur"
+question_arrow          CURSOR  DISCARDABLE     "cursor5c.cur"
+right_ptr               CURSOR  DISCARDABLE     "cursor5e.cur"
+right_side              CURSOR  DISCARDABLE     "cursor60.cur"
+right_tee               CURSOR  DISCARDABLE     "cursor62.cur"
+rightbutton             CURSOR  DISCARDABLE     "cursor64.cur"
+rtl_logo                CURSOR  DISCARDABLE     "cursor66.cur"
+sailboat                CURSOR  DISCARDABLE     "cursor68.cur"
+sb_down_arrow           CURSOR  DISCARDABLE     "cursor6a.cur"
+sb_h_double_arrow       CURSOR  DISCARDABLE     "cursor6c.cur"
+sb_left_arrow           CURSOR  DISCARDABLE     "cursor6e.cur"
+sb_right_arrow          CURSOR  DISCARDABLE     "cursor70.cur"
+sb_up_arrow             CURSOR  DISCARDABLE     "cursor72.cur"
+sb_v_double_arrow       CURSOR  DISCARDABLE     "cursor74.cur"
+shuttle                 CURSOR  DISCARDABLE     "cursor76.cur"
+sizing                  CURSOR  DISCARDABLE     "cursor78.cur"
+spider                  CURSOR  DISCARDABLE     "cursor7a.cur"
+spraycan                CURSOR  DISCARDABLE     "cursor7c.cur"
+star                    CURSOR  DISCARDABLE     "cursor7e.cur"
+target                  CURSOR  DISCARDABLE     "cursor80.cur"
+tcross                  CURSOR  DISCARDABLE     "cursor82.cur"
+top_left_arrow          CURSOR  DISCARDABLE     "cursor84.cur"
+top_left_corner         CURSOR  DISCARDABLE     "cursor86.cur"
+top_right_corner        CURSOR  DISCARDABLE     "cursor88.cur"
+top_side                CURSOR  DISCARDABLE     "cursor8a.cur"
+top_tee                 CURSOR  DISCARDABLE     "cursor8c.cur"
+trek                    CURSOR  DISCARDABLE     "cursor8e.cur"
+ul_angle                CURSOR  DISCARDABLE     "cursor90.cur"
+umbrella                CURSOR  DISCARDABLE     "cursor92.cur"
+ur_angle                CURSOR  DISCARDABLE     "cursor94.cur"
+watch                   CURSOR  DISCARDABLE     "cursor96.cur"
+xterm                   CURSOR  DISCARDABLE     "cursor98.cur"
diff --git a/tk/win/tcl.m4 b/tk/win/tcl.m4
new file mode 100644 (file)
index 0000000..1522bbb
--- /dev/null
@@ -0,0 +1,634 @@
+#------------------------------------------------------------------------
+# SC_PATH_TCLCONFIG --
+#
+#      Locate the tclConfig.sh file and perform a sanity check on
+#      the Tcl compile flags
+#      Currently a no-op for Windows
+#
+# Arguments:
+#      PATCH_LEVEL     The patch level for Tcl if any.
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Sets the following vars:
+#              TCL_BIN_DIR     Full path to the tclConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_PATH_TCLCONFIG, [
+    AC_MSG_CHECKING([the location of tclConfig.sh])
+
+# CYGNUS LOCAL
+    if test -d ../../tcl8.1/win;  then
+       TCL_BIN_DIR_DEFAULT=../../tcl8.1/win
+    else
+       TCL_BIN_DIR_DEFAULT=../../tcl/win
+    fi
+# END CYGNUS LOCAL
+    
+    AC_ARG_WITH(tcl, [  --with-tcl=DIR          use Tcl 8.3 binaries from DIR],
+           TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd $TCL_BIN_DIR_DEFAULT; pwd`)
+    if test ! -d $TCL_BIN_DIR; then
+       AC_MSG_ERROR(Tcl directory $TCL_BIN_DIR does not exist)
+    fi
+    if test ! -f $TCL_BIN_DIR/tclConfig.sh; then
+       AC_MSG_ERROR(There is no tclConfig.sh in $TCL_BIN_DIR:  perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?)
+    fi
+    AC_MSG_RESULT($TCL_BIN_DIR/tclConfig.sh)
+])
+
+#------------------------------------------------------------------------
+# SC_PATH_TKCONFIG --
+#
+#      Locate the tkConfig.sh file
+#      Currently a no-op for Windows
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tk=...
+#
+#      Sets the following vars:
+#              TK_BIN_DIR      Full path to the tkConfig.sh file
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_PATH_TKCONFIG, [
+    AC_MSG_CHECKING([the location of tkConfig.sh])
+
+    if test -d ../../tk8.3$1/win;  then
+       TK_BIN_DIR_DEFAULT=../../tk8.3$1/win
+    else
+       TK_BIN_DIR_DEFAULT=../../tk8.3/win
+    fi
+    
+    AC_ARG_WITH(tk, [  --with-tk=DIR          use Tk 8.3 binaries from DIR],
+           TK_BIN_DIR=$withval, TK_BIN_DIR=`cd $TK_BIN_DIR_DEFAULT; pwd`)
+    if test ! -d $TK_BIN_DIR; then
+       AC_MSG_ERROR(Tk directory $TK_BIN_DIR does not exist)
+    fi
+    if test ! -f $TK_BIN_DIR/tkConfig.sh; then
+       AC_MSG_ERROR(There is no tkConfig.sh in $TK_BIN_DIR:  perhaps you did not specify the Tk *build* directory (not the toplevel Tk directory) or you forgot to configure Tk?)
+    fi
+
+    AC_MSG_RESULT([$TK_BIN_DIR/tkConfig.sh])
+])
+
+#------------------------------------------------------------------------
+# SC_LOAD_TCLCONFIG --
+#
+#      Load the tclConfig.sh file
+#      Currently a no-op for Windows
+#
+# Arguments:
+#      
+#      Requires the following vars to be set:
+#              TCL_BIN_DIR
+#
+# Results:
+#
+#      Subst the following vars:
+#              TCL_BIN_DIR
+#              TCL_SRC_DIR
+#              TCL_LIB_FILE
+#
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_LOAD_TCLCONFIG, [
+    AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh])
+
+    if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
+        AC_MSG_RESULT([loading])
+       . $TCL_BIN_DIR/tclConfig.sh
+    else
+        AC_MSG_RESULT([file not found])
+    fi
+
+    # The eval is required to do the TCL_DBGX substitution in the
+    # TCL_LIB_FILE variable.
+
+    eval TCL_LIB_FILE=${TCL_LIB_FILE}
+    eval TCL_LIB_FLAG=${TCL_LIB_FLAG}
+
+    AC_SUBST(TCL_BIN_DIR)
+    AC_SUBST(TCL_SRC_DIR)
+    AC_SUBST(TCL_LIB_FILE)
+])
+
+#------------------------------------------------------------------------
+# SC_LOAD_TKCONFIG --
+#
+#      Load the tkConfig.sh file
+#      Currently a no-op for Windows
+#
+# Arguments:
+#      
+#      Requires the following vars to be set:
+#              TK_BIN_DIR
+#
+# Results:
+#
+#      Sets the following vars that should be in tkConfig.sh:
+#              TK_BIN_DIR
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_LOAD_TKCONFIG, [
+    AC_MSG_CHECKING([for existence of $TCLCONFIG])
+
+    if test -f "$TK_BIN_DIR/tkConfig.sh" ; then
+        AC_MSG_CHECKING([loading $TK_BIN_DIR/tkConfig.sh])
+       . $TK_BIN_DIR/tkConfig.sh
+    else
+        AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh])
+    fi
+
+
+    AC_SUBST(TK_BIN_DIR)
+    AC_SUBST(TK_SRC_DIR)
+    AC_SUBST(TK_LIB_FILE)
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SHARED --
+#
+#      Allows the building of shared libraries
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-shared=yes|no
+#
+#      Defines the following vars:
+#              STATIC_BUILD    Used for building import/export libraries
+#                              on Windows.
+#
+#      Sets the following vars:
+#              SHARED_BUILD    Value of 1 or 0
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_SHARED, [
+    AC_MSG_CHECKING([how to build libraries])
+    AC_ARG_ENABLE(shared,
+       [  --enable-shared         build and link with shared libraries [--enable-shared]],
+    [tcl_ok=$enableval], [tcl_ok=yes])
+
+    if test "${enable_shared+set}" = set; then
+       enableval="$enable_shared"
+       tcl_ok=$enableval
+    else
+       tcl_ok=yes
+    fi
+
+    if test "$tcl_ok" = "yes" ; then
+       AC_MSG_RESULT([shared])
+       SHARED_BUILD=1
+    else
+       AC_MSG_RESULT([static])
+       SHARED_BUILD=0
+       AC_DEFINE(STATIC_BUILD)
+    fi
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_THREADS --
+#
+#      Specify if thread support should be enabled
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-threads=yes|no
+#
+#      Defines the following vars:
+#              TCL_THREADS
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_THREADS, [
+    AC_MSG_CHECKING(for building with threads)
+    AC_ARG_ENABLE(threads, [  --enable-threads        build with threads],
+       [tcl_ok=$enableval], [tcl_ok=no])
+
+    if test "$tcl_ok" = "yes"; then
+       AC_MSG_RESULT(yes)
+       TCL_THREADS=1
+       AC_DEFINE(TCL_THREADS)
+    else
+       TCL_THREADS=0
+       AC_MSG_RESULT([no (default)])
+    fi
+])
+
+#------------------------------------------------------------------------
+# SC_ENABLE_SYMBOLS --
+#
+#      Specify if debugging symbols should be used
+#
+# Arguments:
+#      none
+#      
+#      Requires the following vars to be set in the Makefile:
+#              CFLAGS_DEBUG
+#              CFLAGS_OPTIMIZE
+#              LDFLAGS_DEBUG
+#              LDFLAGS_OPTIMIZE
+#      
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --enable-symbols
+#
+#      Defines the following vars:
+#              CFLAGS_DEFAULT  Set to $(CFLAGS_DEBUG) if true
+#                              Set to $(CFLAGS_OPTIMIZE) if false
+#              LDFLAGS_DEFAULT Set to $(LDFLAGS_DEBUG) if true
+#                              Set to $(LDFLAGS_OPTIMIZE) if false
+#              DBGX            Debug library extension
+#
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_ENABLE_SYMBOLS, [
+    AC_MSG_CHECKING([for build with symbols])
+    AC_ARG_ENABLE(symbols, [  --enable-symbols        build with debugging symbols [--disable-symbols]],    [tcl_ok=$enableval], [tcl_ok=no])
+
+    if test "$tcl_ok" = "yes"; then
+       CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
+       LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
+       DBGX=d
+       AC_MSG_RESULT([yes])
+    else
+       CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
+       LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
+       DBGX=""
+       AC_MSG_RESULT([no])
+    fi
+])
+
+
+#--------------------------------------------------------------------
+# SC_CONFIG_CFLAGS
+#
+#      Try to determine the proper flags to pass to the compiler
+#      for building shared libraries and other such nonsense.
+#
+#      NOTE: The backslashes in quotes below are substituted twice
+#      due to the fact that they are in a macro and then inlined
+#      in the final configure script.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Can set the following vars:
+#              EXTRA_CFLAGS
+#              CFLAGS_DEBUG
+#              CFLAGS_OPTIMIZE
+#              CFLAGS_WARNING
+#              LDFLAGS_DEBUG
+#              LDFLAGS_OPTIMIZE
+#              LDFLAGS_CONSOLE
+#              LDFLAGS_WINDOW
+#              CC_OBJNAME
+#              CC_EXENAME
+#              CYGPATH
+#              STLIB_LD
+#              SHLIB_LD
+#              SHLIB_LD_LIBS
+#              LIBS
+#              AR
+#              RC
+#              RES
+#
+#              MAKE_LIB
+#              MAKE_EXE
+#              MAKE_DLL
+#
+#              LIBSUFFIX
+#              LIBPREFIX
+#              VENDORPREFIX
+#              LIBRARIES
+#              EXESUFFIX
+#              DLLSUFFIX
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_CONFIG_CFLAGS, [
+    TCL_LIB_VERSIONS_OK=nodots
+
+    AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo)
+
+    # Check for a bug in gcc's windres that causes the
+    # compile to fail when a Windows native path is
+    # passed into windres. The mingw toolchain requires
+    # Windows native paths while Cygwin should work
+    # with both. Avoid the bug by passing a POSIX
+    # path when using the Cygwin toolchain.
+
+    if test "$GCC" = "yes" && test "$CYGPATH" != "echo" ; then
+        conftest=/tmp/conftest.rc
+        echo "STRINGTABLE BEGIN" > $conftest
+        echo "101 \"name\"" >> $conftest
+        echo "END" >> $conftest
+
+        AC_MSG_CHECKING([for Windows native path bug in windres])
+        cyg_conftest=`$CYGPATH $conftest`
+        if AC_TRY_COMMAND($RC -o conftest.res.o $cyg_conftest) ; then
+            AC_MSG_RESULT([no])
+        else
+            AC_MSG_RESULT([yes])
+            CYGPATH=echo
+        fi
+        conftest=
+        cyg_conftest=
+    fi
+
+    if test "$CYGPATH" = "echo" || test "$ac_cv_cygwin" = "yes"; then
+        DEPARG='"$<"'
+    else
+        DEPARG='"$(shell $(CYGPATH) $<)"'
+    fi
+
+    VENDORPREFIX=""
+
+    # set various compiler flags depending on whether we are using gcc or cl
+
+    AC_MSG_CHECKING([compiler flags])
+    if test "${GCC}" = "yes" ; then
+
+       # CYGNUS LOCAL
+       VENDORPREFIX="cyg"
+
+       SHLIB_LD=""
+       SHLIB_LD_LIBS=""
+       LIBS=""
+       LIBS_GUI="-lgdi32 -lcomdlg32"
+       STLIB_LD="${AR} cr"
+       RC_OUT=-o
+       RC_TYPE=
+       RC_INCLUDE=--include
+       RES=res.o
+       MAKE_LIB="\${STLIB_LD} \[$]@"
+       POST_MAKE_LIB="\${RANLIB} \[$]@"
+       MAKE_EXE="\${CC} -o \[$]@"
+       LIBPREFIX="lib${VENDORPREFIX}"
+
+       if test "${SHARED_BUILD}" = "0" ; then
+           # static
+            AC_MSG_RESULT([using static flags])
+           runtime=
+           MAKE_DLL="echo "
+           LIBSUFFIX="s\${DBGX}.a"
+           LIBRARIES="\${STATIC_LIBRARIES}"
+           EXESUFFIX="s\${DBGX}.exe"
+           DLLSUFFIX=""
+       else
+           # dynamic
+            AC_MSG_RESULT([using shared flags])
+
+           # ad-hoc check to see if CC supports -shared.
+           if "${CC}" -shared 2>&1 | egrep ': -shared not supported' >/dev/null; then
+               AC_MSG_ERROR([${CC} does not support the -shared option.
+               You will need to upgrade to a newer version of the toolchain.])
+           fi
+
+           runtime=
+           # Link with gcc since ld does not link to default libs like
+           # -luser32 and -lmsvcrt. We also need to add CFLAGS so important
+           # flags like -mno-cygwin get passed in to CC.
+           SHLIB_LD='${CC} -shared ${CFLAGS}'
+           # Add SHLIB_LD_LIBS to the Make rule, not here.
+           MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \[$]@ ${extra_ldflags} \
+               -Wl,--out-implib,\$(patsubst %.dll,lib%.a,\[$]@)"
+
+           LIBSUFFIX="\${DBGX}.a"
+           DLLSUFFIX="\${DBGX}.dll"
+           EXESUFFIX="\${DBGX}.exe"
+           LIBRARIES="\${SHARED_LIBRARIES}"
+       fi
+
+       CFLAGS_DEBUG=-g
+       CFLAGS_OPTIMIZE=-O
+       CFLAGS_WARNING="-Wall -Wconversion"
+       LDFLAGS_DEBUG=
+       LDFLAGS_OPTIMIZE=
+
+       # Specify the CC output file names based on the target name
+       CC_OBJNAME="-o \[$]@"
+       CC_EXENAME="-o \[$]@"
+
+       # Specify linker flags depending on the type of app being 
+       # built -- Console vs. Window.
+       #
+       # We need to pass -e _WinMain@16 so that ld will use
+       # WinMain() instead of main() as the entry point. We can't
+       # use autoconf to check for this case since it would need
+       # to run an executable and that does not work when
+       # cross compiling. Remove this -e workaround once we
+       # require a gcc that does not have this bug.
+       LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}"
+       LDFLAGS_WINDOW="-mwindows -e _WinMain@16 ${extra_ldflags}"
+    else
+       # CYGNUS LOCAL
+       VENDORPREFIX="sn"
+
+       SHLIB_LD="link -dll -nologo"
+       SHLIB_LD_LIBS="user32.lib advapi32.lib"
+       LIBS="user32.lib advapi32.lib"
+       LIBS_GUI="gdi32.lib comdlg32.lib"
+       STLIB_LD="lib -nologo"
+       RC="rc"
+       RC_OUT=-fo
+       RC_TYPE=-r
+       RC_INCLUDE=-i
+       RES=res
+       MAKE_LIB="\${STLIB_LD} -out:\[$]@"
+       POST_MAKE_LIB=
+       MAKE_EXE="\${CC} -Fe\[$]@"
+       LIBPREFIX=${VENDORPREFIX}
+
+       if test "${SHARED_BUILD}" = "0" ; then
+           # static
+            AC_MSG_RESULT([using static flags])
+           runtime=-MT
+           MAKE_DLL="echo "
+           LIBSUFFIX="s\${DBGX}.lib"
+           LIBRARIES="\${STATIC_LIBRARIES}"
+           EXESUFFIX="s\${DBGX}.exe"
+           DLLSUFFIX=""
+       else
+           # dynamic
+            AC_MSG_RESULT([using shared flags])
+           runtime=-MD
+           # Add SHLIB_LD_LIBS to the Make rule, not here.
+           MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\[$]@"
+           LIBSUFFIX="\${DBGX}.lib"
+           DLLSUFFIX="\${DBGX}.dll"
+           EXESUFFIX="\${DBGX}.exe"
+           LIBRARIES="\${SHARED_LIBRARIES}"
+       fi
+
+       EXTRA_CFLAGS="-YX"
+       CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d"
+#      CFLAGS_OPTIMIZE="-nologo -O2 -Gs -GD ${runtime}"
+       CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}"
+       CFLAGS_WARNING="-W3"
+       LDFLAGS_DEBUG="-debug:full -debugtype:cv"
+       LDFLAGS_OPTIMIZE="-release"
+
+       # Specify the CC output file names based on the target name
+       CC_OBJNAME="-Fo\[$]@"
+       CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\[$]@')\""
+
+       # Specify linker flags depending on the type of app being 
+       # built -- Console vs. Window.
+       LDFLAGS_CONSOLE="-link -subsystem:console"
+       LDFLAGS_WINDOW="-link -subsystem:windows"
+    fi
+
+    # TCL_LIB_SUFFIX is defined here and in tclConfig.sh so that macros
+    # can use a single variable name for both Tcl and extensions.
+    TCL_LIB_SUFFIX=$LIBSUFFIX
+])
+
+#------------------------------------------------------------------------
+# SC_WITH_TCL --
+#
+#      Location of the Tcl build directory.
+#
+# Arguments:
+#      none
+#
+# Results:
+#
+#      Adds the following arguments to configure:
+#              --with-tcl=...
+#
+#      Defines the following vars:
+#              TCL_BIN_DIR     Full path to the tcl build dir.
+#------------------------------------------------------------------------
+
+AC_DEFUN(SC_WITH_TCL, [
+    if test -d ../../tcl8.3$1/win;  then
+       TCL_BIN_DEFAULT=../../tcl8.3$1/win
+    else
+       TCL_BIN_DEFAULT=../../tcl8.3/win
+    fi
+    
+    AC_ARG_WITH(tcl, [  --with-tcl=DIR          use Tcl 8.3 binaries from DIR],
+           TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd $TCL_BIN_DEFAULT; pwd`)
+    if test ! -d $TCL_BIN_DIR; then
+       AC_MSG_ERROR(Tcl directory $TCL_BIN_DIR does not exist)
+    fi
+    if test ! -f $TCL_BIN_DIR/Makefile; then
+       AC_MSG_ERROR(There is no Makefile in $TCL_BIN_DIR:  perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?)
+    else
+       echo "building against Tcl binaries in: $TCL_BIN_DIR"
+    fi
+    AC_SUBST(TCL_BIN_DIR)
+])
+
+#--------------------------------------------------------------------
+# SC_TIME_HANLDER
+#
+#      Checks how the system deals with time.h, what time structures
+#      are used on the system, and what fields the structures have.
+#
+# Arguments:
+#      none
+#      
+# Results:
+#
+#      Defines some of the following vars:
+#              USE_DELTA_FOR_TZ
+#              HAVE_TM_GMTOFF
+#              HAVE_TM_TZADJ
+#              HAVE_TIMEZONE_VAR
+#
+#--------------------------------------------------------------------
+
+AC_DEFUN(SC_TIME_HANDLER, [
+    AC_CHECK_HEADERS(sys/time.h)
+    AC_HEADER_TIME
+    AC_STRUCT_TIMEZONE
+
+    AC_MSG_CHECKING([tm_tzadj in struct tm])
+    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
+           [AC_DEFINE(HAVE_TM_TZADJ)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    AC_MSG_CHECKING([tm_gmtoff in struct tm])
+    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
+           [AC_DEFINE(HAVE_TM_GMTOFF)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    #
+    # Its important to include time.h in this check, as some systems
+    # (like convex) have timezone functions, etc.
+    #
+    have_timezone=no
+    AC_MSG_CHECKING([long timezone variable])
+    AC_TRY_COMPILE([#include <time.h>],
+           [extern long timezone;
+           timezone += 1;
+           exit (0);],
+           [have_timezone=yes
+           AC_DEFINE(HAVE_TIMEZONE_VAR)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+
+    #
+    # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
+    #
+    if test "$have_timezone" = no; then
+    AC_MSG_CHECKING([time_t timezone variable])
+    AC_TRY_COMPILE([#include <time.h>],
+           [extern time_t timezone;
+           timezone += 1;
+           exit (0);],
+           [AC_DEFINE(HAVE_TIMEZONE_VAR)
+           AC_MSG_RESULT(yes)],
+           AC_MSG_RESULT(no))
+    fi
+
+    #
+    # On some systems (eg Solaris 2.5.1), timezone is not declared in
+    # time.h unless you jump through hoops.  Instead of that, we just
+    # declare it ourselves when necessary.
+    #
+    if test "$have_timezone" = yes; then
+       AC_MSG_CHECKING(for timezone declaration)
+       changequote(<<,>>)
+       tzrx='^[        ]*extern.*timezone'
+       changequote([,])
+       AC_EGREP_HEADER($tzrx, time.h, [
+       AC_DEFINE(HAVE_TIMEZONE_DECL)
+       AC_MSG_RESULT(found)], AC_MSG_RESULT(missing))
+    fi
+
+    #
+    # AIX does not have a timezone field in struct tm. When the AIX bsd
+    # library is used, the timezone global and the gettimeofday methods are
+    # to be avoided for timezone deduction instead, we deduce the timezone
+    # by comparing the localtime result on a known GMT value.
+    #
+
+    if test "`uname -s`" = "AIX" ; then
+       AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes)
+       if test $libbsd = yes; then
+           AC_DEFINE(USE_DELTA_FOR_TZ)
+       fi
+    fi
+])
+
diff --git a/tk/win/tkConfig.sh.in b/tk/win/tkConfig.sh.in
new file mode 100644 (file)
index 0000000..3e2dbf3
--- /dev/null
@@ -0,0 +1,92 @@
+# tkConfig.sh --
+# 
+# This shell script (for sh) is generated automatically by Tk's
+# configure script.  It will create shell variables for most of
+# the configuration options discovered by the configure script.
+# This script is intended to be included by the configure scripts
+# for Tk extensions so that they don't have to figure this all
+# out for themselves.  This file does not duplicate information
+# already provided by tclConfig.sh, so you may need to use that
+# file in addition to this one.
+#
+# The information in this file is specific to a single platform.
+#
+# RCS: @(#) $Id$
+
+# Tk's version number.
+TK_VERSION='@TK_VERSION@'
+TK_MAJOR_VERSION='@TK_MAJOR_VERSION@'
+TK_MINOR_VERSION='@TK_MINOR_VERSION@'
+TK_PATCH_LEVEL='@TK_PATCH_LEVEL@'
+
+# -D flags for use with the C compiler.
+TK_DEFS='@DEFS@'
+
+# Flag, 1: we built a shared lib, 0 we didn't
+TK_SHARED_BUILD=@TK_SHARED_BUILD@
+
+# This indicates if Tk was build with debugging symbols
+TK_DBGX=@TK_DBGX@
+
+# The name of the Tk library (may be either a .a file or a shared library):
+TK_LIB_FILE='@TK_LIB_FILE@'
+
+# Additional libraries to use when linking Tk.
+TK_LIBS='@LIBS@ @LIBS_GUI@'
+LIBS_GUI='@LIBS_GUI@'
+
+# Top-level directory in which Tcl's platform-independent files are
+# installed.
+TK_PREFIX='@prefix@'
+
+# Top-level directory in which Tcl's platform-specific files (e.g.
+# executables) are installed.
+TK_EXEC_PREFIX='@exec_prefix@'
+
+# -I switch(es) to use to make all of the X11 include files accessible:
+TK_XINCLUDES='@XINCLUDES@'
+
+# -l flag to pass to the linker to pick up the Tcl library
+TK_LIB_FLAG='@TK_LIB_FLAG@'
+
+# String to pass to linker to pick up the Tk library from its
+# build directory.
+TK_BUILD_LIB_SPEC='@TK_BUILD_LIB_SPEC@'
+
+# String to pass to linker to pick up the Tk library from its
+# installed directory.
+TK_LIB_SPEC='@TK_LIB_SPEC@'
+
+# Location of the top-level source directory from which Tk was built.
+# This is the directory that contains a README file as well as
+# subdirectories such as generic, unix, etc.  If Tk was compiled in a
+# different place than the directory containing the source files, this
+# points to the location of the sources, not the location where Tk was
+# compiled.
+TK_SRC_DIR='@TK_SRC_DIR@'
+
+# Needed if you want to make a 'fat' shared library library
+# containing tk objects or link a different wish.
+TK_CC_SEARCH_FLAGS='@TK_CC_SEARCH_FLAGS@'
+TK_LD_SEARCH_FLAGS='@TK_LD_SEARCH_FLAGS@'
+
+# The name of the Tk stub library (.a):
+TK_STUB_LIB_FILE='@TK_STUB_LIB_FILE@'
+
+# -l flag to pass to the linker to pick up the Tk stub library
+TK_STUB_LIB_FLAG='@TK_STUB_LIB_FLAG@'
+
+# String to pass to linker to pick up the Tk stub library from its
+# build directory.
+TK_BUILD_STUB_LIB_SPEC='@TK_BUILD_STUB_LIB_SPEC@'
+
+# String to pass to linker to pick up the Tk stub library from its
+# installed directory.
+TK_STUB_LIB_SPEC='@TK_STUB_LIB_SPEC@'
+
+# Path to the Tk stub library in the build directory.
+TK_BUILD_STUB_LIB_PATH='@TK_BUILD_STUB_LIB_PATH@'
+
+# Path to the Tk stub library in the install directory.
+TK_STUB_LIB_PATH='@TK_STUB_LIB_PATH@'
+
diff --git a/tk/win/tkWinConfig.c b/tk/win/tkWinConfig.c
new file mode 100644 (file)
index 0000000..c8c4f76
--- /dev/null
@@ -0,0 +1,61 @@
+/* 
+ * tkWinConfig.c --
+ *
+ *     This module implements the Windows system defaults for
+ *     the configuration package.
+ *
+ * Copyright (c) 1997 by Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tk.h"
+#include "tkInt.h"
+#include "tkWinInt.h"
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkpGetSystemDefault --
+ *
+ *     Given a dbName and className for a configuration option,
+ *     return a string representation of the option.
+ *
+ * Results:
+ *     Returns a Tk_Uid that is the string identifier that identifies
+ *     this option. Returns NULL if there are no system defaults
+ *     that match this pair.
+ *
+ * Side effects:
+ *     None, once the package is initialized.
+ *
+ *----------------------------------------------------------------------
+ */
+
+Tcl_Obj *
+TkpGetSystemDefault(
+    Tk_Window tkwin,           /* A window to use. */
+    char *dbName,              /* The option database name. */
+    char *className)           /* The name of the option class. */
+{
+    Tcl_Obj *valueObjPtr;
+    Tk_Uid classUid;
+
+    if (tkwin == NULL) {
+       return NULL;
+    }
+
+    valueObjPtr = NULL;
+    classUid = Tk_Class(tkwin);
+
+    if (strcmp(classUid, "Menu") == 0) {
+       valueObjPtr = TkWinGetMenuSystemDefault(tkwin, dbName, className);
+    }
+
+    return valueObjPtr;
+}
+
diff --git a/tk/win/tkWinTest.c b/tk/win/tkWinTest.c
new file mode 100644 (file)
index 0000000..dd66ce0
--- /dev/null
@@ -0,0 +1,250 @@
+/* 
+ * tkWinTest.c --
+ *
+ *     Contains commands for platform specific tests for
+ *     the Windows platform.
+ *
+ * Copyright (c) 1997 Sun Microsystems, Inc.
+ * Copyright (c) 2000 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id$
+ */
+
+#include "tkWinInt.h"
+
+HWND tkWinCurrentDialog;
+/*
+ * Forward declarations of procedures defined later in this file:
+ */
+
+int                    TkplatformtestInit(Tcl_Interp *interp);
+static int             TestclipboardObjCmd(ClientData clientData,
+                           Tcl_Interp *interp, int objc,
+                           Tcl_Obj *CONST objv[]);
+static int             TestwineventCmd(ClientData clientData, 
+                           Tcl_Interp *interp, int argc, char **argv);
+
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TkplatformtestInit --
+ *
+ *     Defines commands that test platform specific functionality for
+ *     Unix platforms.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     Defines new commands.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TkplatformtestInit(
+    Tcl_Interp *interp)                /* Interpreter to add commands to. */
+{
+    /*
+     * Add commands for platform specific tests on MacOS here.
+     */
+    
+    Tcl_CreateObjCommand(interp, "testclipboard", TestclipboardObjCmd,
+           (ClientData) Tk_MainWindow(interp), (Tcl_CmdDeleteProc *) NULL);
+    Tcl_CreateCommand(interp, "testwinevent", TestwineventCmd,
+            (ClientData) Tk_MainWindow(interp), (Tcl_CmdDeleteProc *) NULL);
+
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TestclipboardObjCmd --
+ *
+ *     This procedure implements the testclipboard command. It provides
+ *     a way to determine the actual contents of the Windows clipboard.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TestclipboardObjCmd(clientData, interp, objc, objv)
+    ClientData clientData;             /* Main window for application. */
+    Tcl_Interp *interp;                        /* Current interpreter. */
+    int objc;                          /* Number of arguments. */
+    Tcl_Obj *CONST objv[];             /* Argument values. */
+{
+    TkWindow *winPtr = (TkWindow *) clientData;
+    HGLOBAL handle;
+    char *data;
+
+    if (objc != 1) {
+       Tcl_WrongNumArgs(interp, 1, objv, (char *) NULL);
+       return TCL_ERROR;
+    }
+    if (OpenClipboard(NULL)) {
+       /*
+        * We could consider using CF_UNICODETEXT on NT, but then we
+        * would have to convert it from External.  Instead we'll just
+        * take this and do "bytestring" at the Tcl level for Unicode
+        * inclusive text
+        */
+       handle = GetClipboardData(CF_TEXT);
+       if (handle != NULL) {
+           data = GlobalLock(handle);
+           Tcl_AppendResult(interp, data, (char *) NULL);
+           GlobalUnlock(handle);
+       } else {
+           Tcl_AppendResult(interp, "null clipboard handle", (char *) NULL);
+           return TCL_ERROR;
+       }
+       CloseClipboard();
+    } else {
+       Tcl_AppendResult(interp, "couldn't open clipboard", (char *) NULL);
+       return TCL_ERROR;
+    }
+    return TCL_OK;
+}
+\f
+/*
+ *----------------------------------------------------------------------
+ *
+ * TestwineventCmd --
+ *
+ *     This procedure implements the testwinevent command. It provides
+ *     a way to send messages to windows dialogs.
+ *
+ * Results:
+ *     A standard Tcl result.
+ *
+ * Side effects:
+ *     None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TestwineventCmd(clientData, interp, argc, argv)
+    ClientData clientData;             /* Main window for application. */
+    Tcl_Interp *interp;                        /* Current interpreter. */
+    int argc;                          /* Number of arguments. */
+    char **argv;                       /* Argument strings. */
+{
+    HWND hwnd;
+    int id;
+    char *rest;
+    UINT message;
+    WPARAM wParam;
+    LPARAM lParam;
+    static TkStateMap messageMap[] = {
+       {WM_LBUTTONDOWN,        "WM_LBUTTONDOWN"},
+       {WM_LBUTTONUP,          "WM_LBUTTONUP"},
+       {WM_CHAR,               "WM_CHAR"},
+       {WM_GETTEXT,            "WM_GETTEXT"},
+       {WM_SETTEXT,            "WM_SETTEXT"},
+       {-1,                    NULL}
+    };
+
+    if ((argc == 3) && (strcmp(argv[1], "debug") == 0)) {
+       int i;
+
+       if (Tcl_GetBoolean(interp, argv[2], &i) != TCL_OK) {
+           return TCL_ERROR;
+       }
+       TkWinDialogDebug(i);
+       return TCL_OK;
+    }
+
+    if (argc < 4) {
+       return TCL_ERROR;
+    }
+
+    hwnd = (HWND) strtol(argv[1], &rest, 0);
+    if (rest == argv[2]) {
+       hwnd = FindWindow(NULL, argv[1]);
+       if (hwnd == NULL) {
+           Tcl_SetResult(interp, "no such window", TCL_STATIC);
+           return TCL_ERROR;
+       }
+    } 
+    UpdateWindow(hwnd);
+
+    id = strtol(argv[2], &rest, 0);
+    if (rest == argv[2]) {
+       HWND child;
+       char buf[256];
+
+       child = GetWindow(hwnd, GW_CHILD);
+       while (child != NULL) {
+           SendMessage(child, WM_GETTEXT, (WPARAM) sizeof(buf), (LPARAM) buf);
+           if (strcasecmp(buf, argv[2]) == 0) {
+               id = GetDlgCtrlID(child);
+               break;
+           }
+           child = GetWindow(child, GW_HWNDNEXT);
+       }
+       if (child == NULL) {
+           return TCL_ERROR;
+       }
+    }
+    message = TkFindStateNum(NULL, NULL, messageMap, argv[3]);
+    if (message < 0) {
+       message = strtol(argv[3], NULL, 0);
+    }
+    wParam = 0;
+    lParam = 0;
+
+    if (argc > 4) {
+       wParam = strtol(argv[4], NULL, 0);
+    }
+    if (argc > 5) {
+       lParam = strtol(argv[5], NULL, 0);
+    }
+
+    switch (message) {
+       case WM_GETTEXT: {
+           Tcl_DString ds;
+           char buf[256];
+
+           GetDlgItemText(hwnd, id, buf, 256);
+           Tcl_ExternalToUtfDString(NULL, buf, -1, &ds);
+           Tcl_AppendResult(interp, Tcl_DStringValue(&ds), NULL);
+           Tcl_DStringFree(&ds);
+           break;
+       }
+       case WM_SETTEXT: {
+           Tcl_DString ds;
+
+           Tcl_UtfToExternalDString(NULL, argv[4], -1, &ds);
+           SetDlgItemText(hwnd, id, Tcl_DStringValue(&ds));
+           Tcl_DStringFree(&ds);
+           break;
+       }
+       default: {
+           char buf[TCL_INTEGER_SPACE];
+           
+           sprintf(buf, "%d", 
+                   SendDlgItemMessage(hwnd, id, message, wParam, lParam));
+           Tcl_SetResult(interp, buf, TCL_VOLATILE);
+           break;
+       }
+    }
+    return TCL_OK;
+}
+    
+
+
+
+
diff --git a/tk/win/winDumpExts.c b/tk/win/winDumpExts.c
new file mode 100644 (file)
index 0000000..8bc496e
--- /dev/null
@@ -0,0 +1,503 @@
+/* 
+ * winDumpExts.c --
+ * Author:   Gordon Chaffee, Scott Stanton
+ *
+ * History:  The real functionality of this file was written by
+ *           Matt Pietrek in 1993 in his pedump utility.  I've
+ *           modified it to dump the externals in a bunch of object
+ *           files to create a .def file.
+ *
+ * 10/12/95  Modified by Scott Stanton to support Relocatable Object Module
+ *          Format files for Borland C++ 4.5.
+ *
+ * Notes:    Visual C++ puts an underscore before each exported symbol.
+ *           This file removes them.  I don't know if this is a problem
+ *           this other compilers.  If _MSC_VER is defined,
+ *           the underscore is removed.  If not, it isn't.  To get a
+ *           full dump of an object file, use the -f option.  This can
+ *           help determine the something that may be different with a
+ *           compiler other than Visual C++.
+ *----------------------------------------------------------------------
+ *
+ * SCCS: @(#) winDumpExts.c 1.11 96/09/18 15:25:11
+ */
+
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+#include <process.h>
+
+#ifdef _ALPHA_
+#define e_magic_number IMAGE_FILE_MACHINE_ALPHA
+#else
+#define e_magic_number IMAGE_FILE_MACHINE_I386
+#endif
+
+/*
+ *----------------------------------------------------------------------
+ * GetArgcArgv --
+ * 
+ *     Break up a line into argc argv
+ *----------------------------------------------------------------------
+ */
+int
+GetArgcArgv(char *s, char **argv)
+{
+    int quote = 0;
+    int argc = 0;
+    char *bp;
+
+    bp = s;
+    while (1) {
+       while (isspace(*bp)) {
+           bp++;
+       }
+       if (*bp == '\n' || *bp == '\0') {
+           *bp = '\0';
+           return argc;
+       }
+       if (*bp == '\"') {
+           quote = 1;
+           bp++;
+       }
+       argv[argc++] = bp;
+
+       while (*bp != '\0') {
+           if (quote) {
+               if (*bp == '\"') {
+                   quote = 0;
+                   *bp = '\0';
+                   bp++;
+                   break;
+               }
+               bp++;
+               continue;
+           }
+           if (isspace(*bp)) {
+               *bp = '\0';
+               bp++;
+               break;
+           }
+           bp++;
+       }
+    }
+}
+
+/*
+ *  The names of the first group of possible symbol table storage classes
+ */
+char * SzStorageClass1[] = {
+    "NULL","AUTOMATIC","EXTERNAL","STATIC","REGISTER","EXTERNAL_DEF","LABEL",
+    "UNDEFINED_LABEL","MEMBER_OF_STRUCT","ARGUMENT","STRUCT_TAG",
+    "MEMBER_OF_UNION","UNION_TAG","TYPE_DEFINITION","UNDEFINED_STATIC",
+    "ENUM_TAG","MEMBER_OF_ENUM","REGISTER_PARAM","BIT_FIELD"
+};
+
+/*
+ * The names of the second group of possible symbol table storage classes
+ */
+char * SzStorageClass2[] = {
+    "BLOCK","FUNCTION","END_OF_STRUCT","FILE","SECTION","WEAK_EXTERNAL"
+};
+
+/*
+ *----------------------------------------------------------------------
+ * GetSZStorageClass --
+ *
+ *     Given a symbol storage class value, return a descriptive
+ *     ASCII string
+ *----------------------------------------------------------------------
+ */
+PSTR
+GetSZStorageClass(BYTE storageClass)
+{
+       if ( storageClass <= IMAGE_SYM_CLASS_BIT_FIELD )
+               return SzStorageClass1[storageClass];
+       else if ( (storageClass >= IMAGE_SYM_CLASS_BLOCK)
+                     && (storageClass <= IMAGE_SYM_CLASS_WEAK_EXTERNAL) )
+               return SzStorageClass2[storageClass-IMAGE_SYM_CLASS_BLOCK];
+       else
+               return "???";
+}
+
+/*
+ *----------------------------------------------------------------------
+ * GetSectionName --
+ *
+ *     Used by DumpSymbolTable, it gives meaningful names to
+ *     the non-normal section number.
+ *
+ * Results:
+ *     A name is returned in buffer
+ *----------------------------------------------------------------------
+ */
+void
+GetSectionName(WORD section, PSTR buffer, unsigned cbBuffer)
+{
+    char tempbuffer[10];
+       
+    switch ( (SHORT)section )
+    {
+      case IMAGE_SYM_UNDEFINED: strcpy(tempbuffer, "UNDEF"); break;
+      case IMAGE_SYM_ABSOLUTE:  strcpy(tempbuffer, "ABS  "); break;
+      case IMAGE_SYM_DEBUG:      strcpy(tempbuffer, "DEBUG"); break;
+      default: wsprintf(tempbuffer, "%-5X", section);
+    }
+       
+    strncpy(buffer, tempbuffer, cbBuffer-1);
+}
+
+/*
+ *----------------------------------------------------------------------
+ * DumpSymbolTable --
+ *
+ *     Dumps a COFF symbol table from an EXE or OBJ.  We only use
+ *     it to dump tables from OBJs.
+ *----------------------------------------------------------------------
+ */
+void
+DumpSymbolTable(PIMAGE_SYMBOL pSymbolTable, FILE *fout, unsigned cSymbols)
+{
+    unsigned i;
+    PSTR stringTable;
+    char sectionName[10];
+       
+    fprintf(fout, "Symbol Table - %X entries  (* = auxillary symbol)\n",
+           cSymbols);
+
+    fprintf(fout, 
+     "Indx Name                 Value    Section    cAux  Type    Storage\n"
+     "---- -------------------- -------- ---------- ----- ------- --------\n");
+
+    /*
+     * The string table apparently starts right after the symbol table
+     */
+    stringTable = (PSTR)&pSymbolTable[cSymbols]; 
+               
+    for ( i=0; i < cSymbols; i++ ) {
+       fprintf(fout, "%04X ", i);
+       if ( pSymbolTable->N.Name.Short != 0 )
+           fprintf(fout, "%-20.8s", pSymbolTable->N.ShortName);
+       else
+           fprintf(fout, "%-20s", stringTable + pSymbolTable->N.Name.Long);
+
+       fprintf(fout, " %08X", pSymbolTable->Value);
+
+       GetSectionName(pSymbolTable->SectionNumber, sectionName,
+                      sizeof(sectionName));
+       fprintf(fout, " sect:%s aux:%X type:%02X st:%s\n",
+              sectionName,
+              pSymbolTable->NumberOfAuxSymbols,
+              pSymbolTable->Type,
+              GetSZStorageClass(pSymbolTable->StorageClass) );
+#if 0
+       if ( pSymbolTable->NumberOfAuxSymbols )
+           DumpAuxSymbols(pSymbolTable);
+#endif
+
+       /*
+        * Take into account any aux symbols
+        */
+       i += pSymbolTable->NumberOfAuxSymbols;
+       pSymbolTable += pSymbolTable->NumberOfAuxSymbols;
+       pSymbolTable++;
+    }
+}
+
+/*
+ *----------------------------------------------------------------------
+ * DumpExternals --
+ *
+ *     Dumps a COFF symbol table from an EXE or OBJ.  We only use
+ *     it to dump tables from OBJs.
+ *----------------------------------------------------------------------
+ */
+void
+DumpExternals(PIMAGE_SYMBOL pSymbolTable, FILE *fout, unsigned cSymbols)
+{
+    unsigned i;
+    PSTR stringTable;
+    char *s, *f;
+    char symbol[1024];
+       
+    /*
+     * The string table apparently starts right after the symbol table
+     */
+    stringTable = (PSTR)&pSymbolTable[cSymbols]; 
+               
+    for ( i=0; i < cSymbols; i++ ) {
+       if (pSymbolTable->SectionNumber > 0 && pSymbolTable->Type == 0x20) {
+           if (pSymbolTable->StorageClass == IMAGE_SYM_CLASS_EXTERNAL) {
+               if (pSymbolTable->N.Name.Short != 0) {
+                   strncpy(symbol, pSymbolTable->N.ShortName, 8);
+                   symbol[8] = 0;
+               } else {
+                   s = stringTable + pSymbolTable->N.Name.Long;
+                   strcpy(symbol, s);
+               }
+               s = symbol;
+               f = strchr(s, '@');
+               if (f) {
+                   *f = 0;
+               }
+#if defined(_MSC_VER) && defined(_X86_)
+               if (symbol[0] == '_') {
+                   s = &symbol[1];
+               }
+#endif
+               if ((stricmp(s, "DllEntryPoint") != 0) 
+                       && (stricmp(s, "DllMain") != 0)) {
+                   fprintf(fout, "\t%s\n", s);
+               }
+           }
+       }
+
+       /*
+        * Take into account any aux symbols
+        */
+       i += pSymbolTable->NumberOfAuxSymbols;
+       pSymbolTable += pSymbolTable->NumberOfAuxSymbols;
+       pSymbolTable++;
+    }
+}
+
+/*
+ *----------------------------------------------------------------------
+ * DumpObjFile --
+ *
+ *     Dump an object file--either a full listing or just the exported
+ *     symbols.
+ *----------------------------------------------------------------------
+ */
+void
+DumpObjFile(PIMAGE_FILE_HEADER pImageFileHeader, FILE *fout, int full)
+{
+    PIMAGE_SYMBOL PCOFFSymbolTable;
+    DWORD COFFSymbolCount;
+    
+    PCOFFSymbolTable = (PIMAGE_SYMBOL)
+       ((DWORD)pImageFileHeader + pImageFileHeader->PointerToSymbolTable);
+    COFFSymbolCount = pImageFileHeader->NumberOfSymbols;
+
+    if (full) {
+       DumpSymbolTable(PCOFFSymbolTable, fout, COFFSymbolCount);
+    } else {
+       DumpExternals(PCOFFSymbolTable, fout, COFFSymbolCount);
+    }
+}
+
+/*
+ *----------------------------------------------------------------------
+ * SkipToNextRecord --
+ *
+ *     Skip over the current ROMF record and return the type of the
+ *     next record.
+ *----------------------------------------------------------------------
+ */
+
+BYTE
+SkipToNextRecord(BYTE **ppBuffer)
+{
+    int length;
+    (*ppBuffer)++;             /* Skip over the type.*/
+    length = *((WORD*)(*ppBuffer))++; /* Retrieve the length. */
+    *ppBuffer += length;       /* Skip over the rest. */
+    return **ppBuffer;         /* Return the type. */
+}
+
+/*
+ *----------------------------------------------------------------------
+ * DumpROMFObjFile --
+ *
+ *     Dump a Relocatable Object Module Format file, displaying only
+ *     the exported symbols.
+ *----------------------------------------------------------------------
+ */
+void
+DumpROMFObjFile(LPVOID pBuffer, FILE *fout)
+{
+    BYTE type, length;
+    char symbol[1024], *s;
+
+    while (1) {
+       type = SkipToNextRecord(&(BYTE*)pBuffer);
+       if (type == 0x90) {     /* PUBDEF */
+           if (((BYTE*)pBuffer)[4] != 0) {
+               length = ((BYTE*)pBuffer)[5];
+               strncpy(symbol, ((char*)pBuffer) + 6, length);
+               symbol[length] = '\0';
+               s = symbol;
+               if ((stricmp(s, "DllEntryPoint") != 0) 
+                       && (stricmp(s, "DllMain") != 0)) {
+                   if (s[0] == '_') {
+                       s++;
+                       fprintf(fout, "\t_%s\n\t%s=_%s\n", s, s, s);
+                   } else {
+                       fprintf(fout, "\t%s\n", s);
+                   }
+               }
+           }
+       } else if (type == 0x8B || type == 0x8A) { /* MODEND */
+           break;
+       }
+    }
+}
+
+/*
+ *----------------------------------------------------------------------
+ * DumpFile --
+ *
+ *     Open up a file, memory map it, and call the appropriate
+ *     dumping routine
+ *----------------------------------------------------------------------
+ */
+void
+DumpFile(LPSTR filename, FILE *fout, int full)
+{
+    HANDLE hFile;
+    HANDLE hFileMapping;
+    LPVOID lpFileBase;
+    PIMAGE_DOS_HEADER dosHeader;
+       
+    hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+                                       
+    if (hFile == INVALID_HANDLE_VALUE) {
+       fprintf(stderr, "Couldn't open file with CreateFile()\n");
+       return;
+    }
+
+    hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
+    if (hFileMapping == 0) {
+       CloseHandle(hFile);
+       fprintf(stderr, "Couldn't open file mapping with CreateFileMapping()\n");
+       return;
+    }
+
+    lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
+    if (lpFileBase == 0) {
+       CloseHandle(hFileMapping);
+       CloseHandle(hFile);
+       fprintf(stderr, "Couldn't map view of file with MapViewOfFile()\n");
+       return;
+    }
+
+    dosHeader = (PIMAGE_DOS_HEADER)lpFileBase;
+    if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) {
+#if 0
+       DumpExeFile( dosHeader );
+#else
+       fprintf(stderr, "File is an executable.  I don't dump those.\n");
+       return;
+#endif
+    }
+    /* Does it look like a i386 COFF OBJ file??? */
+    else if ((dosHeader->e_magic == e_magic_number)
+           && (dosHeader->e_sp == 0)) {
+       /*
+        * The two tests above aren't what they look like.  They're
+        * really checking for IMAGE_FILE_HEADER.Machine == i386 (0x14C)
+        * and IMAGE_FILE_HEADER.SizeOfOptionalHeader == 0;
+        */
+       DumpObjFile((PIMAGE_FILE_HEADER) lpFileBase, fout, full);
+    } else if (*((BYTE *)lpFileBase) == 0x80) {
+       /*
+        * This file looks like it might be a ROMF file.
+        */
+       DumpROMFObjFile(lpFileBase, fout);
+    } else {
+       printf("unrecognized file format\n");
+    }
+    UnmapViewOfFile(lpFileBase);
+    CloseHandle(hFileMapping);
+    CloseHandle(hFile);
+}
+
+void
+main(int argc, char **argv)
+{
+    char *fargv[1000];
+    char cmdline[10000];
+    int i, arg;
+    FILE *fout;
+    int pos;
+    int full = 0;
+    char *outfile = NULL;
+
+    if (argc < 3) {
+      Usage:
+       fprintf(stderr, "Usage: %s ?-o outfile? ?-f(ull)? <dllname> <object filenames> ..\n", argv[0]);
+       exit(1);
+    }
+
+    arg = 1;
+    while (argv[arg][0] == '-') {
+       if (strcmp(argv[arg], "--") == 0) {
+           arg++;
+           break;
+       } else if (strcmp(argv[arg], "-f") == 0) {
+           full = 1;
+       } else if (strcmp(argv[arg], "-o") == 0) {
+           arg++;
+           if (arg == argc) {
+               goto Usage;
+           }
+           outfile = argv[arg];
+       }
+       arg++;
+    }
+    if (arg == argc) {
+       goto Usage;
+    }
+
+    if (outfile) {
+       fout = fopen(outfile, "w+");
+       if (fout == NULL) {
+           fprintf(stderr, "Unable to open \'%s\' for writing:\n",
+                   argv[arg]);
+           perror("");
+           exit(1);
+       }
+    } else {
+       fout = stdout;
+    }
+    
+    if (! full) {
+       char *dllname = argv[arg];
+       arg++;
+       if (arg == argc) {
+           goto Usage;
+       }
+       fprintf(fout, "LIBRARY    %s\n", dllname);
+       fprintf(fout, "EXETYPE WINDOWS\n");
+       fprintf(fout, "CODE PRELOAD MOVEABLE DISCARDABLE\n");
+       fprintf(fout, "DATA PRELOAD MOVEABLE MULTIPLE\n\n");
+       fprintf(fout, "EXPORTS\n");
+    }
+
+    for (; arg < argc; arg++) {
+       if (argv[arg][0] == '@') {
+           FILE *fargs = fopen(&argv[arg][1], "r");
+           if (fargs == NULL) {
+               fprintf(stderr, "Unable to open \'%s\' for reading:\n",
+                       argv[arg]);
+               perror("");
+               exit(1);
+           }
+           pos = 0;
+           for (i = 0; i < arg; i++) {
+               strcpy(&cmdline[pos], argv[i]);
+               pos += strlen(&cmdline[pos]) + 1;
+               fargv[i] = argv[i];
+           }
+           fgets(&cmdline[pos], sizeof(cmdline), fargs);
+           fprintf(stderr, "%s\n", &cmdline[pos]);
+           fclose(fargs);
+           i += GetArgcArgv(&cmdline[pos], &fargv[i]);
+           argc = i;
+           argv = fargv;
+       }
+       DumpFile(argv[arg], fout, full);
+    }
+    exit(0);
+}
diff --git a/tk/xlib/xcolors.h b/tk/xlib/xcolors.h
new file mode 100644 (file)
index 0000000..ad62d18
--- /dev/null
@@ -0,0 +1,771 @@
+/*
+ * xcolors.h --
+ *
+ *     This file defines the xColors array which contains RGB values
+ *     for the X color names.
+ *
+ * Copyright (c) 1995 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * SCCS: @(#) xcolors.h 1.1 95/02/08 11:29:12
+ */
+
+#ifndef _XCOLORS
+#define _XCOLORS
+
+/*
+ * Define X color names structure.
+ */
+
+typedef struct {
+    unsigned char red;
+    unsigned char green;
+    unsigned char blue;
+    char *name;
+} XColorEntry;
+
+static XColorEntry xColors[] = {
+    255, 250, 250, "snow",
+    248, 248, 255, "ghost white",
+    248, 248, 255, "GhostWhite",
+    245, 245, 245, "white smoke",
+    245, 245, 245, "WhiteSmoke",
+    220, 220, 220, "gainsboro",
+    255, 250, 240, "floral white",
+    255, 250, 240, "FloralWhite",
+    253, 245, 230, "old lace",
+    253, 245, 230, "OldLace",
+    250, 240, 230, "linen",
+    250, 235, 215, "antique white",
+    250, 235, 215, "AntiqueWhite",
+    255, 239, 213, "papaya whip",
+    255, 239, 213, "PapayaWhip",
+    255, 235, 205, "blanched almond",
+    255, 235, 205, "BlanchedAlmond",
+    255, 228, 196, "bisque",
+    255, 218, 185, "peach puff",
+    255, 218, 185, "PeachPuff",
+    255, 222, 173, "navajo white",
+    255, 222, 173, "NavajoWhite",
+    255, 228, 181, "moccasin",
+    255, 248, 220, "cornsilk",
+    255, 255, 240, "ivory",
+    255, 250, 205, "lemon chiffon",
+    255, 250, 205, "LemonChiffon",
+    255, 245, 238, "seashell",
+    240, 255, 240, "honeydew",
+    245, 255, 250, "mint cream",
+    245, 255, 250, "MintCream",
+    240, 255, 255, "azure",
+    240, 248, 255, "alice blue",
+    240, 248, 255, "AliceBlue",
+    230, 230, 250, "lavender",
+    255, 240, 245, "lavender blush",
+    255, 240, 245, "LavenderBlush",
+    255, 228, 225, "misty rose",
+    255, 228, 225, "MistyRose",
+    255, 255, 255, "white",
+    0, 0, 0, "black",
+    47, 79, 79, "dark slate gray",
+    47, 79, 79, "DarkSlateGray",
+    47, 79, 79, "dark slate grey",
+    47, 79, 79, "DarkSlateGrey",
+    105, 105, 105, "dim gray",
+    105, 105, 105, "DimGray",
+    105, 105, 105, "dim grey",
+    105, 105, 105, "DimGrey",
+    112, 128, 144, "slate gray",
+    112, 128, 144, "SlateGray",
+    112, 128, 144, "slate grey",
+    112, 128, 144, "SlateGrey",
+    119, 136, 153, "light slate gray",
+    119, 136, 153, "LightSlateGray",
+    119, 136, 153, "light slate grey",
+    119, 136, 153, "LightSlateGrey",
+    190, 190, 190, "gray",
+    190, 190, 190, "grey",
+    211, 211, 211, "light grey",
+    211, 211, 211, "LightGrey",
+    211, 211, 211, "light gray",
+    211, 211, 211, "LightGray",
+    25, 25, 112, "midnight blue",
+    25, 25, 112, "MidnightBlue",
+    0, 0, 128, "navy",
+    0, 0, 128, "navy blue",
+    0, 0, 128, "NavyBlue",
+    100, 149, 237, "cornflower blue",
+    100, 149, 237, "CornflowerBlue",
+    72, 61, 139, "dark slate blue",
+    72, 61, 139, "DarkSlateBlue",
+    106, 90, 205, "slate blue",
+    106, 90, 205, "SlateBlue",
+    123, 104, 238, "medium slate blue",
+    123, 104, 238, "MediumSlateBlue",
+    132, 112, 255, "light slate blue",
+    132, 112, 255, "LightSlateBlue",
+    0, 0, 205, "medium blue",
+    0, 0, 205, "MediumBlue",
+    65, 105, 225, "royal blue",
+    65, 105, 225, "RoyalBlue",
+    0, 0, 255, "blue",
+    30, 144, 255, "dodger blue",
+    30, 144, 255, "DodgerBlue",
+    0, 191, 255, "deep sky blue",
+    0, 191, 255, "DeepSkyBlue",
+    135, 206, 235, "sky blue",
+    135, 206, 235, "SkyBlue",
+    135, 206, 250, "light sky blue",
+    135, 206, 250, "LightSkyBlue",
+    70, 130, 180, "steel blue",
+    70, 130, 180, "SteelBlue",
+    176, 196, 222, "light steel blue",
+    176, 196, 222, "LightSteelBlue",
+    173, 216, 230, "light blue",
+    173, 216, 230, "LightBlue",
+    176, 224, 230, "powder blue",
+    176, 224, 230, "PowderBlue",
+    175, 238, 238, "pale turquoise",
+    175, 238, 238, "PaleTurquoise",
+    0, 206, 209, "dark turquoise",
+    0, 206, 209, "DarkTurquoise",
+    72, 209, 204, "medium turquoise",
+    72, 209, 204, "MediumTurquoise",
+    64, 224, 208, "turquoise",
+    0, 255, 255, "cyan",
+    224, 255, 255, "light cyan",
+    224, 255, 255, "LightCyan",
+    95, 158, 160, "cadet blue",
+    95, 158, 160, "CadetBlue",
+    102, 205, 170, "medium aquamarine",
+    102, 205, 170, "MediumAquamarine",
+    127, 255, 212, "aquamarine",
+    0, 100, 0, "dark green",
+    0, 100, 0, "DarkGreen",
+    85, 107, 47, "dark olive green",
+    85, 107, 47, "DarkOliveGreen",
+    143, 188, 143, "dark sea green",
+    143, 188, 143, "DarkSeaGreen",
+    46, 139, 87, "sea green",
+    46, 139, 87, "SeaGreen",
+    60, 179, 113, "medium sea green",
+    60, 179, 113, "MediumSeaGreen",
+    32, 178, 170, "light sea green",
+    32, 178, 170, "LightSeaGreen",
+    152, 251, 152, "pale green",
+    152, 251, 152, "PaleGreen",
+    0, 255, 127, "spring green",
+    0, 255, 127, "SpringGreen",
+    124, 252, 0, "lawn green",
+    124, 252, 0, "LawnGreen",
+    0, 255, 0, "green",
+    127, 255, 0, "chartreuse",
+    0, 250, 154, "medium spring green",
+    0, 250, 154, "MediumSpringGreen",
+    173, 255, 47, "green yellow",
+    173, 255, 47, "GreenYellow",
+    50, 205, 50, "lime green",
+    50, 205, 50, "LimeGreen",
+    154, 205, 50, "yellow green",
+    154, 205, 50, "YellowGreen",
+    34, 139, 34, "forest green",
+    34, 139, 34, "ForestGreen",
+    107, 142, 35, "olive drab",
+    107, 142, 35, "OliveDrab",
+    189, 183, 107, "dark khaki",
+    189, 183, 107, "DarkKhaki",
+    240, 230, 140, "khaki",
+    238, 232, 170, "pale goldenrod",
+    238, 232, 170, "PaleGoldenrod",
+    250, 250, 210, "light goldenrod yellow",
+    250, 250, 210, "LightGoldenrodYellow",
+    255, 255, 224, "light yellow",
+    255, 255, 224, "LightYellow",
+    255, 255, 0, "yellow",
+    255, 215, 0, "gold",
+    238, 221, 130, "light goldenrod",
+    238, 221, 130, "LightGoldenrod",
+    218, 165, 32, "goldenrod",
+    184, 134, 11, "dark goldenrod",
+    184, 134, 11, "DarkGoldenrod",
+    188, 143, 143, "rosy brown",
+    188, 143, 143, "RosyBrown",
+    205, 92, 92, "indian red",
+    205, 92, 92, "IndianRed",
+    139, 69, 19, "saddle brown",
+    139, 69, 19, "SaddleBrown",
+    160, 82, 45, "sienna",
+    205, 133, 63, "peru",
+    222, 184, 135, "burlywood",
+    245, 245, 220, "beige",
+    245, 222, 179, "wheat",
+    244, 164, 96, "sandy brown",
+    244, 164, 96, "SandyBrown",
+    210, 180, 140, "tan",
+    210, 105, 30, "chocolate",
+    178, 34, 34, "firebrick",
+    165, 42, 42, "brown",
+    233, 150, 122, "dark salmon",
+    233, 150, 122, "DarkSalmon",
+    250, 128, 114, "salmon",
+    255, 160, 122, "light salmon",
+    255, 160, 122, "LightSalmon",
+    255, 165, 0, "orange",
+    255, 140, 0, "dark orange",
+    255, 140, 0, "DarkOrange",
+    255, 127, 80, "coral",
+    240, 128, 128, "light coral",
+    240, 128, 128, "LightCoral",
+    255, 99, 71, "tomato",
+    255, 69, 0, "orange red",
+    255, 69, 0, "OrangeRed",
+    255, 0, 0, "red",
+    255, 105, 180, "hot pink",
+    255, 105, 180, "HotPink",
+    255, 20, 147, "deep pink",
+    255, 20, 147, "DeepPink",
+    255, 192, 203, "pink",
+    255, 182, 193, "light pink",
+    255, 182, 193, "LightPink",
+    219, 112, 147, "pale violet red",
+    219, 112, 147, "PaleVioletRed",
+    176, 48, 96, "maroon",
+    199, 21, 133, "medium violet red",
+    199, 21, 133, "MediumVioletRed",
+    208, 32, 144, "violet red",
+    208, 32, 144, "VioletRed",
+    255, 0, 255, "magenta",
+    238, 130, 238, "violet",
+    221, 160, 221, "plum",
+    218, 112, 214, "orchid",
+    186, 85, 211, "medium orchid",
+    186, 85, 211, "MediumOrchid",
+    153, 50, 204, "dark orchid",
+    153, 50, 204, "DarkOrchid",
+    148, 0, 211, "dark violet",
+    148, 0, 211, "DarkViolet",
+    138, 43, 226, "blue violet",
+    138, 43, 226, "BlueViolet",
+    160, 32, 240, "purple",
+    147, 112, 219, "medium purple",
+    147, 112, 219, "MediumPurple",
+    216, 191, 216, "thistle",
+    255, 250, 250, "snow1",
+    238, 233, 233, "snow2",
+    205, 201, 201, "snow3",
+    139, 137, 137, "snow4",
+    255, 245, 238, "seashell1",
+    238, 229, 222, "seashell2",
+    205, 197, 191, "seashell3",
+    139, 134, 130, "seashell4",
+    255, 239, 219, "AntiqueWhite1",
+    238, 223, 204, "AntiqueWhite2",
+    205, 192, 176, "AntiqueWhite3",
+    139, 131, 120, "AntiqueWhite4",
+    255, 228, 196, "bisque1",
+    238, 213, 183, "bisque2",
+    205, 183, 158, "bisque3",
+    139, 125, 107, "bisque4",
+    255, 218, 185, "PeachPuff1",
+    238, 203, 173, "PeachPuff2",
+    205, 175, 149, "PeachPuff3",
+    139, 119, 101, "PeachPuff4",
+    255, 222, 173, "NavajoWhite1",
+    238, 207, 161, "NavajoWhite2",
+    205, 179, 139, "NavajoWhite3",
+    139, 121, 94, "NavajoWhite4",
+    255, 250, 205, "LemonChiffon1",
+    238, 233, 191, "LemonChiffon2",
+    205, 201, 165, "LemonChiffon3",
+    139, 137, 112, "LemonChiffon4",
+    255, 248, 220, "cornsilk1",
+    238, 232, 205, "cornsilk2",
+    205, 200, 177, "cornsilk3",
+    139, 136, 120, "cornsilk4",
+    255, 255, 240, "ivory1",
+    238, 238, 224, "ivory2",
+    205, 205, 193, "ivory3",
+    139, 139, 131, "ivory4",
+    240, 255, 240, "honeydew1",
+    224, 238, 224, "honeydew2",
+    193, 205, 193, "honeydew3",
+    131, 139, 131, "honeydew4",
+    255, 240, 245, "LavenderBlush1",
+    238, 224, 229, "LavenderBlush2",
+    205, 193, 197, "LavenderBlush3",
+    139, 131, 134, "LavenderBlush4",
+    255, 228, 225, "MistyRose1",
+    238, 213, 210, "MistyRose2",
+    205, 183, 181, "MistyRose3",
+    139, 125, 123, "MistyRose4",
+    240, 255, 255, "azure1",
+    224, 238, 238, "azure2",
+    193, 205, 205, "azure3",
+    131, 139, 139, "azure4",
+    131, 111, 255, "SlateBlue1",
+    122, 103, 238, "SlateBlue2",
+    105, 89, 205, "SlateBlue3",
+    71, 60, 139, "SlateBlue4",
+    72, 118, 255, "RoyalBlue1",
+    67, 110, 238, "RoyalBlue2",
+    58, 95, 205, "RoyalBlue3",
+    39, 64, 139, "RoyalBlue4",
+    0, 0, 255, "blue1",
+    0, 0, 238, "blue2",
+    0, 0, 205, "blue3",
+    0, 0, 139, "blue4",
+    30, 144, 255, "DodgerBlue1",
+    28, 134, 238, "DodgerBlue2",
+    24, 116, 205, "DodgerBlue3",
+    16, 78, 139, "DodgerBlue4",
+    99, 184, 255, "SteelBlue1",
+    92, 172, 238, "SteelBlue2",
+    79, 148, 205, "SteelBlue3",
+    54, 100, 139, "SteelBlue4",
+    0, 191, 255, "DeepSkyBlue1",
+    0, 178, 238, "DeepSkyBlue2",
+    0, 154, 205, "DeepSkyBlue3",
+    0, 104, 139, "DeepSkyBlue4",
+    135, 206, 255, "SkyBlue1",
+    126, 192, 238, "SkyBlue2",
+    108, 166, 205, "SkyBlue3",
+    74, 112, 139, "SkyBlue4",
+    176, 226, 255, "LightSkyBlue1",
+    164, 211, 238, "LightSkyBlue2",
+    141, 182, 205, "LightSkyBlue3",
+    96, 123, 139, "LightSkyBlue4",
+    198, 226, 255, "SlateGray1",
+    185, 211, 238, "SlateGray2",
+    159, 182, 205, "SlateGray3",
+    108, 123, 139, "SlateGray4",
+    202, 225, 255, "LightSteelBlue1",
+    188, 210, 238, "LightSteelBlue2",
+    162, 181, 205, "LightSteelBlue3",
+    110, 123, 139, "LightSteelBlue4",
+    191, 239, 255, "LightBlue1",
+    178, 223, 238, "LightBlue2",
+    154, 192, 205, "LightBlue3",
+    104, 131, 139, "LightBlue4",
+    224, 255, 255, "LightCyan1",
+    209, 238, 238, "LightCyan2",
+    180, 205, 205, "LightCyan3",
+    122, 139, 139, "LightCyan4",
+    187, 255, 255, "PaleTurquoise1",
+    174, 238, 238, "PaleTurquoise2",
+    150, 205, 205, "PaleTurquoise3",
+    102, 139, 139, "PaleTurquoise4",
+    152, 245, 255, "CadetBlue1",
+    142, 229, 238, "CadetBlue2",
+    122, 197, 205, "CadetBlue3",
+    83, 134, 139, "CadetBlue4",
+    0, 245, 255, "turquoise1",
+    0, 229, 238, "turquoise2",
+    0, 197, 205, "turquoise3",
+    0, 134, 139, "turquoise4",
+    0, 255, 255, "cyan1",
+    0, 238, 238, "cyan2",
+    0, 205, 205, "cyan3",
+    0, 139, 139, "cyan4",
+    151, 255, 255, "DarkSlateGray1",
+    141, 238, 238, "DarkSlateGray2",
+    121, 205, 205, "DarkSlateGray3",
+    82, 139, 139, "DarkSlateGray4",
+    127, 255, 212, "aquamarine1",
+    118, 238, 198, "aquamarine2",
+    102, 205, 170, "aquamarine3",
+    69, 139, 116, "aquamarine4",
+    193, 255, 193, "DarkSeaGreen1",
+    180, 238, 180, "DarkSeaGreen2",
+    155, 205, 155, "DarkSeaGreen3",
+    105, 139, 105, "DarkSeaGreen4",
+    84, 255, 159, "SeaGreen1",
+    78, 238, 148, "SeaGreen2",
+    67, 205, 128, "SeaGreen3",
+    46, 139, 87, "SeaGreen4",
+    154, 255, 154, "PaleGreen1",
+    144, 238, 144, "PaleGreen2",
+    124, 205, 124, "PaleGreen3",
+    84, 139, 84, "PaleGreen4",
+    0, 255, 127, "SpringGreen1",
+    0, 238, 118, "SpringGreen2",
+    0, 205, 102, "SpringGreen3",
+    0, 139, 69, "SpringGreen4",
+    0, 255, 0, "green1",
+    0, 238, 0, "green2",
+    0, 205, 0, "green3",
+    0, 139, 0, "green4",
+    127, 255, 0, "chartreuse1",
+    118, 238, 0, "chartreuse2",
+    102, 205, 0, "chartreuse3",
+    69, 139, 0, "chartreuse4",
+    192, 255, 62, "OliveDrab1",
+    179, 238, 58, "OliveDrab2",
+    154, 205, 50, "OliveDrab3",
+    105, 139, 34, "OliveDrab4",
+    202, 255, 112, "DarkOliveGreen1",
+    188, 238, 104, "DarkOliveGreen2",
+    162, 205, 90, "DarkOliveGreen3",
+    110, 139, 61, "DarkOliveGreen4",
+    255, 246, 143, "khaki1",
+    238, 230, 133, "khaki2",
+    205, 198, 115, "khaki3",
+    139, 134, 78, "khaki4",
+    255, 236, 139, "LightGoldenrod1",
+    238, 220, 130, "LightGoldenrod2",
+    205, 190, 112, "LightGoldenrod3",
+    139, 129, 76, "LightGoldenrod4",
+    255, 255, 224, "LightYellow1",
+    238, 238, 209, "LightYellow2",
+    205, 205, 180, "LightYellow3",
+    139, 139, 122, "LightYellow4",
+    255, 255, 0, "yellow1",
+    238, 238, 0, "yellow2",
+    205, 205, 0, "yellow3",
+    139, 139, 0, "yellow4",
+    255, 215, 0, "gold1",
+    238, 201, 0, "gold2",
+    205, 173, 0, "gold3",
+    139, 117, 0, "gold4",
+    255, 193, 37, "goldenrod1",
+    238, 180, 34, "goldenrod2",
+    205, 155, 29, "goldenrod3",
+    139, 105, 20, "goldenrod4",
+    255, 185, 15, "DarkGoldenrod1",
+    238, 173, 14, "DarkGoldenrod2",
+    205, 149, 12, "DarkGoldenrod3",
+    139, 101, 8, "DarkGoldenrod4",
+    255, 193, 193, "RosyBrown1",
+    238, 180, 180, "RosyBrown2",
+    205, 155, 155, "RosyBrown3",
+    139, 105, 105, "RosyBrown4",
+    255, 106, 106, "IndianRed1",
+    238, 99, 99, "IndianRed2",
+    205, 85, 85, "IndianRed3",
+    139, 58, 58, "IndianRed4",
+    255, 130, 71, "sienna1",
+    238, 121, 66, "sienna2",
+    205, 104, 57, "sienna3",
+    139, 71, 38, "sienna4",
+    255, 211, 155, "burlywood1",
+    238, 197, 145, "burlywood2",
+    205, 170, 125, "burlywood3",
+    139, 115, 85, "burlywood4",
+    255, 231, 186, "wheat1",
+    238, 216, 174, "wheat2",
+    205, 186, 150, "wheat3",
+    139, 126, 102, "wheat4",
+    255, 165, 79, "tan1",
+    238, 154, 73, "tan2",
+    205, 133, 63, "tan3",
+    139, 90, 43, "tan4",
+    255, 127, 36, "chocolate1",
+    238, 118, 33, "chocolate2",
+    205, 102, 29, "chocolate3",
+    139, 69, 19, "chocolate4",
+    255, 48, 48, "firebrick1",
+    238, 44, 44, "firebrick2",
+    205, 38, 38, "firebrick3",
+    139, 26, 26, "firebrick4",
+    255, 64, 64, "brown1",
+    238, 59, 59, "brown2",
+    205, 51, 51, "brown3",
+    139, 35, 35, "brown4",
+    255, 140, 105, "salmon1",
+    238, 130, 98, "salmon2",
+    205, 112, 84, "salmon3",
+    139, 76, 57, "salmon4",
+    255, 160, 122, "LightSalmon1",
+    238, 149, 114, "LightSalmon2",
+    205, 129, 98, "LightSalmon3",
+    139, 87, 66, "LightSalmon4",
+    255, 165, 0, "orange1",
+    238, 154, 0, "orange2",
+    205, 133, 0, "orange3",
+    139, 90, 0, "orange4",
+    255, 127, 0, "DarkOrange1",
+    238, 118, 0, "DarkOrange2",
+    205, 102, 0, "DarkOrange3",
+    139, 69, 0, "DarkOrange4",
+    255, 114, 86, "coral1",
+    238, 106, 80, "coral2",
+    205, 91, 69, "coral3",
+    139, 62, 47, "coral4",
+    255, 99, 71, "tomato1",
+    238, 92, 66, "tomato2",
+    205, 79, 57, "tomato3",
+    139, 54, 38, "tomato4",
+    255, 69, 0, "OrangeRed1",
+    238, 64, 0, "OrangeRed2",
+    205, 55, 0, "OrangeRed3",
+    139, 37, 0, "OrangeRed4",
+    255, 0, 0, "red1",
+    238, 0, 0, "red2",
+    205, 0, 0, "red3",
+    139, 0, 0, "red4",
+    255, 20, 147, "DeepPink1",
+    238, 18, 137, "DeepPink2",
+    205, 16, 118, "DeepPink3",
+    139, 10, 80, "DeepPink4",
+    255, 110, 180, "HotPink1",
+    238, 106, 167, "HotPink2",
+    205, 96, 144, "HotPink3",
+    139, 58, 98, "HotPink4",
+    255, 181, 197, "pink1",
+    238, 169, 184, "pink2",
+    205, 145, 158, "pink3",
+    139, 99, 108, "pink4",
+    255, 174, 185, "LightPink1",
+    238, 162, 173, "LightPink2",
+    205, 140, 149, "LightPink3",
+    139, 95, 101, "LightPink4",
+    255, 130, 171, "PaleVioletRed1",
+    238, 121, 159, "PaleVioletRed2",
+    205, 104, 137, "PaleVioletRed3",
+    139, 71, 93, "PaleVioletRed4",
+    255, 52, 179, "maroon1",
+    238, 48, 167, "maroon2",
+    205, 41, 144, "maroon3",
+    139, 28, 98, "maroon4",
+    255, 62, 150, "VioletRed1",
+    238, 58, 140, "VioletRed2",
+    205, 50, 120, "VioletRed3",
+    139, 34, 82, "VioletRed4",
+    255, 0, 255, "magenta1",
+    238, 0, 238, "magenta2",
+    205, 0, 205, "magenta3",
+    139, 0, 139, "magenta4",
+    255, 131, 250, "orchid1",
+    238, 122, 233, "orchid2",
+    205, 105, 201, "orchid3",
+    139, 71, 137, "orchid4",
+    255, 187, 255, "plum1",
+    238, 174, 238, "plum2",
+    205, 150, 205, "plum3",
+    139, 102, 139, "plum4",
+    224, 102, 255, "MediumOrchid1",
+    209, 95, 238, "MediumOrchid2",
+    180, 82, 205, "MediumOrchid3",
+    122, 55, 139, "MediumOrchid4",
+    191, 62, 255, "DarkOrchid1",
+    178, 58, 238, "DarkOrchid2",
+    154, 50, 205, "DarkOrchid3",
+    104, 34, 139, "DarkOrchid4",
+    155, 48, 255, "purple1",
+    145, 44, 238, "purple2",
+    125, 38, 205, "purple3",
+    85, 26, 139, "purple4",
+    171, 130, 255, "MediumPurple1",
+    159, 121, 238, "MediumPurple2",
+    137, 104, 205, "MediumPurple3",
+    93, 71, 139, "MediumPurple4",
+    255, 225, 255, "thistle1",
+    238, 210, 238, "thistle2",
+    205, 181, 205, "thistle3",
+    139, 123, 139, "thistle4",
+    0, 0, 0, "gray0",
+    0, 0, 0, "grey0",
+    3, 3, 3, "gray1",
+    3, 3, 3, "grey1",
+    5, 5, 5, "gray2",
+    5, 5, 5, "grey2",
+    8, 8, 8, "gray3",
+    8, 8, 8, "grey3",
+    10, 10, 10, "gray4",
+    10, 10, 10, "grey4",
+    13, 13, 13, "gray5",
+    13, 13, 13, "grey5",
+    15, 15, 15, "gray6",
+    15, 15, 15, "grey6",
+    18, 18, 18, "gray7",
+    18, 18, 18, "grey7",
+    20, 20, 20, "gray8",
+    20, 20, 20, "grey8",
+    23, 23, 23, "gray9",
+    23, 23, 23, "grey9",
+    26, 26, 26, "gray10",
+    26, 26, 26, "grey10",
+    28, 28, 28, "gray11",
+    28, 28, 28, "grey11",
+    31, 31, 31, "gray12",
+    31, 31, 31, "grey12",
+    33, 33, 33, "gray13",
+    33, 33, 33, "grey13",
+    36, 36, 36, "gray14",
+    36, 36, 36, "grey14",
+    38, 38, 38, "gray15",
+    38, 38, 38, "grey15",
+    41, 41, 41, "gray16",
+    41, 41, 41, "grey16",
+    43, 43, 43, "gray17",
+    43, 43, 43, "grey17",
+    46, 46, 46, "gray18",
+    46, 46, 46, "grey18",
+    48, 48, 48, "gray19",
+    48, 48, 48, "grey19",
+    51, 51, 51, "gray20",
+    51, 51, 51, "grey20",
+    54, 54, 54, "gray21",
+    54, 54, 54, "grey21",
+    56, 56, 56, "gray22",
+    56, 56, 56, "grey22",
+    59, 59, 59, "gray23",
+    59, 59, 59, "grey23",
+    61, 61, 61, "gray24",
+    61, 61, 61, "grey24",
+    64, 64, 64, "gray25",
+    64, 64, 64, "grey25",
+    66, 66, 66, "gray26",
+    66, 66, 66, "grey26",
+    69, 69, 69, "gray27",
+    69, 69, 69, "grey27",
+    71, 71, 71, "gray28",
+    71, 71, 71, "grey28",
+    74, 74, 74, "gray29",
+    74, 74, 74, "grey29",
+    77, 77, 77, "gray30",
+    77, 77, 77, "grey30",
+    79, 79, 79, "gray31",
+    79, 79, 79, "grey31",
+    82, 82, 82, "gray32",
+    82, 82, 82, "grey32",
+    84, 84, 84, "gray33",
+    84, 84, 84, "grey33",
+    87, 87, 87, "gray34",
+    87, 87, 87, "grey34",
+    89, 89, 89, "gray35",
+    89, 89, 89, "grey35",
+    92, 92, 92, "gray36",
+    92, 92, 92, "grey36",
+    94, 94, 94, "gray37",
+    94, 94, 94, "grey37",
+    97, 97, 97, "gray38",
+    97, 97, 97, "grey38",
+    99, 99, 99, "gray39",
+    99, 99, 99, "grey39",
+    102, 102, 102, "gray40",
+    102, 102, 102, "grey40",
+    105, 105, 105, "gray41",
+    105, 105, 105, "grey41",
+    107, 107, 107, "gray42",
+    107, 107, 107, "grey42",
+    110, 110, 110, "gray43",
+    110, 110, 110, "grey43",
+    112, 112, 112, "gray44",
+    112, 112, 112, "grey44",
+    115, 115, 115, "gray45",
+    115, 115, 115, "grey45",
+    117, 117, 117, "gray46",
+    117, 117, 117, "grey46",
+    120, 120, 120, "gray47",
+    120, 120, 120, "grey47",
+    122, 122, 122, "gray48",
+    122, 122, 122, "grey48",
+    125, 125, 125, "gray49",
+    125, 125, 125, "grey49",
+    127, 127, 127, "gray50",
+    127, 127, 127, "grey50",
+    130, 130, 130, "gray51",
+    130, 130, 130, "grey51",
+    133, 133, 133, "gray52",
+    133, 133, 133, "grey52",
+    135, 135, 135, "gray53",
+    135, 135, 135, "grey53",
+    138, 138, 138, "gray54",
+    138, 138, 138, "grey54",
+    140, 140, 140, "gray55",
+    140, 140, 140, "grey55",
+    143, 143, 143, "gray56",
+    143, 143, 143, "grey56",
+    145, 145, 145, "gray57",
+    145, 145, 145, "grey57",
+    148, 148, 148, "gray58",
+    148, 148, 148, "grey58",
+    150, 150, 150, "gray59",
+    150, 150, 150, "grey59",
+    153, 153, 153, "gray60",
+    153, 153, 153, "grey60",
+    156, 156, 156, "gray61",
+    156, 156, 156, "grey61",
+    158, 158, 158, "gray62",
+    158, 158, 158, "grey62",
+    161, 161, 161, "gray63",
+    161, 161, 161, "grey63",
+    163, 163, 163, "gray64",
+    163, 163, 163, "grey64",
+    166, 166, 166, "gray65",
+    166, 166, 166, "grey65",
+    168, 168, 168, "gray66",
+    168, 168, 168, "grey66",
+    171, 171, 171, "gray67",
+    171, 171, 171, "grey67",
+    173, 173, 173, "gray68",
+    173, 173, 173, "grey68",
+    176, 176, 176, "gray69",
+    176, 176, 176, "grey69",
+    179, 179, 179, "gray70",
+    179, 179, 179, "grey70",
+    181, 181, 181, "gray71",
+    181, 181, 181, "grey71",
+    184, 184, 184, "gray72",
+    184, 184, 184, "grey72",
+    186, 186, 186, "gray73",
+    186, 186, 186, "grey73",
+    189, 189, 189, "gray74",
+    189, 189, 189, "grey74",
+    191, 191, 191, "gray75",
+    191, 191, 191, "grey75",
+    194, 194, 194, "gray76",
+    194, 194, 194, "grey76",
+    196, 196, 196, "gray77",
+    196, 196, 196, "grey77",
+    199, 199, 199, "gray78",
+    199, 199, 199, "grey78",
+    201, 201, 201, "gray79",
+    201, 201, 201, "grey79",
+    204, 204, 204, "gray80",
+    204, 204, 204, "grey80",
+    207, 207, 207, "gray81",
+    207, 207, 207, "grey81",
+    209, 209, 209, "gray82",
+    209, 209, 209, "grey82",
+    212, 212, 212, "gray83",
+    212, 212, 212, "grey83",
+    214, 214, 214, "gray84",
+    214, 214, 214, "grey84",
+    217, 217, 217, "gray85",
+    217, 217, 217, "grey85",
+    219, 219, 219, "gray86",
+    219, 219, 219, "grey86",
+    222, 222, 222, "gray87",
+    222, 222, 222, "grey87",
+    224, 224, 224, "gray88",
+    224, 224, 224, "grey88",
+    227, 227, 227, "gray89",
+    227, 227, 227, "grey89",
+    229, 229, 229, "gray90",
+    229, 229, 229, "grey90",
+    232, 232, 232, "gray91",
+    232, 232, 232, "grey91",
+    235, 235, 235, "gray92",
+    235, 235, 235, "grey92",
+    237, 237, 237, "gray93",
+    237, 237, 237, "grey93",
+    240, 240, 240, "gray94",
+    240, 240, 240, "grey94",
+    242, 242, 242, "gray95",
+    242, 242, 242, "grey95",
+    245, 245, 245, "gray96",
+    245, 245, 245, "grey96",
+    247, 247, 247, "gray97",
+    247, 247, 247, "grey97",
+    250, 250, 250, "gray98",
+    250, 250, 250, "grey98",
+    252, 252, 252, "gray99",
+    252, 252, 252, "grey99",
+    255, 255, 255, "gray100",
+    255, 255, 255, "grey100",
+    0, 0, 0, NULL
+};
+
+#endif /* _XCOLORS */