Hex Artifact Content

Artifact 0cfdc14cf7c88b31081e9e0ac689a710a26d6375:


0000: 2f 2a 20 0a 20 2a 20 74 63 6c 41 70 70 49 6e 69  /* . * tclAppIni
0010: 74 2e 63 20 2d 2d 0a 20 2a 0a 20 2a 20 20 50 72  t.c --. *. *  Pr
0020: 6f 76 69 64 65 73 20 61 20 64 65 66 61 75 6c 74  ovides a default
0030: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
0040: 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 61 6e 64  main program and
0050: 20 54 63 6c 5f 41 70 70 49 6e 69 74 0a 20 2a 20   Tcl_AppInit. * 
0060: 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 54   procedure for T
0070: 63 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  cl applications 
0080: 28 77 69 74 68 6f 75 74 20 54 6b 29 2e 20 20 4e  (without Tk).  N
0090: 6f 74 65 20 74 68 61 74 20 74 68 69 73 0a 20 2a  ote that this. *
00a0: 20 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 62    program must b
00b0: 65 20 62 75 69 6c 74 20 69 6e 20 57 69 6e 33 32  e built in Win32
00c0: 20 63 6f 6e 73 6f 6c 65 20 6d 6f 64 65 20 74 6f   console mode to
00d0: 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c 79 2e 0a   work properly..
00e0: 20 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20   *. * Copyright 
00f0: 28 63 29 20 31 39 39 36 2d 31 39 39 37 20 62 79  (c) 1996-1997 by
0100: 20 53 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d   Sun Microsystem
0110: 73 2c 20 49 6e 63 2e 0a 20 2a 20 43 6f 70 79 72  s, Inc.. * Copyr
0120: 69 67 68 74 20 28 63 29 20 31 39 39 38 2d 31 39  ight (c) 1998-19
0130: 39 39 20 62 79 20 53 63 72 69 70 74 69 63 73 20  99 by Scriptics 
0140: 43 6f 72 70 6f 72 61 74 69 6f 6e 2e 0a 20 2a 20  Corporation.. * 
0150: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0160: 30 30 2d 32 30 30 32 20 4a 65 61 6e 2d 43 6c 61  00-2002 Jean-Cla
0170: 75 64 65 20 57 69 70 70 6c 65 72 20 3c 6a 63 77  ude Wippler <jcw
0180: 40 65 71 75 69 34 2e 63 6f 6d 3e 0a 20 2a 0a 20  @equi4.com>. *. 
0190: 2a 20 53 65 65 20 74 68 65 20 66 69 6c 65 20 22  * See the file "
01a0: 6c 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66  license.terms" f
01b0: 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  or information o
01c0: 6e 20 75 73 61 67 65 20 61 6e 64 20 72 65 64 69  n usage and redi
01d0: 73 74 72 69 62 75 74 69 6f 6e 0a 20 2a 20 6f 66  stribution. * of
01e0: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 6e 64 20   this file, and 
01f0: 66 6f 72 20 61 20 44 49 53 43 4c 41 49 4d 45 52  for a DISCLAIMER
0200: 20 4f 46 20 41 4c 4c 20 57 41 52 52 41 4e 54 49   OF ALL WARRANTI
0210: 45 53 2e 0a 20 2a 0a 20 2a 20 52 43 53 3a 20 40  ES.. *. * RCS: @
0220: 28 23 29 20 24 49 64 24 0a 20 2a 2f 0a 0a 23 69  (#) $Id$. */..#i
0230: 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55 44 45  fdef KIT_INCLUDE
0240: 53 5f 54 4b 0a 23 20 20 69 6e 63 6c 75 64 65 20  S_TK.#  include 
0250: 3c 74 6b 2e 68 3e 0a 23 65 6e 64 69 66 20 2f 2a  <tk.h>.#endif /*
0260: 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 54 4b   KIT_INCLUDES_TK
0270: 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 74 63   */.#include <tc
0280: 6c 2e 68 3e 0a 0a 23 69 66 64 65 66 20 5f 57 49  l.h>..#ifdef _WI
0290: 4e 33 32 0a 23 20 20 64 65 66 69 6e 65 20 57 49  N32.#  define WI
02a0: 4e 33 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41  N32_LEAN_AND_MEA
02b0: 4e 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 77 69  N.#  include <wi
02c0: 6e 64 6f 77 73 2e 68 3e 0a 23 20 20 75 6e 64 65  ndows.h>.#  unde
02d0: 66 20 57 49 4e 33 32 5f 4c 45 41 4e 5f 41 4e 44  f WIN32_LEAN_AND
02e0: 5f 4d 45 41 4e 0a 23 65 6e 64 69 66 20 2f 2a 20  _MEAN.#endif /* 
02f0: 5f 57 49 4e 33 32 20 2a 2f 0a 0a 23 69 66 6e 64  _WIN32 */..#ifnd
0300: 65 66 20 4d 42 5f 54 41 53 4b 4d 4f 44 41 4c 0a  ef MB_TASKMODAL.
0310: 23 20 20 64 65 66 69 6e 65 20 4d 42 5f 54 41 53  #  define MB_TAS
0320: 4b 4d 4f 44 41 4c 20 30 0a 23 65 6e 64 69 66 20  KMODAL 0.#endif 
0330: 2f 2a 20 4d 42 5f 54 41 53 4b 4d 4f 44 41 4c 20  /* MB_TASKMODAL 
0340: 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 74 63  */..#include "tc
0350: 6c 49 6e 74 2e 68 22 0a 0a 23 69 66 64 65 66 20  lInt.h"..#ifdef 
0360: 48 41 56 45 5f 55 4e 49 53 54 44 5f 48 0a 23 20  HAVE_UNISTD_H.# 
0370: 20 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64   include <unistd
0380: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0390: 66 20 48 41 56 45 5f 53 54 52 49 4e 47 5f 48 0a  f HAVE_STRING_H.
03a0: 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  #  include <stri
03b0: 6e 67 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  ng.h>.#endif.#if
03c0: 64 65 66 20 48 41 56 45 5f 53 54 52 49 4e 47 53  def HAVE_STRINGS
03d0: 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 73  _H.#  include <s
03e0: 74 72 69 6e 67 73 2e 68 3e 0a 23 65 6e 64 69 66  trings.h>.#endif
03f0: 0a 0a 2f 2a 20 46 6f 72 20 64 6c 61 64 64 72 28  ../* For dladdr(
0400: 29 20 61 6e 64 20 44 6c 5f 69 6e 66 6f 20 2a 2f  ) and Dl_info */
0410: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 44 4c 46  .#ifdef HAVE_DLF
0420: 43 4e 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65 20  CN_H.#  include 
0430: 3c 64 6c 66 63 6e 2e 68 3e 0a 23 65 6e 64 69 66  <dlfcn.h>.#endif
0440: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  ..#if defined(HA
0450: 56 45 5f 54 43 4c 5f 47 45 54 45 4e 43 4f 44 49  VE_TCL_GETENCODI
0460: 4e 47 4e 41 4d 45 46 52 4f 4d 45 4e 56 49 52 4f  NGNAMEFROMENVIRO
0470: 4e 4d 45 4e 54 29 20 26 26 20 64 65 66 69 6e 65  NMENT) && define
0480: 64 28 48 41 56 45 5f 54 43 4c 5f 53 45 54 53 59  d(HAVE_TCL_SETSY
0490: 53 54 45 4d 45 4e 43 4f 44 49 4e 47 29 0a 23 20  STEMENCODING).# 
04a0: 20 64 65 66 69 6e 65 20 54 43 4c 4b 49 54 5f 43   define TCLKIT_C
04b0: 41 4e 5f 53 45 54 5f 45 4e 43 4f 44 49 4e 47 20  AN_SET_ENCODING 
04c0: 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 31 30 20  1.#endif.#if 10 
04d0: 2a 20 54 43 4c 5f 4d 41 4a 4f 52 5f 56 45 52 53  * TCL_MAJOR_VERS
04e0: 49 4f 4e 20 2b 20 54 43 4c 5f 4d 49 4e 4f 52 5f  ION + TCL_MINOR_
04f0: 56 45 52 53 49 4f 4e 20 3c 20 38 35 0a 23 20 20  VERSION < 85.#  
0500: 64 65 66 69 6e 65 20 54 43 4c 4b 49 54 5f 52 45  define TCLKIT_RE
0510: 51 55 49 52 45 5f 54 43 4c 45 58 45 43 55 54 41  QUIRE_TCLEXECUTA
0520: 42 4c 45 4e 41 4d 45 20 31 0a 23 65 6e 64 69 66  BLENAME 1.#endif
0530: 0a 0a 23 69 66 20 31 30 20 2a 20 54 43 4c 5f 4d  ..#if 10 * TCL_M
0540: 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 2b 20 54  AJOR_VERSION + T
0550: 43 4c 5f 4d 49 4e 4f 52 5f 56 45 52 53 49 4f 4e  CL_MINOR_VERSION
0560: 20 3c 20 38 35 0a 23 20 20 64 65 66 69 6e 65 20   < 85.#  define 
0570: 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 50 57 42  KIT_INCLUDES_PWB
0580: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 31 30   1.#endif.#if 10
0590: 20 2a 20 54 43 4c 5f 4d 41 4a 4f 52 5f 56 45 52   * TCL_MAJOR_VER
05a0: 53 49 4f 4e 20 2b 20 54 43 4c 5f 4d 49 4e 4f 52  SION + TCL_MINOR
05b0: 5f 56 45 52 53 49 4f 4e 20 3c 20 38 36 0a 23 20  _VERSION < 86.# 
05c0: 20 64 65 66 69 6e 65 20 4b 49 54 5f 49 4e 43 4c   define KIT_INCL
05d0: 55 44 45 53 5f 5a 4c 49 42 20 31 0a 23 65 6e 64  UDES_ZLIB 1.#end
05e0: 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6b 69  if..#include "ki
05f0: 74 49 6e 69 74 2d 6c 69 62 73 2e 68 22 0a 0a 23  tInit-libs.h"..#
0600: 69 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55 44  ifdef KIT_INCLUD
0610: 45 53 5f 4d 4b 34 54 43 4c 0a 54 63 6c 5f 41 70  ES_MK4TCL.Tcl_Ap
0620: 70 49 6e 69 74 50 72 6f 63 09 4d 6b 34 74 63 6c  pInitProc.Mk4tcl
0630: 5f 49 6e 69 74 3b 0a 23 65 6e 64 69 66 0a 54 63  _Init;.#endif.Tc
0640: 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63 20 56 66  l_AppInitProc Vf
0650: 73 5f 49 6e 69 74 2c 20 52 65 63 68 61 6e 5f 49  s_Init, Rechan_I
0660: 6e 69 74 3b 0a 23 69 66 64 65 66 20 4b 49 54 5f  nit;.#ifdef KIT_
0670: 49 4e 43 4c 55 44 45 53 5f 50 57 42 0a 54 63 6c  INCLUDES_PWB.Tcl
0680: 5f 41 70 70 49 6e 69 74 50 72 6f 63 09 50 77 62  _AppInitProc.Pwb
0690: 5f 49 6e 69 74 3b 0a 23 65 6e 64 69 66 0a 23 69  _Init;.#endif.#i
06a0: 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55 44 45  fdef KIT_INCLUDE
06b0: 53 5f 5a 4c 49 42 0a 54 63 6c 5f 41 70 70 49 6e  S_ZLIB.Tcl_AppIn
06c0: 69 74 50 72 6f 63 20 5a 6c 69 62 5f 49 6e 69 74  itProc Zlib_Init
06d0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
06e0: 4b 49 54 5f 53 54 4f 52 41 47 45 5f 43 56 46 53  KIT_STORAGE_CVFS
06f0: 0a 54 63 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63  .Tcl_AppInitProc
0700: 20 43 76 66 73 5f 64 61 74 61 5f 74 63 6c 5f 49   Cvfs_data_tcl_I
0710: 6e 69 74 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  nit;.#endif.#ifd
0720: 65 66 20 54 43 4c 5f 54 48 52 45 41 44 53 0a 54  ef TCL_THREADS.T
0730: 63 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63 09 54  cl_AppInitProc.T
0740: 68 72 65 61 64 5f 49 6e 69 74 3b 0a 23 65 6e 64  hread_Init;.#end
0750: 69 66 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32  if.#ifdef _WIN32
0760: 0a 54 63 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63  .Tcl_AppInitProc
0770: 09 44 64 65 5f 49 6e 69 74 2c 20 52 65 67 69 73  .Dde_Init, Regis
0780: 74 72 79 5f 49 6e 69 74 3b 0a 23 65 6e 64 69 66  try_Init;.#endif
0790: 0a 0a 23 69 66 64 65 66 20 54 43 4c 4b 49 54 5f  ..#ifdef TCLKIT_
07a0: 44 4c 4c 0a 23 20 20 64 65 66 69 6e 65 20 54 43  DLL.#  define TC
07b0: 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 4e 54 20  LKIT_MOUNTPOINT 
07c0: 22 2f 2e 4b 49 54 44 4c 4c 5f 54 43 4c 22 0a 23  "/.KITDLL_TCL".#
07d0: 20 20 64 65 66 69 6e 65 20 54 43 4c 4b 49 54 5f    define TCLKIT_
07e0: 56 46 53 53 4f 55 52 43 45 20 22 24 3a 3a 74 63  VFSSOURCE "$::tc
07f0: 6c 4b 69 74 46 69 6c 65 6e 61 6d 65 22 0a 23 65  lKitFilename".#e
0800: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 54 43  lse.#  define TC
0810: 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 4e 54 20  LKIT_MOUNTPOINT 
0820: 22 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65  "[info nameofexe
0830: 63 75 74 61 62 6c 65 5d 22 0a 23 20 20 64 65 66  cutable]".#  def
0840: 69 6e 65 20 54 43 4c 4b 49 54 5f 56 46 53 53 4f  ine TCLKIT_VFSSO
0850: 55 52 43 45 20 22 5b 69 6e 66 6f 20 6e 61 6d 65  URCE "[info name
0860: 6f 66 65 78 65 63 75 74 61 62 6c 65 5d 22 0a 23  ofexecutable]".#
0870: 65 6e 64 69 66 20 2f 2a 20 54 43 4c 4b 49 54 5f  endif /* TCLKIT_
0880: 44 4c 4c 20 2a 2f 0a 0a 23 69 66 64 65 66 20 48  DLL */..#ifdef H
0890: 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45 5f 44  AVE_ACCEPTABLE_D
08a0: 4c 41 44 44 52 0a 23 20 20 69 66 64 65 66 20 4b  LADDR.#  ifdef K
08b0: 49 54 53 48 5f 4e 45 45 44 5f 57 49 4e 4d 41 49  ITSH_NEED_WINMAI
08c0: 4e 0a 23 20 20 20 20 69 66 64 65 66 20 5f 57 49  N.#    ifdef _WI
08d0: 4e 33 32 5f 57 43 45 0a 69 6e 74 20 77 57 69 6e  N32_WCE.int wWin
08e0: 4d 61 69 6e 28 48 49 4e 53 54 41 4e 43 45 20 68  Main(HINSTANCE h
08f0: 49 6e 73 74 61 6e 63 65 2c 20 48 49 4e 53 54 41  Instance, HINSTA
0900: 4e 43 45 20 68 50 72 65 76 49 6e 73 74 61 6e 63  NCE hPrevInstanc
0910: 65 2c 20 4c 50 53 54 52 20 6c 70 73 7a 43 6d 64  e, LPSTR lpszCmd
0920: 4c 69 6e 65 2c 20 69 6e 74 20 6e 43 6d 64 53 68  Line, int nCmdSh
0930: 6f 77 29 3b 0a 23 20 20 20 20 65 6c 73 65 0a 69  ow);.#    else.i
0940: 6e 74 20 57 69 6e 4d 61 69 6e 28 48 49 4e 53 54  nt WinMain(HINST
0950: 41 4e 43 45 20 68 49 6e 73 74 61 6e 63 65 2c 20  ANCE hInstance, 
0960: 48 49 4e 53 54 41 4e 43 45 20 68 50 72 65 76 49  HINSTANCE hPrevI
0970: 6e 73 74 61 6e 63 65 2c 20 4c 50 53 54 52 20 6c  nstance, LPSTR l
0980: 70 73 7a 43 6d 64 4c 69 6e 65 2c 20 69 6e 74 20  pszCmdLine, int 
0990: 6e 43 6d 64 53 68 6f 77 29 3b 0a 23 20 20 20 20  nCmdShow);.#    
09a0: 65 6e 64 69 66 20 2f 2a 20 5f 57 49 4e 33 32 5f  endif /* _WIN32_
09b0: 57 43 45 20 2a 2f 0a 23 20 20 65 6e 64 69 66 20  WCE */.#  endif 
09c0: 2f 2a 20 4b 49 54 53 48 5f 4e 45 45 44 5f 57 49  /* KITSH_NEED_WI
09d0: 4e 4d 41 49 4e 20 2a 2f 0a 69 6e 74 20 6d 61 69  NMAIN */.int mai
09e0: 6e 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  n(int argc, char
09f0: 20 2a 2a 61 72 67 76 29 3b 0a 23 65 6e 64 69 66   **argv);.#endif
0a00: 20 2f 2a 20 48 41 56 45 5f 41 43 43 45 50 54 41   /* HAVE_ACCEPTA
0a10: 42 4c 45 5f 44 4c 41 44 44 52 20 2a 2f 0a 0a 23  BLE_DLADDR */..#
0a20: 69 66 64 65 66 20 54 43 4c 4b 49 54 5f 52 45 51  ifdef TCLKIT_REQ
0a30: 55 49 52 45 5f 54 43 4c 45 58 45 43 55 54 41 42  UIRE_TCLEXECUTAB
0a40: 4c 45 4e 41 4d 45 0a 63 68 61 72 20 2a 74 63 6c  LENAME.char *tcl
0a50: 45 78 65 63 75 74 61 62 6c 65 4e 61 6d 65 3b 0a  ExecutableName;.
0a60: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 20 2a 20 20 41  #endif../*. *  A
0a70: 74 74 65 6d 70 74 20 74 6f 20 6c 6f 61 64 20 61  ttempt to load a
0a80: 20 22 62 6f 6f 74 2e 74 63 6c 22 20 65 6e 74 72   "boot.tcl" entr
0a90: 79 20 66 72 6f 6d 20 74 68 65 20 65 6d 62 65 64  y from the embed
0aa0: 64 65 64 20 4d 65 74 61 4b 69 74 20 66 69 6c 65  ded MetaKit file
0ab0: 2e 0a 20 2a 20 20 49 66 20 74 68 65 72 65 20 69  .. *  If there i
0ac0: 73 6e 27 74 20 6f 6e 65 2c 20 74 72 79 20 74 6f  sn't one, try to
0ad0: 20 6f 70 65 6e 20 61 20 72 65 67 75 6c 61 72 20   open a regular 
0ae0: 22 73 65 74 75 70 2e 74 63 6c 22 20 66 69 6c 65  "setup.tcl" file
0af0: 20 69 6e 73 74 65 61 64 2e 0a 20 2a 20 20 49 66   instead.. *  If
0b00: 20 74 68 61 74 20 66 61 69 6c 73 2c 20 74 68 69   that fails, thi
0b10: 73 20 63 6f 64 65 20 77 69 6c 6c 20 74 68 72 6f  s code will thro
0b20: 77 20 61 6e 20 65 72 72 6f 72 2c 20 75 73 69 6e  w an error, usin
0b30: 67 20 61 20 6d 65 73 73 61 67 65 20 62 6f 78 2e  g a message box.
0b40: 0a 20 2a 2f 0a 2f 2a 0a 20 2a 20 54 68 69 73 20  . */./*. * This 
0b50: 54 63 6c 20 63 6f 64 65 20 69 73 20 69 6e 76 6f  Tcl code is invo
0b60: 6b 65 64 20 77 68 65 6e 65 76 65 72 20 54 63 6c  ked whenever Tcl
0b70: 5f 49 6e 69 74 28 29 20 69 73 20 63 61 6c 6c 65  _Init() is calle
0b80: 64 20 6f 6e 20 61 6e 0a 20 2a 20 69 6e 74 65 72  d on an. * inter
0b90: 70 72 65 74 65 72 2e 20 20 49 74 20 73 68 6f 75  preter.  It shou
0ba0: 6c 64 20 6d 6f 75 6e 74 20 75 70 20 74 68 65 20  ld mount up the 
0bb0: 56 46 53 20 61 6e 64 20 6d 61 6b 65 20 65 76 65  VFS and make eve
0bc0: 72 79 74 68 69 6e 67 20 72 65 61 64 79 20 66 6f  rything ready fo
0bd0: 72 0a 20 2a 20 74 68 61 74 20 69 6e 74 65 72 70  r. * that interp
0be0: 72 65 74 65 72 20 74 6f 20 64 6f 20 69 74 73 20  reter to do its 
0bf0: 6a 6f 62 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 20  job.. */.static 
0c00: 63 68 61 72 20 2a 70 72 65 49 6e 69 74 43 6d 64  char *preInitCmd
0c10: 20 3d 20 0a 23 69 66 20 64 65 66 69 6e 65 64 28   = .#if defined(
0c20: 5f 57 49 4e 33 32 5f 57 43 45 29 20 26 26 20 21  _WIN32_WCE) && !
0c30: 64 65 66 69 6e 65 64 28 54 43 4c 4b 49 54 5f 44  defined(TCLKIT_D
0c40: 4c 4c 29 0a 2f 2a 20 73 69 6c 6c 79 20 68 61 63  LL)./* silly hac
0c50: 6b 20 74 6f 20 67 65 74 20 77 69 6e 63 65 20 70  k to get wince p
0c60: 6f 72 74 20 74 6f 20 6c 61 75 6e 63 68 2c 20 73  ort to launch, s
0c70: 6f 6d 65 20 73 6f 72 74 20 6f 66 20 73 74 64 7b  ome sort of std{
0c80: 69 6e 2c 6f 75 74 2c 65 72 72 7d 20 70 72 6f 62  in,out,err} prob
0c90: 6c 65 6d 20 2a 2f 0a 22 6f 70 65 6e 20 2f 6b 69  lem */."open /ki
0ca0: 74 6f 75 74 2e 74 78 74 20 61 3b 20 6f 70 65 6e  tout.txt a; open
0cb0: 20 2f 6b 69 74 6f 75 74 2e 74 78 74 20 61 3b 20   /kitout.txt a; 
0cc0: 6f 70 65 6e 20 2f 6b 69 74 6f 75 74 2e 74 78 74  open /kitout.txt
0cd0: 20 61 5c 6e 22 0a 2f 2a 20 74 68 69 73 20 74 6f   a\n"./* this to
0ce0: 6f 20 73 65 65 6d 73 20 74 6f 20 62 65 20 6e 65  o seems to be ne
0cf0: 65 64 65 64 20 6f 6e 20 77 69 6e 63 65 20 2d 20  eded on wince - 
0d00: 69 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  it appears to be
0d10: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20   related to the 
0d20: 61 62 6f 76 65 20 2a 2f 0a 22 63 61 74 63 68 20  above */."catch 
0d30: 7b 72 65 6e 61 6d 65 20 73 6f 75 72 63 65 20 3a  {rename source :
0d40: 3a 74 63 6c 3a 3a 73 6f 75 72 63 65 7d 5c 6e 22  :tcl::source}\n"
0d50: 0a 22 70 72 6f 63 20 73 6f 75 72 63 65 20 66 69  ."proc source fi
0d60: 6c 65 20 7b 5c 6e 22 0a 09 22 73 65 74 20 6f 6c  le {\n".."set ol
0d70: 64 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5c  d [info script]\
0d80: 6e 22 0a 09 22 69 6e 66 6f 20 73 63 72 69 70 74  n".."info script
0d90: 20 24 66 69 6c 65 5c 6e 22 0a 09 22 73 65 74 20   $file\n".."set 
0da0: 66 69 64 20 5b 6f 70 65 6e 20 24 66 69 6c 65 5d  fid [open $file]
0db0: 5c 6e 22 0a 09 22 73 65 74 20 64 61 74 61 20 5b  \n".."set data [
0dc0: 72 65 61 64 20 24 66 69 64 5d 5c 6e 22 0a 09 22  read $fid]\n".."
0dd0: 63 6c 6f 73 65 20 24 66 69 64 5c 6e 22 0a 09 22  close $fid\n".."
0de0: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch 
0df0: 7b 75 70 6c 65 76 65 6c 20 31 20 24 64 61 74 61  {uplevel 1 $data
0e00: 7d 20 72 65 73 5d 5c 6e 22 0a 09 22 69 6e 66 6f  } res]\n".."info
0e10: 20 73 63 72 69 70 74 20 24 6f 6c 64 5c 6e 22 0a   script $old\n".
0e20: 09 22 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 32  ."if {$code == 2
0e30: 7d 20 7b 20 73 65 74 20 63 6f 64 65 20 30 20 7d  } { set code 0 }
0e40: 5c 6e 22 0a 09 22 72 65 74 75 72 6e 20 2d 63 6f  \n".."return -co
0e50: 64 65 20 24 63 6f 64 65 20 24 72 65 73 5c 6e 22  de $code $res\n"
0e60: 0a 22 7d 5c 6e 22 0a 23 65 6e 64 69 66 20 2f 2a  ."}\n".#endif /*
0e70: 20 5f 57 49 4e 33 32 5f 57 43 45 20 26 26 20 21   _WIN32_WCE && !
0e80: 54 43 4c 4b 49 54 5f 44 4c 4c 20 2a 2f 0a 22 70  TCLKIT_DLL */."p
0e90: 72 6f 63 20 74 63 6c 4b 69 74 49 6e 69 74 20 7b  roc tclKitInit {
0ea0: 7d 20 7b 5c 6e 22 0a 09 22 72 65 6e 61 6d 65 20  } {\n".."rename 
0eb0: 74 63 6c 4b 69 74 49 6e 69 74 20 7b 7d 5c 6e 22  tclKitInit {}\n"
0ec0: 0a 09 22 63 61 74 63 68 20 7b 20 6c 6f 61 64 20  .."catch { load 
0ed0: 7b 7d 20 76 66 73 20 7d 5c 6e 22 0a 23 69 66 64  {} vfs }\n".#ifd
0ee0: 65 66 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f  ef KIT_INCLUDES_
0ef0: 5a 4c 49 42 0a 09 22 63 61 74 63 68 20 7b 20 6c  ZLIB.."catch { l
0f00: 6f 61 64 20 7b 7d 20 7a 6c 69 62 20 7d 5c 6e 22  oad {} zlib }\n"
0f10: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4b  .#endif.#ifdef K
0f20: 49 54 5f 49 4e 43 4c 55 44 45 53 5f 4d 4b 34 54  IT_INCLUDES_MK4T
0f30: 43 4c 0a 09 22 63 61 74 63 68 20 7b 20 6c 6f 61  CL.."catch { loa
0f40: 64 20 7b 7d 20 4d 6b 34 74 63 6c 20 7d 5c 6e 22  d {} Mk4tcl }\n"
0f50: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 54  .#endif.#ifdef T
0f60: 43 4c 4b 49 54 5f 44 4c 4c 0a 09 22 6c 6f 61 64  CLKIT_DLL.."load
0f70: 20 7b 7d 20 74 63 6c 6b 69 74 3a 3a 69 6e 69 74   {} tclkit::init
0f80: 5c 6e 22 0a 09 22 3a 3a 74 63 6c 6b 69 74 3a 3a  \n".."::tclkit::
0f90: 69 6e 69 74 3a 3a 69 6e 69 74 49 6e 74 65 72 70  init::initInterp
0fa0: 5c 6e 22 0a 09 22 72 65 6e 61 6d 65 20 3a 3a 74  \n".."rename ::t
0fb0: 63 6c 6b 69 74 3a 3a 69 6e 69 74 3a 3a 69 6e 69  clkit::init::ini
0fc0: 74 49 6e 74 65 72 70 20 7b 7d 5c 6e 22 0a 23 65  tInterp {}\n".#e
0fd0: 6e 64 69 66 20 2f 2a 20 54 43 4c 4b 49 54 5f 44  ndif /* TCLKIT_D
0fe0: 4c 4c 20 2a 2f 0a 09 22 73 65 74 20 62 6f 6f 74  LL */.."set boot
0ff0: 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  file [file join 
1000: 22 20 54 43 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f  " TCLKIT_MOUNTPO
1010: 49 4e 54 20 22 20 62 6f 6f 74 2e 74 63 6c 5d 5c  INT " boot.tcl]\
1020: 6e 22 0a 09 22 69 66 20 7b 5b 66 69 6c 65 20 65  n".."if {[file e
1030: 78 69 73 74 73 20 24 62 6f 6f 74 66 69 6c 65 5d  xists $bootfile]
1040: 7d 20 7b 5c 6e 22 0a 09 09 22 63 61 74 63 68 20  } {\n"..."catch 
1050: 7b 5c 6e 22 0a 09 09 09 22 73 65 74 20 66 20 5b  {\n"...."set f [
1060: 6f 70 65 6e 20 24 62 6f 6f 74 66 69 6c 65 5d 5c  open $bootfile]\
1070: 6e 22 0a 09 09 09 22 73 65 74 20 73 20 5b 72 65  n"...."set s [re
1080: 61 64 20 24 66 5d 5c 6e 22 0a 09 09 09 22 63 6c  ad $f]\n"...."cl
1090: 6f 73 65 20 24 66 5c 6e 22 0a 09 09 22 7d 5c 6e  ose $f\n"..."}\n
10a0: 22 0a 09 22 7d 20 65 6c 73 65 20 7b 5c 6e 22 0a  ".."} else {\n".
10b0: 09 09 22 73 65 74 20 3a 3a 54 43 4c 4b 49 54 5f  .."set ::TCLKIT_
10c0: 49 4e 49 54 56 46 53 20 31 5c 6e 22 0a 09 22 7d  INITVFS 1\n".."}
10d0: 5c 6e 22 0a 23 69 66 64 65 66 20 4b 49 54 5f 53  \n".#ifdef KIT_S
10e0: 54 4f 52 41 47 45 5f 4d 4b 34 0a 09 22 73 65 74  TORAGE_MK4.."set
10f0: 20 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 61 67 65   ::tclKitStorage
1100: 20 5c 22 6d 6b 34 5c 22 5c 6e 22 0a 09 22 69 66   \"mk4\"\n".."if
1110: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
1120: 73 5d 7d 20 7b 5c 6e 22 0a 09 09 22 6d 6b 3a 3a  s]} {\n"..."mk::
1130: 66 69 6c 65 20 6f 70 65 6e 20 65 78 65 20 22 20  file open exe " 
1140: 54 43 4c 4b 49 54 5f 56 46 53 53 4f 55 52 43 45  TCLKIT_VFSSOURCE
1150: 20 22 20 2d 72 65 61 64 6f 6e 6c 79 5c 6e 22 0a   " -readonly\n".
1160: 09 09 22 73 65 74 20 6e 20 5b 6d 6b 3a 3a 73 65  .."set n [mk::se
1170: 6c 65 63 74 20 65 78 65 2e 64 69 72 73 21 30 2e  lect exe.dirs!0.
1180: 66 69 6c 65 73 20 6e 61 6d 65 20 62 6f 6f 74 2e  files name boot.
1190: 74 63 6c 5d 5c 6e 22 0a 09 09 22 69 66 20 7b 24  tcl]\n"..."if {$
11a0: 6e 20 21 3d 20 5c 22 5c 22 7d 20 7b 5c 6e 22 0a  n != \"\"} {\n".
11b0: 09 09 09 22 73 65 74 20 73 20 5b 6d 6b 3a 3a 67  ..."set s [mk::g
11c0: 65 74 20 65 78 65 2e 64 69 72 73 21 30 2e 66 69  et exe.dirs!0.fi
11d0: 6c 65 73 21 24 6e 20 63 6f 6e 74 65 6e 74 73 5d  les!$n contents]
11e0: 5c 6e 22 0a 09 09 09 22 69 66 20 7b 21 5b 73 74  \n"...."if {![st
11f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 5d 7d  ring length $s]}
1200: 20 7b 20 65 72 72 6f 72 20 5c 22 65 6d 70 74 79   { error \"empty
1210: 20 62 6f 6f 74 2e 74 63 6c 5c 22 20 7d 5c 6e 22   boot.tcl\" }\n"
1220: 0a 09 09 09 22 63 61 74 63 68 20 7b 6c 6f 61 64  ...."catch {load
1230: 20 7b 7d 20 7a 6c 69 62 7d 5c 6e 22 0a 09 09 09   {} zlib}\n"....
1240: 22 69 66 20 7b 5b 6d 6b 3a 3a 67 65 74 20 65 78  "if {[mk::get ex
1250: 65 2e 64 69 72 73 21 30 2e 66 69 6c 65 73 21 24  e.dirs!0.files!$
1260: 6e 20 73 69 7a 65 5d 20 21 3d 20 5b 73 74 72 69  n size] != [stri
1270: 6e 67 20 6c 65 6e 67 74 68 20 24 73 5d 7d 20 7b  ng length $s]} {
1280: 5c 6e 22 0a 09 09 09 09 22 73 65 74 20 73 20 5b  \n"....."set s [
1290: 7a 6c 69 62 20 64 65 63 6f 6d 70 72 65 73 73 20  zlib decompress 
12a0: 24 73 5d 5c 6e 22 0a 09 09 09 22 7d 5c 6e 22 0a  $s]\n"...."}\n".
12b0: 09 09 22 7d 5c 6e 22 0a 09 22 7d 5c 6e 22 0a 23  .."}\n".."}\n".#
12c0: 65 6e 64 69 66 20 2f 2a 20 4b 49 54 5f 53 54 4f  endif /* KIT_STO
12d0: 52 41 47 45 5f 4d 4b 34 20 2a 2f 0a 23 69 66 64  RAGE_MK4 */.#ifd
12e0: 65 66 20 4b 49 54 5f 53 54 4f 52 41 47 45 5f 5a  ef KIT_STORAGE_Z
12f0: 49 50 0a 09 22 73 65 74 20 3a 3a 74 63 6c 4b 69  IP.."set ::tclKi
1300: 74 53 74 6f 72 61 67 65 20 5c 22 7a 69 70 5c 22  tStorage \"zip\"
1310: 5c 6e 22 0a 09 22 69 66 20 7b 21 5b 69 6e 66 6f  \n".."if {![info
1320: 20 65 78 69 73 74 73 20 73 5d 7d 20 7b 5c 6e 22   exists s]} {\n"
1330: 0a 23 20 20 69 6e 63 6c 75 64 65 20 22 7a 69 70  .#  include "zip
1340: 76 66 73 2e 74 63 6c 2e 68 22 0a 09 09 22 63 61  vfs.tcl.h"..."ca
1350: 74 63 68 20 7b 5c 6e 22 0a 09 09 09 22 73 65 74  tch {\n"...."set
1360: 20 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 61 67 65   ::tclKitStorage
1370: 5f 66 64 20 5b 3a 3a 7a 69 70 3a 3a 6f 70 65 6e  _fd [::zip::open
1380: 20 22 20 54 43 4c 4b 49 54 5f 56 46 53 53 4f 55   " TCLKIT_VFSSOU
1390: 52 43 45 20 22 5d 5c 6e 22 0a 09 09 09 22 3a 3a  RCE "]\n"...."::
13a0: 7a 69 70 3a 3a 73 74 61 74 20 24 3a 3a 74 63 6c  zip::stat $::tcl
13b0: 4b 69 74 53 74 6f 72 61 67 65 5f 66 64 20 62 6f  KitStorage_fd bo
13c0: 6f 74 2e 74 63 6c 20 73 62 5c 6e 22 0a 09 09 09  ot.tcl sb\n"....
13d0: 22 73 65 65 6b 20 24 3a 3a 74 63 6c 4b 69 74 53  "seek $::tclKitS
13e0: 74 6f 72 61 67 65 5f 66 64 20 24 73 62 28 69 6e  torage_fd $sb(in
13f0: 6f 29 5c 6e 22 0a 09 09 09 22 3a 3a 7a 69 70 3a  o)\n"...."::zip:
1400: 3a 44 61 74 61 20 24 3a 3a 74 63 6c 4b 69 74 53  :Data $::tclKitS
1410: 74 6f 72 61 67 65 5f 66 64 20 73 62 20 73 5c 6e  torage_fd sb s\n
1420: 22 0a 09 09 22 7d 5c 6e 22 0a 09 22 7d 5c 6e 22  "..."}\n".."}\n"
1430: 0a 23 65 6e 64 69 66 20 2f 2a 20 4b 49 54 5f 53  .#endif /* KIT_S
1440: 54 4f 52 41 47 45 5f 5a 49 50 20 2a 2f 0a 23 69  TORAGE_ZIP */.#i
1450: 66 64 65 66 20 4b 49 54 5f 53 54 4f 52 41 47 45  fdef KIT_STORAGE
1460: 5f 43 56 46 53 0a 09 22 73 65 74 20 3a 3a 74 63  _CVFS.."set ::tc
1470: 6c 4b 69 74 53 74 6f 72 61 67 65 20 5c 22 63 76  lKitStorage \"cv
1480: 66 73 5c 22 5c 6e 22 0a 09 22 6c 6f 61 64 20 7b  fs\"\n".."load {
1490: 7d 20 72 65 63 68 61 6e 5c 6e 22 0a 09 22 6c 6f  } rechan\n".."lo
14a0: 61 64 20 7b 7d 20 63 76 66 73 5f 64 61 74 61 5f  ad {} cvfs_data_
14b0: 74 63 6c 5c 6e 22 0a 23 69 6e 63 6c 75 64 65 20  tcl\n".#include 
14c0: 22 63 76 66 73 2e 74 63 6c 2e 68 22 0a 09 22 69  "cvfs.tcl.h".."i
14d0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
14e0: 20 73 5d 7d 20 7b 5c 6e 22 0a 09 09 22 63 61 74   s]} {\n"..."cat
14f0: 63 68 20 7b 5c 6e 22 0a 09 09 09 22 73 65 74 20  ch {\n"...."set 
1500: 73 20 5b 3a 3a 76 66 73 3a 3a 63 76 66 73 3a 3a  s [::vfs::cvfs::
1510: 64 61 74 61 3a 3a 67 65 74 44 61 74 61 20 74 63  data::getData tc
1520: 6c 20 62 6f 6f 74 2e 74 63 6c 5d 5c 6e 22 0a 09  l boot.tcl]\n"..
1530: 09 22 7d 5c 6e 22 0a 09 22 7d 5c 6e 22 0a 23 65  ."}\n".."}\n".#e
1540: 6e 64 69 66 20 2f 2a 20 4b 49 54 5f 53 54 4f 52  ndif /* KIT_STOR
1550: 41 47 45 5f 43 56 46 53 20 2a 2f 0a 23 69 66 6e  AGE_CVFS */.#ifn
1560: 64 65 66 20 54 43 4c 4b 49 54 5f 44 4c 4c 0a 09  def TCLKIT_DLL..
1570: 22 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73  "if {![info exis
1580: 74 73 20 73 5d 7d 20 7b 5c 6e 22 0a 09 09 22 73  ts s]} {\n"..."s
1590: 65 74 20 66 20 5b 6f 70 65 6e 20 73 65 74 75 70  et f [open setup
15a0: 2e 74 63 6c 5d 5c 6e 22 0a 09 09 22 73 65 74 20  .tcl]\n"..."set 
15b0: 73 20 5b 72 65 61 64 20 24 66 5d 5c 6e 22 0a 09  s [read $f]\n"..
15c0: 09 22 63 6c 6f 73 65 20 24 66 5c 6e 22 0a 09 22  ."close $f\n".."
15d0: 7d 5c 6e 22 0a 23 65 6e 64 69 66 20 2f 2a 20 21  }\n".#endif /* !
15e0: 54 43 4c 4b 49 54 5f 44 4c 4c 20 2a 2f 0a 23 69  TCLKIT_DLL */.#i
15f0: 66 64 65 66 20 54 43 4c 4b 49 54 5f 44 4c 4c 0a  fdef TCLKIT_DLL.
1600: 09 22 73 65 74 20 3a 3a 54 43 4c 4b 49 54 5f 54  ."set ::TCLKIT_T
1610: 59 50 45 20 5c 22 6b 69 74 64 6c 6c 5c 22 5c 6e  YPE \"kitdll\"\n
1620: 22 0a 23 65 6c 73 65 0a 09 22 73 65 74 20 3a 3a  ".#else.."set ::
1630: 54 43 4c 4b 49 54 5f 54 59 50 45 20 5c 22 74 63  TCLKIT_TYPE \"tc
1640: 6c 6b 69 74 5c 22 5c 6e 22 0a 23 65 6e 64 69 66  lkit\"\n".#endif
1650: 20 2f 2a 20 54 43 4c 4b 49 54 5f 44 4c 4c 20 2a   /* TCLKIT_DLL *
1660: 2f 0a 09 22 73 65 74 20 3a 3a 54 43 4c 4b 49 54  /.."set ::TCLKIT
1670: 5f 4d 4f 55 4e 54 50 4f 49 4e 54 20 22 20 54 43  _MOUNTPOINT " TC
1680: 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 4e 54 20  LKIT_MOUNTPOINT 
1690: 22 5c 6e 22 0a 09 22 73 65 74 20 3a 3a 54 43 4c  "\n".."set ::TCL
16a0: 4b 49 54 5f 56 46 53 53 4f 55 52 43 45 20 22 20  KIT_VFSSOURCE " 
16b0: 54 43 4c 4b 49 54 5f 56 46 53 53 4f 55 52 43 45  TCLKIT_VFSSOURCE
16c0: 20 22 5c 6e 22 0a 09 22 73 65 74 20 3a 3a 54 43   "\n".."set ::TC
16d0: 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 4e 54 5f  LKIT_MOUNTPOINT_
16e0: 56 41 52 20 7b 22 20 54 43 4c 4b 49 54 5f 4d 4f  VAR {" TCLKIT_MO
16f0: 55 4e 54 50 4f 49 4e 54 20 22 7d 5c 6e 22 0a 09  UNTPOINT "}\n"..
1700: 22 73 65 74 20 3a 3a 54 43 4c 4b 49 54 5f 56 46  "set ::TCLKIT_VF
1710: 53 53 4f 55 52 43 45 5f 56 41 52 20 7b 22 20 54  SSOURCE_VAR {" T
1720: 43 4c 4b 49 54 5f 56 46 53 53 4f 55 52 43 45 20  CLKIT_VFSSOURCE 
1730: 22 7d 5c 6e 22 0a 09 22 75 70 6c 65 76 65 6c 20  "}\n".."uplevel 
1740: 23 30 20 24 73 5c 6e 22 0a 23 69 66 20 64 65 66  #0 $s\n".#if def
1750: 69 6e 65 64 28 4b 49 54 5f 49 4e 43 4c 55 44 45  ined(KIT_INCLUDE
1760: 53 5f 54 4b 29 20 26 26 20 64 65 66 69 6e 65 64  S_TK) && defined
1770: 28 4b 49 54 5f 54 4b 5f 56 45 52 53 49 4f 4e 29  (KIT_TK_VERSION)
1780: 0a 09 22 70 61 63 6b 61 67 65 20 69 66 6e 65 65  .."package ifnee
1790: 64 65 64 20 54 6b 20 22 20 4b 49 54 5f 54 4b 5f  ded Tk " KIT_TK_
17a0: 56 45 52 53 49 4f 4e 20 22 20 7b 5c 6e 22 0a 09  VERSION " {\n"..
17b0: 09 22 6c 6f 61 64 20 7b 7d 20 54 6b 5c 6e 22 0a  ."load {} Tk\n".
17c0: 09 22 7d 5c 6e 22 0a 23 65 6e 64 69 66 0a 23 69  ."}\n".#endif.#i
17d0: 66 64 65 66 20 5f 57 49 4e 33 32 0a 09 22 63 61  fdef _WIN32.."ca
17e0: 74 63 68 20 7b 6c 6f 61 64 20 7b 7d 20 64 64 65  tch {load {} dde
17f0: 7d 5c 6e 22 0a 09 22 63 61 74 63 68 20 7b 6c 6f  }\n".."catch {lo
1800: 61 64 20 7b 7d 20 72 65 67 69 73 74 72 79 7d 5c  ad {} registry}\
1810: 6e 22 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 57 49  n".#endif /* _WI
1820: 4e 33 32 20 2a 2f 0a 09 22 72 65 74 75 72 6e 20  N32 */.."return 
1830: 30 5c 6e 22 0a 22 7d 5c 6e 22 0a 22 74 63 6c 4b  0\n"."}\n"."tclK
1840: 69 74 49 6e 69 74 22 3b 0a 0a 73 74 61 74 69 63  itInit";..static
1850: 20 63 6f 6e 73 74 20 63 68 61 72 20 69 6e 69 74   const char init
1860: 53 63 72 69 70 74 5b 5d 20 3d 0a 22 69 66 20 7b  Script[] =."if {
1870: 5b 66 69 6c 65 20 69 73 66 69 6c 65 20 5b 66 69  [file isfile [fi
1880: 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 6e 61  le join [info na
1890: 6d 65 6f 66 65 78 65 5d 20 6d 61 69 6e 2e 74 63  meofexe] main.tc
18a0: 6c 5d 5d 7d 20 7b 5c 6e 22 0a 09 22 69 66 20 7b  l]]} {\n".."if {
18b0: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 63  [info commands c
18c0: 6f 6e 73 6f 6c 65 5d 20 21 3d 20 7b 7d 7d 20 7b  onsole] != {}} {
18d0: 20 63 6f 6e 73 6f 6c 65 20 68 69 64 65 20 7d 5c   console hide }\
18e0: 6e 22 0a 09 22 73 65 74 20 74 63 6c 5f 69 6e 74  n".."set tcl_int
18f0: 65 72 61 63 74 69 76 65 20 30 5c 6e 22 0a 09 22  eractive 0\n".."
1900: 69 6e 63 72 20 61 72 67 63 5c 6e 22 0a 09 22 73  incr argc\n".."s
1910: 65 74 20 61 72 67 76 20 5b 6c 69 6e 73 65 72 74  et argv [linsert
1920: 20 24 61 72 67 76 20 30 20 24 61 72 67 76 30 5d   $argv 0 $argv0]
1930: 5c 6e 22 0a 09 22 73 65 74 20 61 72 67 76 30 20  \n".."set argv0 
1940: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f  [file join [info
1950: 20 6e 61 6d 65 6f 66 65 78 65 5d 20 6d 61 69 6e   nameofexe] main
1960: 2e 74 63 6c 5d 5c 6e 22 0a 22 7d 20 65 6c 73 65  .tcl]\n"."} else
1970: 20 63 6f 6e 74 69 6e 75 65 5c 6e 22 3b 0a 0a 2f   continue\n";../
1980: 2a 20 53 65 74 45 78 65 63 4e 61 6d 65 20 2d 2d  * SetExecName --
1990: 0a 0a 20 20 20 48 61 63 6b 20 74 6f 20 67 65 74  ..   Hack to get
19a0: 20 61 72 6f 75 6e 64 20 54 63 6c 20 62 75 67 20   around Tcl bug 
19b0: 31 32 32 34 38 38 38 2e 0a 2a 2f 0a 73 74 61 74  1224888..*/.stat
19c0: 69 63 20 76 6f 69 64 20 53 65 74 45 78 65 63 4e  ic void SetExecN
19d0: 61 6d 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ame(Tcl_Interp *
19e0: 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68  interp, const ch
19f0: 61 72 20 2a 70 61 74 68 29 20 7b 0a 23 69 66 64  ar *path) {.#ifd
1a00: 65 66 20 54 43 4c 4b 49 54 5f 52 45 51 55 49 52  ef TCLKIT_REQUIR
1a10: 45 5f 54 43 4c 45 58 45 43 55 54 41 42 4c 45 4e  E_TCLEXECUTABLEN
1a20: 41 4d 45 0a 09 74 63 6c 45 78 65 63 75 74 61 62  AME..tclExecutab
1a30: 6c 65 4e 61 6d 65 20 3d 20 73 74 72 64 75 70 28  leName = strdup(
1a40: 70 61 74 68 29 3b 0a 23 65 6e 64 69 66 0a 09 54  path);.#endif..T
1a50: 63 6c 5f 46 69 6e 64 45 78 65 63 75 74 61 62 6c  cl_FindExecutabl
1a60: 65 28 70 61 74 68 29 3b 0a 0a 09 72 65 74 75 72  e(path);...retur
1a70: 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69  n;.}..static voi
1a80: 64 20 46 69 6e 64 41 6e 64 53 65 74 45 78 65 63  d FindAndSetExec
1a90: 4e 61 6d 65 28 54 63 6c 5f 49 6e 74 65 72 70 20  Name(Tcl_Interp 
1aa0: 2a 69 6e 74 65 72 70 29 20 7b 0a 09 69 6e 74 20  *interp) {..int 
1ab0: 6c 65 6e 20 3d 20 30 3b 0a 09 54 63 6c 5f 4f 62  len = 0;..Tcl_Ob
1ac0: 6a 20 2a 65 78 65 63 4e 61 6d 65 4f 62 6a 3b 0a  j *execNameObj;.
1ad0: 09 54 63 6c 5f 4f 62 6a 20 2a 6c 6f 62 6a 76 5b  .Tcl_Obj *lobjv[
1ae0: 31 5d 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f  1];.#ifdef HAVE_
1af0: 52 45 41 44 4c 49 4e 4b 0a 09 73 73 69 7a 65 5f  READLINK..ssize_
1b00: 74 20 72 65 61 64 6c 69 6e 6b 5f 72 65 74 3b 0a  t readlink_ret;.
1b10: 09 63 68 61 72 20 65 78 65 5f 62 75 66 5b 34 30  .char exe_buf[40
1b20: 39 36 5d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 48  96];.#endif /* H
1b30: 41 56 45 5f 52 45 41 44 4c 49 4e 4b 20 2a 2f 0a  AVE_READLINK */.
1b40: 23 69 66 64 65 66 20 48 41 56 45 5f 41 43 43 45  #ifdef HAVE_ACCE
1b50: 50 54 41 42 4c 45 5f 44 4c 41 44 44 52 0a 09 44  PTABLE_DLADDR..D
1b60: 6c 5f 69 6e 66 6f 20 73 79 6d 69 6e 66 6f 3b 0a  l_info syminfo;.
1b70: 09 69 6e 74 20 64 6c 61 64 64 72 5f 72 65 74 3b  .int dladdr_ret;
1b80: 0a 23 65 6e 64 69 66 20 2f 2a 20 48 41 56 45 5f  .#endif /* HAVE_
1b90: 41 43 43 45 50 54 41 42 4c 45 5f 44 4c 41 44 44  ACCEPTABLE_DLADD
1ba0: 52 20 2a 2f 20 0a 0a 23 69 66 64 65 66 20 48 41  R */ ..#ifdef HA
1bb0: 56 45 5f 52 45 41 44 4c 49 4e 4b 0a 09 69 66 20  VE_READLINK..if 
1bc0: 28 54 63 6c 5f 47 65 74 4e 61 6d 65 4f 66 45 78  (Tcl_GetNameOfEx
1bd0: 65 63 75 74 61 62 6c 65 28 29 20 3d 3d 20 4e 55  ecutable() == NU
1be0: 4c 4c 29 20 7b 0a 09 09 72 65 61 64 6c 69 6e 6b  LL) {...readlink
1bf0: 5f 72 65 74 20 3d 20 72 65 61 64 6c 69 6e 6b 28  _ret = readlink(
1c00: 22 2f 70 72 6f 63 2f 73 65 6c 66 2f 65 78 65 22  "/proc/self/exe"
1c10: 2c 20 65 78 65 5f 62 75 66 2c 20 73 69 7a 65 6f  , exe_buf, sizeo
1c20: 66 28 65 78 65 5f 62 75 66 29 20 2d 20 31 29 3b  f(exe_buf) - 1);
1c30: 0a 0a 09 09 69 66 20 28 72 65 61 64 6c 69 6e 6b  ....if (readlink
1c40: 5f 72 65 74 20 3e 20 30 20 26 26 20 72 65 61 64  _ret > 0 && read
1c50: 6c 69 6e 6b 5f 72 65 74 20 3c 20 28 73 69 7a 65  link_ret < (size
1c60: 6f 66 28 65 78 65 5f 62 75 66 29 20 2d 20 31 29  of(exe_buf) - 1)
1c70: 29 20 7b 0a 09 09 09 65 78 65 5f 62 75 66 5b 72  ) {....exe_buf[r
1c80: 65 61 64 6c 69 6e 6b 5f 72 65 74 5d 20 3d 20 27  eadlink_ret] = '
1c90: 5c 30 27 3b 0a 0a 09 09 09 53 65 74 45 78 65 63  \0';.....SetExec
1ca0: 4e 61 6d 65 28 69 6e 74 65 72 70 2c 20 65 78 65  Name(interp, exe
1cb0: 5f 62 75 66 29 3b 0a 0a 09 09 09 72 65 74 75 72  _buf);.....retur
1cc0: 6e 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28  n;...}..}...if (
1cd0: 54 63 6c 5f 47 65 74 4e 61 6d 65 4f 66 45 78 65  Tcl_GetNameOfExe
1ce0: 63 75 74 61 62 6c 65 28 29 20 3d 3d 20 4e 55 4c  cutable() == NUL
1cf0: 4c 29 20 7b 0a 09 09 72 65 61 64 6c 69 6e 6b 5f  L) {...readlink_
1d00: 72 65 74 20 3d 20 72 65 61 64 6c 69 6e 6b 28 22  ret = readlink("
1d10: 2f 70 72 6f 63 2f 63 75 72 70 72 6f 63 2f 66 69  /proc/curproc/fi
1d20: 6c 65 22 2c 20 65 78 65 5f 62 75 66 2c 20 73 69  le", exe_buf, si
1d30: 7a 65 6f 66 28 65 78 65 5f 62 75 66 29 20 2d 20  zeof(exe_buf) - 
1d40: 31 29 3b 0a 0a 09 09 69 66 20 28 72 65 61 64 6c  1);....if (readl
1d50: 69 6e 6b 5f 72 65 74 20 3e 20 30 20 26 26 20 72  ink_ret > 0 && r
1d60: 65 61 64 6c 69 6e 6b 5f 72 65 74 20 3c 20 28 73  eadlink_ret < (s
1d70: 69 7a 65 6f 66 28 65 78 65 5f 62 75 66 29 20 2d  izeof(exe_buf) -
1d80: 20 31 29 29 20 7b 0a 09 09 09 65 78 65 5f 62 75   1)) {....exe_bu
1d90: 66 5b 72 65 61 64 6c 69 6e 6b 5f 72 65 74 5d 20  f[readlink_ret] 
1da0: 3d 20 27 5c 30 27 3b 0a 0a 09 09 09 69 66 20 28  = '\0';.....if (
1db0: 73 74 72 63 6d 70 28 65 78 65 5f 62 75 66 2c 20  strcmp(exe_buf, 
1dc0: 22 75 6e 6b 6e 6f 77 6e 22 29 20 21 3d 20 30 29  "unknown") != 0)
1dd0: 20 7b 0a 09 09 09 09 53 65 74 45 78 65 63 4e 61   {.....SetExecNa
1de0: 6d 65 28 69 6e 74 65 72 70 2c 20 65 78 65 5f 62  me(interp, exe_b
1df0: 75 66 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e  uf);......return
1e00: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 23 65  ;....}...}..}.#e
1e10: 6e 64 69 66 20 2f 2a 20 48 41 56 45 5f 52 45 41  ndif /* HAVE_REA
1e20: 44 4c 49 4e 4b 20 2a 2f 0a 0a 23 69 66 64 65 66  DLINK */..#ifdef
1e30: 20 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45   HAVE_ACCEPTABLE
1e40: 5f 44 4c 41 44 44 52 0a 23 20 20 69 66 6e 64 65  _DLADDR.#  ifnde
1e50: 66 20 54 43 4c 4b 49 54 5f 44 4c 4c 0a 09 69 66  f TCLKIT_DLL..if
1e60: 20 28 54 63 6c 5f 47 65 74 4e 61 6d 65 4f 66 45   (Tcl_GetNameOfE
1e70: 78 65 63 75 74 61 62 6c 65 28 29 20 3d 3d 20 4e  xecutable() == N
1e80: 55 4c 4c 29 20 7b 0a 09 09 64 6c 61 64 64 72 5f  ULL) {...dladdr_
1e90: 72 65 74 20 3d 20 64 6c 61 64 64 72 28 26 53 65  ret = dladdr(&Se
1ea0: 74 45 78 65 63 4e 61 6d 65 2c 20 26 73 79 6d 69  tExecName, &symi
1eb0: 6e 66 6f 29 3b 0a 09 09 69 66 20 28 64 6c 61 64  nfo);...if (dlad
1ec0: 64 72 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  dr_ret != 0) {..
1ed0: 09 09 53 65 74 45 78 65 63 4e 61 6d 65 28 69 6e  ..SetExecName(in
1ee0: 74 65 72 70 2c 20 73 79 6d 69 6e 66 6f 2e 64 6c  terp, syminfo.dl
1ef0: 69 5f 66 6e 61 6d 65 29 3b 0a 0a 09 09 09 72 65  i_fname);.....re
1f00: 74 75 72 6e 3b 0a 09 09 7d 0a 09 7d 0a 23 20 20  turn;...}..}.#  
1f10: 65 6e 64 69 66 20 2f 2a 20 21 54 43 4c 4b 49 54  endif /* !TCLKIT
1f20: 5f 44 4c 4c 20 2a 2f 0a 0a 23 20 20 69 66 64 65  _DLL */..#  ifde
1f30: 66 20 4b 49 54 53 48 5f 4e 45 45 44 5f 57 49 4e  f KITSH_NEED_WIN
1f40: 4d 41 49 4e 0a 09 69 66 20 28 54 63 6c 5f 47 65  MAIN..if (Tcl_Ge
1f50: 74 4e 61 6d 65 4f 66 45 78 65 63 75 74 61 62 6c  tNameOfExecutabl
1f60: 65 28 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 23  e() == NULL) {.#
1f70: 20 20 20 20 69 66 64 65 66 20 5f 57 49 4e 33 32      ifdef _WIN32
1f80: 5f 57 43 45 0a 09 09 64 6c 61 64 64 72 5f 72 65  _WCE...dladdr_re
1f90: 74 20 3d 20 64 6c 61 64 64 72 28 26 57 69 6e 4d  t = dladdr(&WinM
1fa0: 61 69 6e 2c 20 26 73 79 6d 69 6e 66 6f 29 3b 0a  ain, &syminfo);.
1fb0: 23 20 20 20 20 65 6c 73 65 0a 09 09 64 6c 61 64  #    else...dlad
1fc0: 64 72 5f 72 65 74 20 3d 20 64 6c 61 64 64 72 28  dr_ret = dladdr(
1fd0: 26 77 57 69 6e 4d 61 69 6e 2c 20 26 73 79 6d 69  &wWinMain, &symi
1fe0: 6e 66 6f 29 3b 0a 23 20 20 20 20 65 6e 64 69 66  nfo);.#    endif
1ff0: 20 2f 2a 20 5f 57 49 4e 33 32 5f 57 43 45 20 2a   /* _WIN32_WCE *
2000: 2f 0a 0a 09 09 69 66 20 28 64 6c 61 64 64 72 5f  /....if (dladdr_
2010: 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 53  ret != 0) {....S
2020: 65 74 45 78 65 63 4e 61 6d 65 28 69 6e 74 65 72  etExecName(inter
2030: 70 2c 20 73 79 6d 69 6e 66 6f 2e 64 6c 69 5f 66  p, syminfo.dli_f
2040: 6e 61 6d 65 29 3b 0a 0a 09 09 09 72 65 74 75 72  name);.....retur
2050: 6e 3b 0a 09 09 7d 0a 09 7d 0a 23 20 20 65 6e 64  n;...}..}.#  end
2060: 69 66 20 2f 2a 20 4b 49 54 53 48 5f 4e 45 45 44  if /* KITSH_NEED
2070: 5f 57 49 4e 4d 41 49 4e 20 2a 2f 0a 0a 09 69 66  _WINMAIN */...if
2080: 20 28 54 63 6c 5f 47 65 74 4e 61 6d 65 4f 66 45   (Tcl_GetNameOfE
2090: 78 65 63 75 74 61 62 6c 65 28 29 20 3d 3d 20 4e  xecutable() == N
20a0: 55 4c 4c 29 20 7b 0a 09 09 64 6c 61 64 64 72 5f  ULL) {...dladdr_
20b0: 72 65 74 20 3d 20 64 6c 61 64 64 72 28 26 6d 61  ret = dladdr(&ma
20c0: 69 6e 2c 20 26 73 79 6d 69 6e 66 6f 29 3b 0a 09  in, &syminfo);..
20d0: 09 69 66 20 28 64 6c 61 64 64 72 5f 72 65 74 20  .if (dladdr_ret 
20e0: 21 3d 20 30 29 20 7b 0a 09 09 09 53 65 74 45 78  != 0) {....SetEx
20f0: 65 63 4e 61 6d 65 28 69 6e 74 65 72 70 2c 20 73  ecName(interp, s
2100: 79 6d 69 6e 66 6f 2e 64 6c 69 5f 66 6e 61 6d 65  yminfo.dli_fname
2110: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 3b 0a 09  );.....return;..
2120: 09 7d 0a 09 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  .}..}.#endif /* 
2130: 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45 5f  HAVE_ACCEPTABLE_
2140: 44 4c 41 44 44 52 20 2a 2f 0a 0a 09 69 66 20 28  DLADDR */...if (
2150: 54 63 6c 5f 47 65 74 4e 61 6d 65 4f 66 45 78 65  Tcl_GetNameOfExe
2160: 63 75 74 61 62 6c 65 28 29 20 3d 3d 20 4e 55 4c  cutable() == NUL
2170: 4c 29 20 7b 0a 09 09 6c 6f 62 6a 76 5b 30 5d 20  L) {...lobjv[0] 
2180: 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78 28  = Tcl_GetVar2Ex(
2190: 69 6e 74 65 72 70 2c 20 22 61 72 67 76 30 22 2c  interp, "argv0",
21a0: 20 4e 55 4c 4c 2c 20 54 43 4c 5f 47 4c 4f 42 41   NULL, TCL_GLOBA
21b0: 4c 5f 4f 4e 4c 59 29 3b 0a 09 09 65 78 65 63 4e  L_ONLY);...execN
21c0: 61 6d 65 4f 62 6a 20 3d 20 54 63 6c 5f 46 53 4a  ameObj = Tcl_FSJ
21d0: 6f 69 6e 54 6f 50 61 74 68 28 54 63 6c 5f 46 53  oinToPath(Tcl_FS
21e0: 47 65 74 43 77 64 28 69 6e 74 65 72 70 29 2c 20  GetCwd(interp), 
21f0: 31 2c 20 6c 6f 62 6a 76 29 3b 0a 0a 09 09 53 65  1, lobjv);....Se
2200: 74 45 78 65 63 4e 61 6d 65 28 69 6e 74 65 72 70  tExecName(interp
2210: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46  , Tcl_GetStringF
2220: 72 6f 6d 4f 62 6a 28 65 78 65 63 4e 61 6d 65 4f  romObj(execNameO
2230: 62 6a 2c 20 26 6c 65 6e 29 29 3b 0a 0a 09 09 72  bj, &len));....r
2240: 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 72 65 74 75  eturn;..}...retu
2250: 72 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f  rn;.}..static vo
2260: 69 64 20 5f 54 63 6c 6b 69 74 5f 47 65 6e 65 72  id _Tclkit_Gener
2270: 69 63 5f 49 6e 69 74 28 76 6f 69 64 29 20 7b 0a  ic_Init(void) {.
2280: 23 69 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55  #ifdef KIT_INCLU
2290: 44 45 53 5f 4d 4b 34 54 43 4c 0a 09 54 63 6c 5f  DES_MK4TCL..Tcl_
22a0: 53 74 61 74 69 63 50 61 63 6b 61 67 65 28 30 2c  StaticPackage(0,
22b0: 20 22 4d 6b 34 74 63 6c 22 2c 20 4d 6b 34 74 63   "Mk4tcl", Mk4tc
22c0: 6c 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23  l_Init, NULL);.#
22d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4b 49 54  endif.#ifdef KIT
22e0: 5f 49 4e 43 4c 55 44 45 53 5f 50 57 42 0a 09 54  _INCLUDES_PWB..T
22f0: 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65  cl_StaticPackage
2300: 28 30 2c 20 22 70 77 62 22 2c 20 50 77 62 5f 49  (0, "pwb", Pwb_I
2310: 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23 65 6e 64  nit, NULL);.#end
2320: 69 66 20 0a 09 54 63 6c 5f 53 74 61 74 69 63 50  if ..Tcl_StaticP
2330: 61 63 6b 61 67 65 28 30 2c 20 22 72 65 63 68 61  ackage(0, "recha
2340: 6e 22 2c 20 52 65 63 68 61 6e 5f 49 6e 69 74 2c  n", Rechan_Init,
2350: 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 53 74 61   NULL);..Tcl_Sta
2360: 74 69 63 50 61 63 6b 61 67 65 28 30 2c 20 22 76  ticPackage(0, "v
2370: 66 73 22 2c 20 56 66 73 5f 49 6e 69 74 2c 20 4e  fs", Vfs_Init, N
2380: 55 4c 4c 29 3b 0a 23 69 66 64 65 66 20 4b 49 54  ULL);.#ifdef KIT
2390: 5f 49 4e 43 4c 55 44 45 53 5f 5a 4c 49 42 0a 09  _INCLUDES_ZLIB..
23a0: 54 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67  Tcl_StaticPackag
23b0: 65 28 30 2c 20 22 7a 6c 69 62 22 2c 20 5a 6c 69  e(0, "zlib", Zli
23c0: 62 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23  b_Init, NULL);.#
23d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4b 49 54  endif.#ifdef KIT
23e0: 5f 53 54 4f 52 41 47 45 5f 43 56 46 53 0a 09 54  _STORAGE_CVFS..T
23f0: 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65  cl_StaticPackage
2400: 28 30 2c 20 22 63 76 66 73 5f 64 61 74 61 5f 74  (0, "cvfs_data_t
2410: 63 6c 22 2c 20 43 76 66 73 5f 64 61 74 61 5f 74  cl", Cvfs_data_t
2420: 63 6c 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a  cl_Init, NULL);.
2430: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 54 43  #endif.#ifdef TC
2440: 4c 5f 54 48 52 45 41 44 53 0a 09 54 63 6c 5f 53  L_THREADS..Tcl_S
2450: 74 61 74 69 63 50 61 63 6b 61 67 65 28 30 2c 20  taticPackage(0, 
2460: 22 54 68 72 65 61 64 22 2c 20 54 68 72 65 61 64  "Thread", Thread
2470: 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23 65  _Init, NULL);.#e
2480: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 57 49 4e  ndif.#ifdef _WIN
2490: 33 32 0a 09 54 63 6c 5f 53 74 61 74 69 63 50 61  32..Tcl_StaticPa
24a0: 63 6b 61 67 65 28 30 2c 20 22 64 64 65 22 2c 20  ckage(0, "dde", 
24b0: 44 64 65 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b  Dde_Init, NULL);
24c0: 0a 09 54 63 6c 5f 53 74 61 74 69 63 50 61 63 6b  ..Tcl_StaticPack
24d0: 61 67 65 28 30 2c 20 22 72 65 67 69 73 74 72 79  age(0, "registry
24e0: 22 2c 20 52 65 67 69 73 74 72 79 5f 49 6e 69 74  ", Registry_Init
24f0: 2c 20 4e 55 4c 4c 29 3b 0a 23 65 6e 64 69 66 0a  , NULL);.#endif.
2500: 23 69 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55  #ifdef KIT_INCLU
2510: 44 45 53 5f 54 4b 0a 09 54 63 6c 5f 53 74 61 74  DES_TK..Tcl_Stat
2520: 69 63 50 61 63 6b 61 67 65 28 30 2c 20 22 54 6b  icPackage(0, "Tk
2530: 22 2c 20 54 6b 5f 49 6e 69 74 2c 20 54 6b 5f 53  ", Tk_Init, Tk_S
2540: 61 66 65 49 6e 69 74 29 3b 0a 23 65 6e 64 69 66  afeInit);.#endif
2550: 0a 0a 09 5f 54 63 6c 6b 69 74 5f 47 65 6e 65 72  ..._Tclkit_Gener
2560: 69 63 4c 69 62 5f 49 6e 69 74 28 29 3b 0a 0a 09  icLib_Init();...
2570: 54 63 6c 53 65 74 50 72 65 49 6e 69 74 53 63 72  TclSetPreInitScr
2580: 69 70 74 28 70 72 65 49 6e 69 74 43 6d 64 29 3b  ipt(preInitCmd);
2590: 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74  ...return;.}..st
25a0: 61 74 69 63 20 76 6f 69 64 20 5f 54 63 6c 6b 69  atic void _Tclki
25b0: 74 5f 49 6e 74 65 72 70 5f 49 6e 69 74 28 54 63  t_Interp_Init(Tc
25c0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
25d0: 29 20 7b 0a 23 69 66 64 65 66 20 54 43 4c 4b 49  ) {.#ifdef TCLKI
25e0: 54 5f 43 41 4e 5f 53 45 54 5f 45 4e 43 4f 44 49  T_CAN_SET_ENCODI
25f0: 4e 47 0a 09 54 63 6c 5f 44 53 74 72 69 6e 67 20  NG..Tcl_DString 
2600: 65 6e 63 6f 64 69 6e 67 4e 61 6d 65 3b 0a 23 65  encodingName;.#e
2610: 6e 64 69 66 20 2f 2a 20 54 43 4c 4b 49 54 5f 43  ndif /* TCLKIT_C
2620: 41 4e 5f 53 45 54 5f 45 4e 43 4f 44 49 4e 47 20  AN_SET_ENCODING 
2630: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 54 43 4c 4b  */..#ifndef TCLK
2640: 49 54 5f 44 4c 4c 0a 09 2f 2a 20 74 68 65 20 74  IT_DLL../* the t
2650: 63 6c 5f 72 63 46 69 6c 65 4e 61 6d 65 20 76 61  cl_rcFileName va
2660: 72 69 61 62 6c 65 20 6f 6e 6c 79 20 65 78 69 73  riable only exis
2670: 74 73 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61  ts in the initia
2680: 6c 20 69 6e 74 65 72 70 72 65 74 65 72 20 2a 2f  l interpreter */
2690: 0a 23 20 20 69 66 64 65 66 20 5f 57 49 4e 33 32  .#  ifdef _WIN32
26a0: 0a 09 54 63 6c 5f 53 65 74 56 61 72 28 69 6e 74  ..Tcl_SetVar(int
26b0: 65 72 70 2c 20 22 74 63 6c 5f 72 63 46 69 6c 65  erp, "tcl_rcFile
26c0: 4e 61 6d 65 22 2c 20 22 7e 2f 74 63 6c 6b 69 74  Name", "~/tclkit
26d0: 72 63 2e 74 63 6c 22 2c 20 54 43 4c 5f 47 4c 4f  rc.tcl", TCL_GLO
26e0: 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 20 20 65 6c  BAL_ONLY);.#  el
26f0: 73 65 0a 09 54 63 6c 5f 53 65 74 56 61 72 28 69  se..Tcl_SetVar(i
2700: 6e 74 65 72 70 2c 20 22 74 63 6c 5f 72 63 46 69  nterp, "tcl_rcFi
2710: 6c 65 4e 61 6d 65 22 2c 20 22 7e 2f 2e 74 63 6c  leName", "~/.tcl
2720: 6b 69 74 72 63 22 2c 20 54 43 4c 5f 47 4c 4f 42  kitrc", TCL_GLOB
2730: 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 20 20 65 6e 64  AL_ONLY);.#  end
2740: 69 66 20 2f 2a 20 5f 57 49 4e 33 32 20 2a 2f 0a  if /* _WIN32 */.
2750: 23 65 6e 64 69 66 20 2f 2a 20 21 54 43 4c 4b 49  #endif /* !TCLKI
2760: 54 5f 44 4c 4c 20 2a 2f 0a 0a 23 69 66 64 65 66  T_DLL */..#ifdef
2770: 20 54 43 4c 4b 49 54 5f 43 41 4e 5f 53 45 54 5f   TCLKIT_CAN_SET_
2780: 45 4e 43 4f 44 49 4e 47 0a 09 2f 2a 20 53 65 74  ENCODING../* Set
2790: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 66 72   the encoding fr
27a0: 6f 6d 20 74 68 65 20 45 6e 76 69 72 6f 6e 6d 65  om the Environme
27b0: 6e 74 20 2a 2f 0a 09 54 63 6c 5f 47 65 74 45 6e  nt */..Tcl_GetEn
27c0: 63 6f 64 69 6e 67 4e 61 6d 65 46 72 6f 6d 45 6e  codingNameFromEn
27d0: 76 69 72 6f 6e 6d 65 6e 74 28 26 65 6e 63 6f 64  vironment(&encod
27e0: 69 6e 67 4e 61 6d 65 29 3b 0a 09 54 63 6c 5f 53  ingName);..Tcl_S
27f0: 65 74 53 79 73 74 65 6d 45 6e 63 6f 64 69 6e 67  etSystemEncoding
2800: 28 4e 55 4c 4c 2c 20 54 63 6c 5f 44 53 74 72 69  (NULL, Tcl_DStri
2810: 6e 67 56 61 6c 75 65 28 26 65 6e 63 6f 64 69 6e  ngValue(&encodin
2820: 67 4e 61 6d 65 29 29 3b 0a 09 54 63 6c 5f 53 65  gName));..Tcl_Se
2830: 74 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63  tVar(interp, "tc
2840: 6c 6b 69 74 5f 73 79 73 74 65 6d 5f 65 6e 63 6f  lkit_system_enco
2850: 64 69 6e 67 22 2c 20 54 63 6c 5f 44 53 74 72 69  ding", Tcl_DStri
2860: 6e 67 56 61 6c 75 65 28 26 65 6e 63 6f 64 69 6e  ngValue(&encodin
2870: 67 4e 61 6d 65 29 2c 20 30 29 3b 0a 09 54 63 6c  gName), 0);..Tcl
2880: 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 65 6e  _DStringFree(&en
2890: 63 6f 64 69 6e 67 4e 61 6d 65 29 3b 0a 23 65 6e  codingName);.#en
28a0: 64 69 66 20 2f 2a 20 54 43 4c 4b 49 54 5f 43 41  dif /* TCLKIT_CA
28b0: 4e 5f 53 45 54 5f 45 4e 43 4f 44 49 4e 47 20 2a  N_SET_ENCODING *
28c0: 2f 0a 0a 09 2f 2a 20 48 61 63 6b 20 74 6f 20 67  /.../* Hack to g
28d0: 65 74 20 61 72 6f 75 6e 64 20 54 63 6c 20 62 75  et around Tcl bu
28e0: 67 20 31 32 32 34 38 38 38 2e 20 20 54 68 69 73  g 1224888.  This
28f0: 20 6d 75 73 74 20 62 65 20 72 75 6e 20 68 65 72   must be run her
2900: 65 20 61 6e 64 0a 09 20 2a 20 69 6e 20 4c 69 62  e and.. * in Lib
2910: 72 61 72 79 50 61 74 68 4f 62 6a 43 6d 64 20 62  raryPathObjCmd b
2920: 65 63 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f  ecause this info
2930: 72 6d 61 74 69 6f 6e 20 69 73 20 6e 65 65 64 65  rmation is neede
2940: 64 20 62 6f 74 68 0a 09 20 2a 20 62 65 66 6f 72  d both.. * befor
2950: 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 61 74  e and after that
2960: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 72 75 6e 2e   command is run.
2970: 20 2a 2f 0a 09 46 69 6e 64 41 6e 64 53 65 74 45   */..FindAndSetE
2980: 78 65 63 4e 61 6d 65 28 69 6e 74 65 72 70 29 3b  xecName(interp);
2990: 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 23 69  ...return;.}..#i
29a0: 66 6e 64 65 66 20 54 43 4c 4b 49 54 5f 44 4c 4c  fndef TCLKIT_DLL
29b0: 0a 69 6e 74 20 54 63 6c 4b 69 74 5f 41 70 70 49  .int TclKit_AppI
29c0: 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  nit(Tcl_Interp *
29d0: 69 6e 74 65 72 70 29 20 7b 0a 23 69 66 64 65 66  interp) {.#ifdef
29e0: 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 54 4b   KIT_INCLUDES_TK
29f0: 0a 23 20 20 69 66 64 65 66 20 5f 57 49 4e 33 32  .#  ifdef _WIN32
2a00: 0a 23 20 20 20 20 69 66 6e 64 65 66 20 5f 57 49  .#    ifndef _WI
2a10: 4e 33 32 5f 57 43 45 0a 09 63 68 61 72 20 6d 73  N32_WCE..char ms
2a20: 67 42 75 66 5b 32 30 34 39 5d 3b 0a 23 20 20 20  gBuf[2049];.#   
2a30: 20 65 6e 64 69 66 20 2f 2a 20 21 5f 57 49 4e 33   endif /* !_WIN3
2a40: 32 5f 57 43 45 20 2a 2f 0a 23 20 20 65 6e 64 69  2_WCE */.#  endi
2a50: 66 20 2f 2a 20 5f 57 49 4e 33 32 20 2a 2f 0a 23  f /* _WIN32 */.#
2a60: 65 6e 64 69 66 20 2f 2a 20 4b 49 54 5f 49 4e 43  endif /* KIT_INC
2a70: 4c 55 44 45 53 5f 54 4b 20 2a 2f 0a 0a 09 2f 2a  LUDES_TK */.../*
2a80: 20 50 65 72 66 6f 72 6d 20 63 6f 6d 6d 6f 6e 20   Perform common 
2a90: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
2aa0: 2f 0a 09 5f 54 63 6c 6b 69 74 5f 47 65 6e 65 72  /.._Tclkit_Gener
2ab0: 69 63 5f 49 6e 69 74 28 29 3b 0a 0a 09 5f 54 63  ic_Init();..._Tc
2ac0: 6c 6b 69 74 5f 49 6e 74 65 72 70 5f 49 6e 69 74  lkit_Interp_Init
2ad0: 28 69 6e 74 65 72 70 29 3b 0a 0a 09 69 66 20 28  (interp);...if (
2ae0: 54 63 6c 5f 49 6e 69 74 28 69 6e 74 65 72 70 29  Tcl_Init(interp)
2af0: 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b   == TCL_ERROR) {
2b00: 0a 09 09 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09  ...goto error;..
2b10: 7d 0a 0a 23 69 66 64 65 66 20 4b 49 54 5f 49 4e  }..#ifdef KIT_IN
2b20: 43 4c 55 44 45 53 5f 54 4b 0a 23 20 20 69 66 64  CLUDES_TK.#  ifd
2b30: 65 66 20 5f 57 49 4e 33 32 0a 09 69 66 20 28 54  ef _WIN32..if (T
2b40: 6b 5f 49 6e 69 74 28 69 6e 74 65 72 70 29 20 3d  k_Init(interp) =
2b50: 3d 20 54 43 4c 5f 45 52 52 4f 52 29 20 7b 0a 09  = TCL_ERROR) {..
2b60: 09 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a  .goto error;..}.
2b70: 09 69 66 20 28 54 6b 5f 43 72 65 61 74 65 43 6f  .if (Tk_CreateCo
2b80: 6e 73 6f 6c 65 57 69 6e 64 6f 77 28 69 6e 74 65  nsoleWindow(inte
2b90: 72 70 29 20 3d 3d 20 54 43 4c 5f 45 52 52 4f 52  rp) == TCL_ERROR
2ba0: 29 20 7b 0a 09 09 67 6f 74 6f 20 65 72 72 6f 72  ) {...goto error
2bb0: 3b 0a 09 7d 0a 23 20 20 65 6e 64 69 66 20 2f 2a  ;..}.#  endif /*
2bc0: 20 5f 57 49 4e 33 32 20 2a 2f 0a 23 65 6e 64 69   _WIN32 */.#endi
2bd0: 66 20 2f 2a 20 4b 49 54 5f 49 4e 43 4c 55 44 45  f /* KIT_INCLUDE
2be0: 53 5f 54 4b 20 2a 2f 0a 0a 09 2f 2a 20 6d 65 73  S_TK */.../* mes
2bf0: 73 79 20 62 65 63 61 75 73 65 20 54 63 6c 53 65  sy because TclSe
2c00: 74 53 74 61 72 74 75 70 53 63 72 69 70 74 50 61  tStartupScriptPa
2c10: 74 68 20 69 73 20 63 61 6c 6c 65 64 20 73 6c 69  th is called sli
2c20: 67 68 74 6c 79 20 74 6f 6f 20 6c 61 74 65 20 2a  ghtly too late *
2c30: 2f 0a 09 69 66 20 28 54 63 6c 5f 45 76 61 6c 28  /..if (Tcl_Eval(
2c40: 69 6e 74 65 72 70 2c 20 69 6e 69 74 53 63 72 69  interp, initScri
2c50: 70 74 29 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 7b  pt) == TCL_OK) {
2c60: 0a 09 09 54 63 6c 5f 4f 62 6a 2a 20 70 61 74 68  ...Tcl_Obj* path
2c70: 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 54 43  ;.#ifdef HAVE_TC
2c80: 4c 53 45 54 53 54 41 52 54 55 50 53 43 52 49 50  LSETSTARTUPSCRIP
2c90: 54 50 41 54 48 0a 09 09 70 61 74 68 20 3d 20 54  TPATH...path = T
2ca0: 63 6c 47 65 74 53 74 61 72 74 75 70 53 63 72 69  clGetStartupScri
2cb0: 70 74 50 61 74 68 28 29 3b 0a 09 09 54 63 6c 53  ptPath();...TclS
2cc0: 65 74 53 74 61 72 74 75 70 53 63 72 69 70 74 50  etStartupScriptP
2cd0: 61 74 68 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65  ath(Tcl_GetObjRe
2ce0: 73 75 6c 74 28 69 6e 74 65 72 70 29 29 3b 0a 23  sult(interp));.#
2cf0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56  elif defined(HAV
2d00: 45 5f 54 43 4c 5f 53 45 54 53 54 41 52 54 55 50  E_TCL_SETSTARTUP
2d10: 53 43 52 49 50 54 29 0a 09 09 70 61 74 68 20 3d  SCRIPT)...path =
2d20: 20 54 63 6c 5f 47 65 74 53 74 61 72 74 75 70 53   Tcl_GetStartupS
2d30: 63 72 69 70 74 28 4e 55 4c 4c 29 3b 0a 09 09 54  cript(NULL);...T
2d40: 63 6c 5f 53 65 74 53 74 61 72 74 75 70 53 63 72  cl_SetStartupScr
2d50: 69 70 74 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65  ipt(Tcl_GetObjRe
2d60: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 4e 55  sult(interp), NU
2d70: 4c 4c 29 3b 0a 23 65 6e 64 69 66 0a 09 09 69 66  LL);.#endif...if
2d80: 20 28 70 61 74 68 20 3d 3d 20 4e 55 4c 4c 29 20   (path == NULL) 
2d90: 7b 0a 09 09 09 54 63 6c 5f 45 76 61 6c 28 69 6e  {....Tcl_Eval(in
2da0: 74 65 72 70 2c 20 22 69 6e 63 72 20 61 72 67 63  terp, "incr argc
2db0: 20 2d 31 3b 20 73 65 74 20 61 72 67 76 20 5b 6c   -1; set argv [l
2dc0: 72 61 6e 67 65 20 24 61 72 67 76 20 31 20 65 6e  range $argv 1 en
2dd0: 64 5d 22 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 54  d]");...}..}...T
2de0: 63 6c 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70  cl_SetVar(interp
2df0: 2c 20 22 65 72 72 6f 72 49 6e 66 6f 22 2c 20 22  , "errorInfo", "
2e00: 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
2e10: 4c 59 29 3b 0a 09 54 63 6c 5f 52 65 73 65 74 52  LY);..Tcl_ResetR
2e20: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 0a  esult(interp);..
2e30: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a  .return TCL_OK;.
2e40: 0a 65 72 72 6f 72 3a 0a 23 69 66 64 65 66 20 4b  .error:.#ifdef K
2e50: 49 54 5f 49 4e 43 4c 55 44 45 53 5f 54 4b 0a 23  IT_INCLUDES_TK.#
2e60: 20 20 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 09    ifdef _WIN32..
2e70: 4d 65 73 73 61 67 65 42 65 65 70 28 4d 42 5f 49  MessageBeep(MB_I
2e80: 43 4f 4e 45 58 43 4c 41 4d 41 54 49 4f 4e 29 3b  CONEXCLAMATION);
2e90: 0a 23 20 20 20 20 69 66 6e 64 65 66 20 5f 57 49  .#    ifndef _WI
2ea0: 4e 33 32 5f 57 43 45 0a 09 73 6e 70 72 69 6e 74  N32_WCE..snprint
2eb0: 66 28 6d 73 67 42 75 66 2c 20 73 69 7a 65 6f 66  f(msgBuf, sizeof
2ec0: 28 6d 73 67 42 75 66 29 2c 0a 09 09 22 41 20 63  (msgBuf),..."A c
2ed0: 72 69 74 69 63 61 6c 20 65 72 72 6f 72 20 68 61  ritical error ha
2ee0: 73 20 6f 63 63 75 72 72 65 64 2e 20 20 50 6c 65  s occurred.  Ple
2ef0: 61 73 65 20 72 65 70 6f 72 74 20 74 68 69 73 20  ase report this 
2f00: 74 6f 20 74 68 65 20 54 63 6c 6b 69 74 20 76 65  to the Tclkit ve
2f10: 6e 64 6f 72 2e 5c 6e 49 6e 74 65 72 70 72 65 74  ndor.\nInterpret
2f20: 65 72 20 52 65 74 75 72 6e 65 64 3a 20 25 73 5c  er Returned: %s\
2f30: 6e 45 72 72 6f 72 20 49 6e 66 6f 3a 20 25 73 22  nError Info: %s"
2f40: 2c 0a 09 09 54 63 6c 5f 47 65 74 53 74 72 69 6e  ,...Tcl_GetStrin
2f50: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c  gResult(interp),
2f60: 0a 09 09 54 63 6c 5f 47 65 74 56 61 72 28 69 6e  ...Tcl_GetVar(in
2f70: 74 65 72 70 2c 20 22 65 72 72 6f 72 49 6e 66 6f  terp, "errorInfo
2f80: 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
2f90: 4c 59 29 29 3b 0a 0a 09 4d 65 73 73 61 67 65 42  LY));...MessageB
2fa0: 6f 78 28 4e 55 4c 4c 2c 20 6d 73 67 42 75 66 2c  ox(NULL, msgBuf,
2fb0: 20 22 45 72 72 6f 72 20 69 6e 20 54 63 6c 4b 69   "Error in TclKi
2fc0: 74 22 2c 0a 09 09 4d 42 5f 49 43 4f 4e 53 54 4f  t",...MB_ICONSTO
2fd0: 50 20 7c 20 4d 42 5f 4f 4b 20 7c 20 4d 42 5f 54  P | MB_OK | MB_T
2fe0: 41 53 4b 4d 4f 44 41 4c 20 7c 20 4d 42 5f 53 45  ASKMODAL | MB_SE
2ff0: 54 46 4f 52 45 47 52 4f 55 4e 44 29 3b 0a 0a 09  TFOREGROUND);...
3000: 45 78 69 74 50 72 6f 63 65 73 73 28 31 29 3b 0a  ExitProcess(1);.
3010: 23 20 20 20 20 65 6e 64 69 66 20 2f 2a 20 21 5f  #    endif /* !_
3020: 57 49 4e 33 32 5f 57 43 45 20 2a 2f 0a 20 20 20  WIN32_WCE */.   
3030: 20 2f 2a 20 77 65 20 77 6f 6e 27 74 20 72 65 61   /* we won't rea
3040: 63 68 20 74 68 69 73 2c 20 62 75 74 20 77 65 20  ch this, but we 
3050: 6e 65 65 64 20 74 68 65 20 72 65 74 75 72 6e 20  need the return 
3060: 2a 2f 0a 23 20 20 65 6e 64 69 66 20 2f 2a 20 5f  */.#  endif /* _
3070: 57 49 4e 33 32 20 2a 2f 0a 23 65 6e 64 69 66 20  WIN32 */.#endif 
3080: 2f 2a 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f  /* KIT_INCLUDES_
3090: 54 4b 20 2a 2f 0a 0a 09 72 65 74 75 72 6e 20 54  TK */...return T
30a0: 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65 6e 64  CL_ERROR;.}.#end
30b0: 69 66 20 2f 2a 20 21 54 43 4c 4b 49 54 5f 44 4c  if /* !TCLKIT_DL
30c0: 4c 20 2a 2f 0a 0a 0a 23 69 66 64 65 66 20 54 43  L */...#ifdef TC
30d0: 4c 4b 49 54 5f 44 4c 4c 0a 23 20 20 69 66 64 65  LKIT_DLL.#  ifde
30e0: 66 20 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c  f HAVE_ACCEPTABL
30f0: 45 5f 44 4c 41 44 44 52 0a 2f 2a 20 53 79 6d 62  E_DLADDR./* Symb
3100: 6f 6c 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 67  ol to resolve ag
3110: 61 69 6e 73 74 20 64 6c 61 64 64 72 28 29 20 2a  ainst dladdr() *
3120: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 5f 74  /.static void _t
3130: 63 6c 6b 69 74 5f 64 75 6d 6d 79 5f 66 75 6e 63  clkit_dummy_func
3140: 28 76 6f 69 64 29 20 7b 0a 09 72 65 74 75 72 6e  (void) {..return
3150: 3b 0a 7d 0a 23 20 20 65 6e 64 69 66 20 2f 2a 20  ;.}.#  endif /* 
3160: 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45 5f  HAVE_ACCEPTABLE_
3170: 44 4c 41 44 44 52 20 2a 2f 0a 0a 2f 2a 0a 20 2a  DLADDR */../*. *
3180: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77   This function w
3190: 69 6c 6c 20 72 65 74 75 72 6e 20 61 20 70 61 74  ill return a pat
31a0: 68 6e 61 6d 65 20 77 65 20 63 61 6e 20 6f 70 65  hname we can ope
31b0: 6e 28 29 20 74 6f 20 74 72 65 61 74 20 61 73 20  n() to treat as 
31c0: 61 20 56 46 53 2c 0a 20 2a 20 68 6f 70 65 66 75  a VFS,. * hopefu
31d0: 6c 6c 79 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63  lly. */.static c
31e0: 68 61 72 20 2a 66 69 6e 64 5f 74 63 6c 6b 69 74  har *find_tclkit
31f0: 5f 64 6c 6c 5f 70 61 74 68 28 76 6f 69 64 29 20  _dll_path(void) 
3200: 7b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 41 43  {.#ifdef HAVE_AC
3210: 43 45 50 54 41 42 4c 45 5f 44 4c 41 44 44 52 0a  CEPTABLE_DLADDR.
3220: 09 44 6c 5f 69 6e 66 6f 20 73 79 6d 69 6e 66 6f  .Dl_info syminfo
3230: 3b 0a 09 69 6e 74 20 64 6c 61 64 64 72 5f 72 65  ;..int dladdr_re
3240: 74 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 48 41 56  t;.#endif /* HAV
3250: 45 5f 41 43 43 45 50 54 41 42 4c 45 5f 44 4c 41  E_ACCEPTABLE_DLA
3260: 44 44 52 20 2a 2f 0a 23 69 66 64 65 66 20 5f 57  DDR */.#ifdef _W
3270: 49 4e 33 32 0a 09 54 43 48 41 52 20 6d 6f 64 75  IN32..TCHAR modu
3280: 6c 65 6e 61 6d 65 5b 38 31 39 32 5d 3b 0a 09 44  lename[8192];..D
3290: 57 4f 52 44 20 67 6d 66 6e 5f 72 65 74 3b 0a 23  WORD gmfn_ret;.#
32a0: 65 6e 64 69 66 20 2f 2a 20 5f 57 49 4e 33 32 20  endif /* _WIN32 
32b0: 2a 2f 0a 0a 23 69 66 64 65 66 20 48 41 56 45 5f  */..#ifdef HAVE_
32c0: 41 43 43 45 50 54 41 42 4c 45 5f 44 4c 41 44 44  ACCEPTABLE_DLADD
32d0: 52 0a 09 64 6c 61 64 64 72 5f 72 65 74 20 3d 20  R..dladdr_ret = 
32e0: 64 6c 61 64 64 72 28 26 5f 74 63 6c 6b 69 74 5f  dladdr(&_tclkit_
32f0: 64 75 6d 6d 79 5f 66 75 6e 63 2c 20 26 73 79 6d  dummy_func, &sym
3300: 69 6e 66 6f 29 3b 0a 09 69 66 20 28 64 6c 61 64  info);..if (dlad
3310: 64 72 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  dr_ret != 0) {..
3320: 09 69 66 20 28 73 79 6d 69 6e 66 6f 2e 64 6c 69  .if (syminfo.dli
3330: 5f 66 6e 61 6d 65 20 26 26 20 73 79 6d 69 6e 66  _fname && syminf
3340: 6f 2e 64 6c 69 5f 66 6e 61 6d 65 5b 30 5d 20 21  o.dli_fname[0] !
3350: 3d 20 27 5c 30 27 29 20 7b 0a 09 09 09 72 65 74  = '\0') {....ret
3360: 75 72 6e 28 73 74 72 64 75 70 28 73 79 6d 69 6e  urn(strdup(symin
3370: 66 6f 2e 64 6c 69 5f 66 6e 61 6d 65 29 29 3b 0a  fo.dli_fname));.
3380: 09 09 7d 0a 09 7d 0a 23 65 6e 64 69 66 20 2f 2a  ..}..}.#endif /*
3390: 20 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45   HAVE_ACCEPTABLE
33a0: 5f 44 4c 41 44 44 52 20 2a 2f 0a 0a 23 69 66 64  _DLADDR */..#ifd
33b0: 65 66 20 5f 57 49 4e 33 32 0a 09 67 6d 66 6e 5f  ef _WIN32..gmfn_
33c0: 72 65 74 20 3d 20 47 65 74 4d 6f 64 75 6c 65 46  ret = GetModuleF
33d0: 69 6c 65 4e 61 6d 65 28 54 63 6c 57 69 6e 47 65  ileName(TclWinGe
33e0: 74 54 63 6c 49 6e 73 74 61 6e 63 65 28 29 2c 20  tTclInstance(), 
33f0: 6d 6f 64 75 6c 65 6e 61 6d 65 2c 20 73 69 7a 65  modulename, size
3400: 6f 66 28 6d 6f 64 75 6c 65 6e 61 6d 65 29 20 2f  of(modulename) /
3410: 20 73 69 7a 65 6f 66 28 6d 6f 64 75 6c 65 6e 61   sizeof(modulena
3420: 6d 65 5b 30 5d 29 20 2d 20 31 29 3b 0a 0a 09 69  me[0]) - 1);...i
3430: 66 20 28 67 6d 66 6e 5f 72 65 74 20 21 3d 20 30  f (gmfn_ret != 0
3440: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 73 74 72  ) {...return(str
3450: 64 75 70 28 6d 6f 64 75 6c 65 6e 61 6d 65 29 29  dup(modulename))
3460: 3b 0a 09 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  ;..}.#endif /* _
3470: 57 49 4e 33 32 20 2a 2f 0a 0a 09 72 65 74 75 72  WIN32 */...retur
3480: 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a 0a 2f 2a 0a 20  n(NULL);.}../*. 
3490: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
34a0: 65 78 69 73 74 73 20 74 6f 20 61 6c 6c 6f 77 20  exists to allow 
34b0: 43 20 63 6f 64 65 20 74 6f 20 69 6e 69 74 69 61  C code to initia
34c0: 6c 69 7a 65 20 61 20 70 61 72 74 69 63 75 6c 61  lize a particula
34d0: 72 0a 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72  r. * interpreter
34e0: 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  .. */.static int
34f0: 20 74 63 6c 6b 69 74 5f 69 6e 69 74 5f 69 6e 69   tclkit_init_ini
3500: 74 69 6e 74 65 72 70 28 43 6c 69 65 6e 74 44 61  tinterp(ClientDa
3510: 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
3520: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f  p *interp, int o
3530: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  bjc, Tcl_Obj *CO
3540: 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63  NST objv[]) {..c
3550: 68 61 72 20 2a 6b 69 74 64 6c 6c 5f 70 61 74 68  har *kitdll_path
3560: 3b 0a 0a 09 6b 69 74 64 6c 6c 5f 70 61 74 68 20  ;...kitdll_path 
3570: 3d 20 66 69 6e 64 5f 74 63 6c 6b 69 74 5f 64 6c  = find_tclkit_dl
3580: 6c 5f 70 61 74 68 28 29 3b 0a 09 69 66 20 28 6b  l_path();..if (k
3590: 69 74 64 6c 6c 5f 70 61 74 68 20 21 3d 20 4e 55  itdll_path != NU
35a0: 4c 4c 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 56  LL) {...Tcl_SetV
35b0: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 4b  ar(interp, "tclK
35c0: 69 74 46 69 6c 65 6e 61 6d 65 22 2c 20 6b 69 74  itFilename", kit
35d0: 64 6c 6c 5f 70 61 74 68 2c 20 54 43 4c 5f 47 4c  dll_path, TCL_GL
35e0: 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 0a 09 09 66  OBAL_ONLY);....f
35f0: 72 65 65 28 6b 69 74 64 6c 6c 5f 70 61 74 68 29  ree(kitdll_path)
3600: 3b 0a 09 7d 0a 0a 09 5f 54 63 6c 6b 69 74 5f 49  ;..}..._Tclkit_I
3610: 6e 74 65 72 70 5f 49 6e 69 74 28 69 6e 74 65 72  nterp_Init(inter
3620: 70 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  p);...return(TCL
3630: 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 43  _OK);.}../*. * C
3640: 72 65 61 74 65 20 61 20 70 61 63 6b 61 67 65 20  reate a package 
3650: 66 6f 72 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  for initializing
3660: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 69 6e   a particular in
3670: 74 65 72 70 72 65 74 65 72 2e 20 20 54 68 69 73  terpreter.  This
3680: 20 69 73 0a 20 2a 20 6f 75 72 20 68 6f 6f 6b 20   is. * our hook 
3690: 74 6f 20 68 61 76 65 20 54 63 6c 20 69 6e 76 6f  to have Tcl invo
36a0: 6b 65 20 43 20 63 6f 6d 6d 61 6e 64 73 20 77 68  ke C commands wh
36b0: 65 6e 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69  en creating an i
36c0: 6e 74 65 72 70 72 65 74 65 72 2e 0a 20 2a 20 54  nterpreter.. * T
36d0: 68 65 20 70 72 65 49 6e 69 74 43 6d 64 20 77 69  he preInitCmd wi
36e0: 6c 6c 20 6c 6f 61 64 20 74 68 65 20 70 61 63 6b  ll load the pack
36f0: 61 67 65 20 69 6e 20 74 68 65 20 6e 65 77 20 69  age in the new i
3700: 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20 69  nterpreter and i
3710: 6e 76 6f 6b 65 0a 20 2a 20 74 68 69 73 20 66 75  nvoke. * this fu
3720: 6e 63 74 69 6f 6e 2e 0a 20 2a 2f 0a 69 6e 74 20  nction.. */.int 
3730: 54 63 6c 6b 69 74 5f 69 6e 69 74 5f 49 6e 69 74  Tclkit_init_Init
3740: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
3750: 65 72 70 29 20 7b 0a 09 54 63 6c 5f 43 6f 6d 6d  erp) {..Tcl_Comm
3760: 61 6e 64 20 74 63 6c 43 72 65 61 74 43 6f 6d 6d  and tclCreatComm
3770: 5f 72 65 74 3b 0a 09 69 6e 74 20 74 63 6c 50 6b  _ret;..int tclPk
3780: 67 50 72 6f 76 5f 72 65 74 3b 0a 0a 09 74 63 6c  gProv_ret;...tcl
3790: 43 72 65 61 74 43 6f 6d 6d 5f 72 65 74 20 3d 20  CreatComm_ret = 
37a0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
37b0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
37c0: 74 63 6c 6b 69 74 3a 3a 69 6e 69 74 3a 3a 69 6e  tclkit::init::in
37d0: 69 74 49 6e 74 65 72 70 22 2c 20 74 63 6c 6b 69  itInterp", tclki
37e0: 74 5f 69 6e 69 74 5f 69 6e 69 74 69 6e 74 65 72  t_init_initinter
37f0: 70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  p, NULL, NULL);.
3800: 09 69 66 20 28 21 74 63 6c 43 72 65 61 74 43 6f  .if (!tclCreatCo
3810: 6d 6d 5f 72 65 74 29 20 7b 0a 09 09 72 65 74 75  mm_ret) {...retu
3820: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
3830: 7d 0a 0a 09 74 63 6c 50 6b 67 50 72 6f 76 5f 72  }...tclPkgProv_r
3840: 65 74 20 3d 20 54 63 6c 5f 50 6b 67 50 72 6f 76  et = Tcl_PkgProv
3850: 69 64 65 28 69 6e 74 65 72 70 2c 20 22 74 63 6c  ide(interp, "tcl
3860: 6b 69 74 3a 3a 69 6e 69 74 22 2c 20 22 31 2e 30  kit::init", "1.0
3870: 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 74 63 6c  ");...return(tcl
3880: 50 6b 67 50 72 6f 76 5f 72 65 74 29 3b 0a 7d 0a  PkgProv_ret);.}.
3890: 0a 2f 2a 0a 20 2a 20 49 6e 69 74 69 61 6c 69 7a  ./*. * Initializ
38a0: 65 20 74 68 65 20 54 63 6c 20 73 79 73 74 65 6d  e the Tcl system
38b0: 20 77 68 65 6e 20 77 65 20 61 72 65 20 6c 6f 61   when we are loa
38c0: 64 65 64 2c 20 74 68 61 74 20 77 61 79 20 54 63  ded, that way Tc
38d0: 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 20 61  l functions. * a
38e0: 72 65 20 72 65 61 64 79 20 74 6f 20 62 65 20 75  re ready to be u
38f0: 73 65 64 20 77 68 65 6e 20 69 6e 76 6f 6b 65 64  sed when invoked
3900: 2e 0a 20 2a 2f 0a 76 6f 69 64 20 5f 5f 61 74 74  .. */.void __att
3910: 72 69 62 75 74 65 5f 5f 28 28 63 6f 6e 73 74 72  ribute__((constr
3920: 75 63 74 6f 72 29 29 20 5f 54 63 6c 6b 69 74 5f  uctor)) _Tclkit_
3930: 49 6e 69 74 28 76 6f 69 64 29 20 7b 0a 09 54 63  Init(void) {..Tc
3940: 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65 28  l_StaticPackage(
3950: 30 2c 20 22 74 63 6c 6b 69 74 3a 3a 69 6e 69 74  0, "tclkit::init
3960: 22 2c 20 54 63 6c 6b 69 74 5f 69 6e 69 74 5f 49  ", Tclkit_init_I
3970: 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 5f 54  nit, NULL);..._T
3980: 63 6c 6b 69 74 5f 47 65 6e 65 72 69 63 5f 49 6e  clkit_Generic_In
3990: 69 74 28 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a  it();...return;.
39a0: 7d 0a 23 65 6e 64 69 66 0a                       }.#endif.