Hex Artifact Content

Artifact 5dad1f22e39996e2801f8774f3798f716f8183f4:


0000: 23 69 66 64 65 66 20 4b 49 54 5f 49 4e 43 4c 55  #ifdef KIT_INCLU
0010: 44 45 53 5f 54 4b 0a 23 20 20 69 6e 63 6c 75 64  DES_TK.#  includ
0020: 65 20 3c 74 6b 2e 68 3e 0a 23 65 6c 73 65 0a 23  e <tk.h>.#else.#
0030: 20 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e 68    include <tcl.h
0040: 3e 0a 23 65 6e 64 69 66 20 2f 2a 20 4b 49 54 5f  >.#endif /* KIT_
0050: 49 4e 43 4c 55 44 45 53 5f 54 4b 20 2a 2f 0a 0a  INCLUDES_TK */..
0060: 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 23 20  #ifdef _WIN32.# 
0070: 20 64 65 66 69 6e 65 20 57 49 4e 33 32 5f 4c 45   define WIN32_LE
0080: 41 4e 5f 41 4e 44 5f 4d 45 41 4e 0a 23 20 20 69  AN_AND_MEAN.#  i
0090: 6e 63 6c 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e  nclude <windows.
00a0: 68 3e 0a 23 20 20 75 6e 64 65 66 20 57 49 4e 33  h>.#  undef WIN3
00b0: 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41 4e 0a  2_LEAN_AND_MEAN.
00c0: 23 65 6e 64 69 66 20 2f 2a 20 5f 57 49 4e 33 32  #endif /* _WIN32
00d0: 20 2a 2f 0a 0a 23 69 66 64 65 66 20 48 41 56 45   */..#ifdef HAVE
00e0: 5f 53 54 52 49 4e 47 5f 48 0a 23 20 20 69 6e 63  _STRING_H.#  inc
00f0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
0100: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
0110: 56 45 5f 53 54 52 49 4e 47 53 5f 48 0a 23 20 20  VE_STRINGS_H.#  
0120: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 73  include <strings
0130: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0140: 66 20 48 41 56 45 5f 44 4c 46 43 4e 5f 48 0a 23  f HAVE_DLFCN_H.#
0150: 20 20 69 6e 63 6c 75 64 65 20 3c 64 6c 66 63 6e    include <dlfcn
0160: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63  .h>.#endif..#inc
0170: 6c 75 64 65 20 22 74 63 6c 49 6e 74 2e 68 22 0a  lude "tclInt.h".
0180: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56  .#if defined(HAV
0190: 45 5f 54 43 4c 5f 47 45 54 45 4e 43 4f 44 49 4e  E_TCL_GETENCODIN
01a0: 47 4e 41 4d 45 46 52 4f 4d 45 4e 56 49 52 4f 4e  GNAMEFROMENVIRON
01b0: 4d 45 4e 54 29 20 26 26 20 64 65 66 69 6e 65 64  MENT) && defined
01c0: 28 48 41 56 45 5f 54 43 4c 5f 53 45 54 53 59 53  (HAVE_TCL_SETSYS
01d0: 54 45 4d 45 4e 43 4f 44 49 4e 47 29 0a 23 20 20  TEMENCODING).#  
01e0: 64 65 66 69 6e 65 20 54 43 4c 4b 49 54 5f 43 41  define TCLKIT_CA
01f0: 4e 5f 53 45 54 5f 45 4e 43 4f 44 49 4e 47 20 31  N_SET_ENCODING 1
0200: 0a 23 65 6e 64 69 66 0a 23 69 66 20 31 30 20 2a  .#endif.#if 10 *
0210: 20 54 43 4c 5f 4d 41 4a 4f 52 5f 56 45 52 53 49   TCL_MAJOR_VERSI
0220: 4f 4e 20 2b 20 54 43 4c 5f 4d 49 4e 4f 52 5f 56  ON + TCL_MINOR_V
0230: 45 52 53 49 4f 4e 20 3c 20 38 35 0a 23 20 20 64  ERSION < 85.#  d
0240: 65 66 69 6e 65 20 54 43 4c 4b 49 54 5f 52 45 51  efine TCLKIT_REQ
0250: 55 49 52 45 5f 54 43 4c 45 58 45 43 55 54 41 42  UIRE_TCLEXECUTAB
0260: 4c 45 4e 41 4d 45 20 31 0a 23 65 6e 64 69 66 0a  LENAME 1.#endif.
0270: 23 69 66 20 31 30 20 2a 20 54 43 4c 5f 4d 41 4a  #if 10 * TCL_MAJ
0280: 4f 52 5f 56 45 52 53 49 4f 4e 20 2b 20 54 43 4c  OR_VERSION + TCL
0290: 5f 4d 49 4e 4f 52 5f 56 45 52 53 49 4f 4e 20 3c  _MINOR_VERSION <
02a0: 20 38 35 0a 23 20 20 64 65 66 69 6e 65 20 4b 49   85.#  define KI
02b0: 54 5f 49 4e 43 4c 55 44 45 53 5f 50 57 42 20 31  T_INCLUDES_PWB 1
02c0: 0a 23 65 6e 64 69 66 0a 0a 54 63 6c 5f 41 70 70  .#endif..Tcl_App
02d0: 49 6e 69 74 50 72 6f 63 20 56 66 73 5f 49 6e 69  InitProc Vfs_Ini
02e0: 74 2c 20 52 65 63 68 61 6e 5f 49 6e 69 74 3b 0a  t, Rechan_Init;.
02f0: 54 63 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63 20  Tcl_AppInitProc 
0300: 56 66 73 5f 6b 69 74 64 6c 6c 5f 64 61 74 61 5f  Vfs_kitdll_data_
0310: 74 63 6c 5f 49 6e 69 74 3b 0a 23 69 66 64 65 66  tcl_Init;.#ifdef
0320: 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 4d 4b   KIT_INCLUDES_MK
0330: 34 54 43 4c 0a 54 63 6c 5f 41 70 70 49 6e 69 74  4TCL.Tcl_AppInit
0340: 50 72 6f 63 20 4d 6b 34 74 63 6c 5f 49 6e 69 74  Proc Mk4tcl_Init
0350: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
0360: 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 50 57 42  KIT_INCLUDES_PWB
0370: 0a 54 63 6c 5f 41 70 70 49 6e 69 74 50 72 6f 63  .Tcl_AppInitProc
0380: 20 50 77 62 5f 49 6e 69 74 3b 0a 23 65 6e 64 69   Pwb_Init;.#endi
0390: 66 0a 23 69 66 64 65 66 20 54 43 4c 5f 54 48 52  f.#ifdef TCL_THR
03a0: 45 41 44 53 0a 54 63 6c 5f 41 70 70 49 6e 69 74  EADS.Tcl_AppInit
03b0: 50 72 6f 63 20 54 68 72 65 61 64 5f 49 6e 69 74  Proc Thread_Init
03c0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
03d0: 5f 57 49 4e 33 32 0a 54 63 6c 5f 41 70 70 49 6e  _WIN32.Tcl_AppIn
03e0: 69 74 50 72 6f 63 20 44 64 65 5f 49 6e 69 74 2c  itProc Dde_Init,
03f0: 20 52 65 67 69 73 74 72 79 5f 49 6e 69 74 3b 0a   Registry_Init;.
0400: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 20 2a 20 54 68  #endif../*. * Th
0410: 69 73 20 54 63 6c 20 63 6f 64 65 20 69 73 20 69  is Tcl code is i
0420: 6e 76 6f 6b 65 64 20 77 68 65 6e 65 76 65 72 20  nvoked whenever 
0430: 54 63 6c 5f 49 6e 69 74 28 29 20 69 73 20 63 61  Tcl_Init() is ca
0440: 6c 6c 65 64 20 6f 6e 20 61 6e 0a 20 2a 20 69 6e  lled on an. * in
0450: 74 65 72 70 72 65 74 65 72 2e 20 20 49 74 20 73  terpreter.  It s
0460: 68 6f 75 6c 64 20 6d 6f 75 6e 74 20 75 70 20 74  hould mount up t
0470: 68 65 20 56 46 53 20 61 6e 64 20 6d 61 6b 65 20  he VFS and make 
0480: 65 76 65 72 79 74 68 69 6e 67 20 72 65 61 64 79  everything ready
0490: 20 66 6f 72 0a 20 2a 20 74 68 61 74 20 69 6e 74   for. * that int
04a0: 65 72 70 72 65 74 65 72 20 74 6f 20 64 6f 20 69  erpreter to do i
04b0: 74 73 20 6a 6f 62 2e 0a 20 2a 2f 0a 73 74 61 74  ts job.. */.stat
04c0: 69 63 20 63 68 61 72 20 2a 70 72 65 49 6e 69 74  ic char *preInit
04d0: 43 6d 64 20 3d 0a 22 70 72 6f 63 20 74 63 6c 4b  Cmd =."proc tclK
04e0: 69 74 49 6e 69 74 20 7b 7d 20 7b 5c 6e 22 0a 09  itInit {} {\n"..
04f0: 22 72 65 6e 61 6d 65 20 74 63 6c 4b 69 74 49 6e  "rename tclKitIn
0500: 69 74 20 7b 7d 5c 6e 22 0a 23 69 66 64 65 66 20  it {}\n".#ifdef 
0510: 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f 4d 4b 34  KIT_INCLUDES_MK4
0520: 54 43 4c 0a 09 22 63 61 74 63 68 20 7b 20 6c 6f  TCL.."catch { lo
0530: 61 64 20 7b 7d 20 4d 6b 34 74 63 6c 20 7d 5c 6e  ad {} Mk4tcl }\n
0540: 22 0a 23 65 6e 64 69 66 0a 09 22 6c 6f 61 64 20  ".#endif.."load 
0550: 7b 7d 20 74 63 6c 6b 69 74 3a 3a 69 6e 69 74 5c  {} tclkit::init\
0560: 6e 22 0a 09 22 6c 6f 61 64 20 7b 7d 20 72 65 63  n".."load {} rec
0570: 68 61 6e 5c 6e 22 0a 09 22 6c 6f 61 64 20 7b 7d  han\n".."load {}
0580: 20 76 66 73 5c 6e 22 0a 09 22 6c 6f 61 64 20 7b   vfs\n".."load {
0590: 7d 20 76 66 73 5f 6b 69 74 64 6c 6c 5f 64 61 74  } vfs_kitdll_dat
05a0: 61 5f 74 63 6c 5c 6e 22 0a 23 69 6e 63 6c 75 64  a_tcl\n".#includ
05b0: 65 20 22 76 66 73 5f 6b 69 74 64 6c 6c 2e 74 63  e "vfs_kitdll.tc
05c0: 6c 2e 68 22 0a 09 22 69 66 20 7b 21 5b 66 69 6c  l.h".."if {![fil
05d0: 65 20 65 78 69 73 74 73 20 5c 22 2f 2e 4b 49 54  e exists \"/.KIT
05e0: 44 4c 4c 5f 54 43 4c 2f 62 6f 6f 74 2e 74 63 6c  DLL_TCL/boot.tcl
05f0: 5c 22 5d 7d 20 7b 5c 6e 22 0a 09 09 22 76 66 73  \"]} {\n"..."vfs
0600: 3a 3a 6b 69 74 64 6c 6c 3a 3a 4d 6f 75 6e 74 20  ::kitdll::Mount 
0610: 74 63 6c 20 2f 2e 4b 49 54 44 4c 4c 5f 54 43 4c  tcl /.KITDLL_TCL
0620: 5c 6e 22 0a 09 09 22 73 65 74 20 3a 3a 69 6e 69  \n"..."set ::ini
0630: 74 56 46 53 20 31 5c 6e 22 0a 09 22 7d 5c 6e 22  tVFS 1\n".."}\n"
0640: 0a 09 22 73 65 74 20 66 20 5b 6f 70 65 6e 20 5c  .."set f [open \
0650: 22 2f 2e 4b 49 54 44 4c 4c 5f 54 43 4c 2f 62 6f  "/.KITDLL_TCL/bo
0660: 6f 74 2e 74 63 6c 5c 22 5d 5c 6e 22 0a 09 22 73  ot.tcl\"]\n".."s
0670: 65 74 20 73 20 5b 72 65 61 64 20 24 66 5d 5c 6e  et s [read $f]\n
0680: 22 0a 09 22 63 6c 6f 73 65 20 24 66 5c 6e 22 0a  ".."close $f\n".
0690: 09 22 3a 3a 74 63 6c 6b 69 74 3a 3a 69 6e 69 74  ."::tclkit::init
06a0: 3a 3a 69 6e 69 74 49 6e 74 65 72 70 5c 6e 22 0a  ::initInterp\n".
06b0: 09 22 72 65 6e 61 6d 65 20 3a 3a 74 63 6c 6b 69  ."rename ::tclki
06c0: 74 3a 3a 69 6e 69 74 3a 3a 69 6e 69 74 49 6e 74  t::init::initInt
06d0: 65 72 70 20 7b 7d 5c 6e 22 0a 09 22 75 70 6c 65  erp {}\n".."uple
06e0: 76 65 6c 20 23 30 20 24 73 5c 6e 22 0a 23 69 66  vel #0 $s\n".#if
06f0: 20 64 65 66 69 6e 65 64 28 4b 49 54 5f 49 4e 43   defined(KIT_INC
0700: 4c 55 44 45 53 5f 54 4b 29 20 26 26 20 64 65 66  LUDES_TK) && def
0710: 69 6e 65 64 28 4b 49 54 5f 54 4b 5f 56 45 52 53  ined(KIT_TK_VERS
0720: 49 4f 4e 29 0a 09 22 70 61 63 6b 61 67 65 20 69  ION).."package i
0730: 66 6e 65 65 64 65 64 20 54 6b 20 22 20 4b 49 54  fneeded Tk " KIT
0740: 5f 54 4b 5f 56 45 52 53 49 4f 4e 20 22 20 7b 5c  _TK_VERSION " {\
0750: 6e 22 0a 09 09 22 6c 6f 61 64 20 7b 7d 20 54 6b  n"..."load {} Tk
0760: 5c 6e 22 0a 09 22 7d 5c 6e 22 0a 23 65 6e 64 69  \n".."}\n".#endi
0770: 66 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a  f.#ifdef _WIN32.
0780: 09 22 63 61 74 63 68 20 7b 6c 6f 61 64 20 7b 7d  ."catch {load {}
0790: 20 64 64 65 7d 5c 6e 22 0a 09 22 63 61 74 63 68   dde}\n".."catch
07a0: 20 7b 6c 6f 61 64 20 7b 7d 20 72 65 67 69 73 74   {load {} regist
07b0: 72 79 7d 5c 6e 22 0a 23 65 6e 64 69 66 20 2f 2a  ry}\n".#endif /*
07c0: 20 5f 57 49 4e 33 32 20 2a 2f 0a 22 7d 5c 6e 22   _WIN32 */."}\n"
07d0: 0a 22 74 63 6c 4b 69 74 49 6e 69 74 22 3b 0a 0a  ."tclKitInit";..
07e0: 23 69 66 64 65 66 20 48 41 56 45 5f 41 43 43 45  #ifdef HAVE_ACCE
07f0: 50 54 41 42 4c 45 5f 44 4c 41 44 44 52 0a 2f 2a  PTABLE_DLADDR./*
0800: 20 53 79 6d 62 6f 6c 20 74 6f 20 72 65 73 6f 6c   Symbol to resol
0810: 76 65 20 61 67 61 69 6e 73 74 20 64 6c 61 64 64  ve against dladd
0820: 72 28 29 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  r() */.static vo
0830: 69 64 20 5f 74 63 6c 6b 69 74 5f 64 75 6d 6d 79  id _tclkit_dummy
0840: 5f 66 75 6e 63 28 76 6f 69 64 29 20 7b 0a 09 72  _func(void) {..r
0850: 65 74 75 72 6e 3b 0a 7d 0a 0a 69 6e 74 20 6d 61  eturn;.}..int ma
0860: 69 6e 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61  in(int argc, cha
0870: 72 20 2a 2a 61 72 67 76 29 3b 0a 23 65 6e 64 69  r **argv);.#endi
0880: 66 20 2f 2a 20 48 41 56 45 5f 41 43 43 45 50 54  f /* HAVE_ACCEPT
0890: 41 42 4c 45 5f 44 4c 41 44 44 52 20 2a 2f 0a 0a  ABLE_DLADDR */..
08a0: 2f 2a 0a 20 2a 20 54 68 69 73 20 66 75 6e 63 74  /*. * This funct
08b0: 69 6f 6e 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ion will return 
08c0: 61 20 70 61 74 68 6e 61 6d 65 20 77 65 20 63 61  a pathname we ca
08d0: 6e 20 6f 70 65 6e 28 29 20 74 6f 20 74 72 65 61  n open() to trea
08e0: 74 20 61 73 20 61 20 56 46 53 2c 0a 20 2a 20 68  t as a VFS,. * h
08f0: 6f 70 65 66 75 6c 6c 79 0a 20 2a 2f 0a 73 74 61  opefully. */.sta
0900: 74 69 63 20 63 68 61 72 20 2a 66 69 6e 64 5f 74  tic char *find_t
0910: 63 6c 6b 69 74 5f 64 6c 6c 5f 70 61 74 68 28 76  clkit_dll_path(v
0920: 6f 69 64 29 20 7b 0a 23 69 66 64 65 66 20 48 41  oid) {.#ifdef HA
0930: 56 45 5f 41 43 43 45 50 54 41 42 4c 45 5f 44 4c  VE_ACCEPTABLE_DL
0940: 41 44 44 52 0a 09 44 6c 5f 69 6e 66 6f 20 73 79  ADDR..Dl_info sy
0950: 6d 69 6e 66 6f 3b 0a 09 69 6e 74 20 64 6c 61 64  minfo;..int dlad
0960: 64 72 5f 72 65 74 3b 0a 23 65 6e 64 69 66 20 2f  dr_ret;.#endif /
0970: 2a 20 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c  * HAVE_ACCEPTABL
0980: 45 5f 44 4c 41 44 44 52 20 2a 2f 0a 23 69 66 64  E_DLADDR */.#ifd
0990: 65 66 20 5f 57 49 4e 33 32 0a 09 54 43 48 41 52  ef _WIN32..TCHAR
09a0: 20 6d 6f 64 75 6c 65 6e 61 6d 65 5b 38 31 39 32   modulename[8192
09b0: 5d 3b 0a 09 44 57 4f 52 44 20 67 6d 66 6e 5f 72  ];..DWORD gmfn_r
09c0: 65 74 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 57  et;.#endif /* _W
09d0: 49 4e 33 32 20 2a 2f 0a 0a 23 69 66 64 65 66 20  IN32 */..#ifdef 
09e0: 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45 5f  HAVE_ACCEPTABLE_
09f0: 44 4c 41 44 44 52 0a 09 64 6c 61 64 64 72 5f 72  DLADDR..dladdr_r
0a00: 65 74 20 3d 20 64 6c 61 64 64 72 28 26 5f 74 63  et = dladdr(&_tc
0a10: 6c 6b 69 74 5f 64 75 6d 6d 79 5f 66 75 6e 63 2c  lkit_dummy_func,
0a20: 20 26 73 79 6d 69 6e 66 6f 29 3b 0a 09 69 66 20   &syminfo);..if 
0a30: 28 64 6c 61 64 64 72 5f 72 65 74 20 21 3d 20 30  (dladdr_ret != 0
0a40: 29 20 7b 0a 09 09 69 66 20 28 73 79 6d 69 6e 66  ) {...if (syminf
0a50: 6f 2e 64 6c 69 5f 66 6e 61 6d 65 20 26 26 20 73  o.dli_fname && s
0a60: 79 6d 69 6e 66 6f 2e 64 6c 69 5f 66 6e 61 6d 65  yminfo.dli_fname
0a70: 5b 30 5d 20 21 3d 20 27 5c 30 27 29 20 7b 0a 09  [0] != '\0') {..
0a80: 09 09 72 65 74 75 72 6e 28 73 74 72 64 75 70 28  ..return(strdup(
0a90: 73 79 6d 69 6e 66 6f 2e 64 6c 69 5f 66 6e 61 6d  syminfo.dli_fnam
0aa0: 65 29 29 3b 0a 09 09 7d 0a 09 7d 0a 23 65 6e 64  e));...}..}.#end
0ab0: 69 66 20 2f 2a 20 48 41 56 45 5f 41 43 43 45 50  if /* HAVE_ACCEP
0ac0: 54 41 42 4c 45 5f 44 4c 41 44 44 52 20 2a 2f 0a  TABLE_DLADDR */.
0ad0: 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 09  .#ifdef _WIN32..
0ae0: 67 6d 66 6e 5f 72 65 74 20 3d 20 47 65 74 4d 6f  gmfn_ret = GetMo
0af0: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 28 54 63 6c  duleFileName(Tcl
0b00: 57 69 6e 47 65 74 54 63 6c 49 6e 73 74 61 6e 63  WinGetTclInstanc
0b10: 65 28 29 2c 20 6d 6f 64 75 6c 65 6e 61 6d 65 2c  e(), modulename,
0b20: 20 73 69 7a 65 6f 66 28 6d 6f 64 75 6c 65 6e 61   sizeof(modulena
0b30: 6d 65 29 20 2f 20 73 69 7a 65 6f 66 28 6d 6f 64  me) / sizeof(mod
0b40: 75 6c 65 6e 61 6d 65 5b 30 5d 29 20 2d 20 31 29  ulename[0]) - 1)
0b50: 3b 0a 0a 09 69 66 20 28 67 6d 66 6e 5f 72 65 74  ;...if (gmfn_ret
0b60: 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74 75 72   != 0) {...retur
0b70: 6e 28 73 74 72 64 75 70 28 6d 6f 64 75 6c 65 6e  n(strdup(modulen
0b80: 61 6d 65 29 29 3b 0a 09 7d 0a 23 65 6e 64 69 66  ame));..}.#endif
0b90: 20 2f 2a 20 5f 57 49 4e 33 32 20 2a 2f 0a 0a 09   /* _WIN32 */...
0ba0: 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 7d 0a  return(NULL);.}.
0bb0: 0a 2f 2a 20 53 65 74 45 78 65 63 4e 61 6d 65 20  ./* SetExecName 
0bc0: 2d 2d 0a 09 0a 20 20 20 48 61 63 6b 20 74 6f 20  --...   Hack to 
0bd0: 67 65 74 20 61 72 6f 75 6e 64 20 54 63 6c 20 62  get around Tcl b
0be0: 75 67 20 31 32 32 34 38 38 38 2e 0a 2a 2f 0a 73  ug 1224888..*/.s
0bf0: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 45 78  tatic void SetEx
0c00: 65 63 4e 61 6d 65 28 54 63 6c 5f 49 6e 74 65 72  ecName(Tcl_Inter
0c10: 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74  p *interp, const
0c20: 20 63 68 61 72 20 2a 70 61 74 68 29 20 7b 0a 23   char *path) {.#
0c30: 69 66 64 65 66 20 54 43 4c 4b 49 54 5f 52 45 51  ifdef TCLKIT_REQ
0c40: 55 49 52 45 5f 54 43 4c 45 58 45 43 55 54 41 42  UIRE_TCLEXECUTAB
0c50: 4c 45 4e 41 4d 45 0a 09 74 63 6c 45 78 65 63 75  LENAME..tclExecu
0c60: 74 61 62 6c 65 4e 61 6d 65 20 3d 20 73 74 72 64  tableName = strd
0c70: 75 70 28 70 61 74 68 29 3b 0a 23 65 6e 64 69 66  up(path);.#endif
0c80: 20 20 0a 09 54 63 6c 5f 46 69 6e 64 45 78 65 63    ..Tcl_FindExec
0c90: 75 74 61 62 6c 65 28 70 61 74 68 29 3b 0a 0a 09  utable(path);...
0ca0: 72 65 74 75 72 6e 3b 0a 7d 0a 09 0a 73 74 61 74  return;.}...stat
0cb0: 69 63 20 76 6f 69 64 20 46 69 6e 64 41 6e 64 53  ic void FindAndS
0cc0: 65 74 45 78 65 63 4e 61 6d 65 28 54 63 6c 5f 49  etExecName(Tcl_I
0cd0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 20 7b  nterp *interp) {
0ce0: 0a 09 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0a 09  ..int len = 0;..
0cf0: 54 63 6c 5f 4f 62 6a 20 2a 65 78 65 63 4e 61 6d  Tcl_Obj *execNam
0d00: 65 4f 62 6a 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  eObj;..Tcl_Obj *
0d10: 6c 6f 62 6a 76 5b 31 5d 3b 0a 23 69 66 64 65 66  lobjv[1];.#ifdef
0d20: 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 4b 0a 09   HAVE_READLINK..
0d30: 73 73 69 7a 65 5f 74 20 72 65 61 64 6c 69 6e 6b  ssize_t readlink
0d40: 5f 72 65 74 3b 0a 09 63 68 61 72 20 65 78 65 5f  _ret;..char exe_
0d50: 62 75 66 5b 34 30 39 36 5d 3b 0a 23 65 6e 64 69  buf[4096];.#endi
0d60: 66 20 2f 2a 20 48 41 56 45 5f 52 45 41 44 4c 49  f /* HAVE_READLI
0d70: 4e 4b 20 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  NK */.#ifdef HAV
0d80: 45 5f 41 43 43 45 50 54 41 42 4c 45 5f 44 4c 41  E_ACCEPTABLE_DLA
0d90: 44 44 52 0a 09 44 6c 5f 69 6e 66 6f 20 73 79 6d  DDR..Dl_info sym
0da0: 69 6e 66 6f 3b 0a 09 69 6e 74 20 64 6c 61 64 64  info;..int dladd
0db0: 72 5f 72 65 74 3b 0a 23 65 6e 64 69 66 20 2f 2a  r_ret;.#endif /*
0dc0: 20 48 41 56 45 5f 41 43 43 45 50 54 41 42 4c 45   HAVE_ACCEPTABLE
0dd0: 5f 44 4c 41 44 44 52 20 2a 2f 0a 0a 23 69 66 64  _DLADDR */..#ifd
0de0: 65 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 4b  ef HAVE_READLINK
0df0: 0a 09 69 66 20 28 54 63 6c 5f 47 65 74 4e 61 6d  ..if (Tcl_GetNam
0e00: 65 4f 66 45 78 65 63 75 74 61 62 6c 65 28 29 20  eOfExecutable() 
0e10: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 61  == NULL) {...rea
0e20: 64 6c 69 6e 6b 5f 72 65 74 20 3d 20 72 65 61 64  dlink_ret = read
0e30: 6c 69 6e 6b 28 22 2f 70 72 6f 63 2f 73 65 6c 66  link("/proc/self
0e40: 2f 65 78 65 22 2c 20 65 78 65 5f 62 75 66 2c 20  /exe", exe_buf, 
0e50: 73 69 7a 65 6f 66 28 65 78 65 5f 62 75 66 29 20  sizeof(exe_buf) 
0e60: 2d 20 31 29 3b 0a 09 09 0a 09 09 69 66 20 28 72  - 1);......if (r
0e70: 65 61 64 6c 69 6e 6b 5f 72 65 74 20 3e 20 30 20  eadlink_ret > 0 
0e80: 26 26 20 72 65 61 64 6c 69 6e 6b 5f 72 65 74 20  && readlink_ret 
0e90: 3c 20 28 73 69 7a 65 6f 66 28 65 78 65 5f 62 75  < (sizeof(exe_bu
0ea0: 66 29 20 2d 20 31 29 29 20 7b 0a 09 09 09 65 78  f) - 1)) {....ex
0eb0: 65 5f 62 75 66 5b 72 65 61 64 6c 69 6e 6b 5f 72  e_buf[readlink_r
0ec0: 65 74 5d 20 3d 20 27 5c 30 27 3b 0a 09 09 09 0a  et] = '\0';.....
0ed0: 09 09 09 53 65 74 45 78 65 63 4e 61 6d 65 28 69  ...SetExecName(i
0ee0: 6e 74 65 72 70 2c 20 65 78 65 5f 62 75 66 29 3b  nterp, exe_buf);
0ef0: 0a 09 09 09 0a 09 09 09 72 65 74 75 72 6e 3b 0a  ........return;.
0f00: 09 09 7d 0a 09 7d 0a 09 0a 09 69 66 20 28 54 63  ..}..}....if (Tc
0f10: 6c 5f 47 65 74 4e 61 6d 65 4f 66 45 78 65 63 75  l_GetNameOfExecu
0f20: 74 61 62 6c 65 28 29 20 3d 3d 20 4e 55 4c 4c 29  table() == NULL)
0f30: 20 7b 0a 09 09 72 65 61 64 6c 69 6e 6b 5f 72 65   {...readlink_re
0f40: 74 20 3d 20 72 65 61 64 6c 69 6e 6b 28 22 2f 70  t = readlink("/p
0f50: 72 6f 63 2f 63 75 72 70 72 6f 63 2f 66 69 6c 65  roc/curproc/file
0f60: 22 2c 20 65 78 65 5f 62 75 66 2c 20 73 69 7a 65  ", exe_buf, size
0f70: 6f 66 28 65 78 65 5f 62 75 66 29 20 2d 20 31 29  of(exe_buf) - 1)
0f80: 3b 09 09 09 09 09 09 09 09 09 09 09 09 20 0a 0a  ;............ ..
0f90: 09 09 69 66 20 28 72 65 61 64 6c 69 6e 6b 5f 72  ..if (readlink_r
0fa0: 65 74 20 3e 20 30 20 26 26 20 72 65 61 64 6c 69  et > 0 && readli
0fb0: 6e 6b 5f 72 65 74 20 3c 20 28 73 69 7a 65 6f 66  nk_ret < (sizeof
0fc0: 28 65 78 65 5f 62 75 66 29 20 2d 20 31 29 29 20  (exe_buf) - 1)) 
0fd0: 7b 0a 09 09 09 65 78 65 5f 62 75 66 5b 72 65 61  {....exe_buf[rea
0fe0: 64 6c 69 6e 6b 5f 72 65 74 5d 20 3d 20 27 5c 30  dlink_ret] = '\0
0ff0: 27 3b 0a 0a 09 09 09 69 66 20 28 73 74 72 63 6d  ';.....if (strcm
1000: 70 28 65 78 65 5f 62 75 66 2c 20 22 75 6e 6b 6e  p(exe_buf, "unkn
1010: 6f 77 6e 22 29 20 21 3d 20 30 29 20 7b 0a 09 09  own") != 0) {...
1020: 09 09 53 65 74 45 78 65 63 4e 61 6d 65 28 69 6e  ..SetExecName(in
1030: 74 65 72 70 2c 20 65 78 65 5f 62 75 66 29 3b 0a  terp, exe_buf);.
1040: 0a 09 09 09 09 72 65 74 75 72 6e 3b 0a 09 09 09  .....return;....
1050: 7d 0a 09 09 7d 0a 09 7d 0a 23 65 6e 64 69 66 20  }...}..}.#endif 
1060: 2f 2a 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 4b  /* HAVE_READLINK
1070: 20 2a 2f 0a 0a 23 69 66 64 65 66 20 48 41 56 45   */..#ifdef HAVE
1080: 5f 41 43 43 45 50 54 41 42 4c 45 5f 44 4c 41 44  _ACCEPTABLE_DLAD
1090: 44 52 0a 09 69 66 20 28 54 63 6c 5f 47 65 74 4e  DR..if (Tcl_GetN
10a0: 61 6d 65 4f 66 45 78 65 63 75 74 61 62 6c 65 28  ameOfExecutable(
10b0: 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 64  ) == NULL) {...d
10c0: 6c 61 64 64 72 5f 72 65 74 20 3d 20 64 6c 61 64  laddr_ret = dlad
10d0: 64 72 28 26 6d 61 69 6e 2c 20 26 73 79 6d 69 6e  dr(&main, &symin
10e0: 66 6f 29 3b 0a 09 09 69 66 20 28 64 6c 61 64 64  fo);...if (dladd
10f0: 72 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  r_ret != 0) {...
1100: 09 53 65 74 45 78 65 63 4e 61 6d 65 28 69 6e 74  .SetExecName(int
1110: 65 72 70 2c 20 73 79 6d 69 6e 66 6f 2e 64 6c 69  erp, syminfo.dli
1120: 5f 66 6e 61 6d 65 29 3b 0a 09 09 7d 0a 09 7d 0a  _fname);...}..}.
1130: 23 65 6e 64 69 66 20 2f 2a 20 48 41 56 45 5f 41  #endif /* HAVE_A
1140: 43 43 45 50 54 41 42 4c 45 5f 44 4c 41 44 44 52  CCEPTABLE_DLADDR
1150: 20 2a 2f 0a 0a 09 69 66 20 28 54 63 6c 5f 47 65   */...if (Tcl_Ge
1160: 74 4e 61 6d 65 4f 66 45 78 65 63 75 74 61 62 6c  tNameOfExecutabl
1170: 65 28 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  e() == NULL) {..
1180: 09 6c 6f 62 6a 76 5b 30 5d 20 3d 20 54 63 6c 5f  .lobjv[0] = Tcl_
1190: 47 65 74 56 61 72 32 45 78 28 69 6e 74 65 72 70  GetVar2Ex(interp
11a0: 2c 20 22 61 72 67 76 30 22 2c 20 4e 55 4c 4c 2c  , "argv0", NULL,
11b0: 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
11c0: 29 3b 0a 09 09 65 78 65 63 4e 61 6d 65 4f 62 6a  );...execNameObj
11d0: 20 3d 20 54 63 6c 5f 46 53 4a 6f 69 6e 54 6f 50   = Tcl_FSJoinToP
11e0: 61 74 68 28 54 63 6c 5f 46 53 47 65 74 43 77 64  ath(Tcl_FSGetCwd
11f0: 28 69 6e 74 65 72 70 29 2c 20 31 2c 20 6c 6f 62  (interp), 1, lob
1200: 6a 76 29 3b 0a 0a 09 09 53 65 74 45 78 65 63 4e  jv);....SetExecN
1210: 61 6d 65 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ame(interp, Tcl_
1220: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
1230: 28 65 78 65 63 4e 61 6d 65 4f 62 6a 2c 20 26 6c  (execNameObj, &l
1240: 65 6e 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 3b  en));....return;
1250: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a  ..}...return;.}.
1260: 0a 0a 2f 2a 0a 20 2a 20 54 68 69 73 20 66 75 6e  ../*. * This fun
1270: 63 74 69 6f 6e 20 65 78 69 73 74 73 20 74 6f 20  ction exists to 
1280: 61 6c 6c 6f 77 20 43 20 63 6f 64 65 20 74 6f 20  allow C code to 
1290: 69 6e 69 74 69 61 6c 69 7a 65 20 61 20 70 61 72  initialize a par
12a0: 74 69 63 75 6c 61 72 0a 20 2a 20 69 6e 74 65 72  ticular. * inter
12b0: 70 72 65 74 65 72 2e 0a 20 2a 2f 0a 73 74 61 74  preter.. */.stat
12c0: 69 63 20 69 6e 74 20 74 63 6c 6b 69 74 5f 69 6e  ic int tclkit_in
12d0: 69 74 5f 69 6e 69 74 69 6e 74 65 72 70 28 43 6c  it_initinterp(Cl
12e0: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
12f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1300: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
1310: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1320: 29 20 7b 0a 09 63 68 61 72 20 2a 6b 69 74 64 6c  ) {..char *kitdl
1330: 6c 5f 70 61 74 68 3b 0a 23 69 66 64 65 66 20 54  l_path;.#ifdef T
1340: 43 4c 4b 49 54 5f 43 41 4e 5f 53 45 54 5f 45 4e  CLKIT_CAN_SET_EN
1350: 43 4f 44 49 4e 47 0a 09 54 63 6c 5f 44 53 74 72  CODING..Tcl_DStr
1360: 69 6e 67 20 65 6e 63 6f 64 69 6e 67 4e 61 6d 65  ing encodingName
1370: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 54 43 4c 4b  ;.#endif /* TCLK
1380: 49 54 5f 43 41 4e 5f 53 45 54 5f 45 4e 43 4f 44  IT_CAN_SET_ENCOD
1390: 49 4e 47 20 2a 2f 0a 0a 0a 23 69 66 64 65 66 20  ING */...#ifdef 
13a0: 5f 57 49 4e 33 32 0a 09 54 63 6c 5f 53 65 74 56  _WIN32..Tcl_SetV
13b0: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63 6c 5f  ar(interp, "tcl_
13c0: 72 63 46 69 6c 65 4e 61 6d 65 22 2c 20 22 7e 2f  rcFileName", "~/
13d0: 74 63 6c 6b 69 74 72 63 2e 74 63 6c 22 2c 20 54  tclkitrc.tcl", T
13e0: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
13f0: 0a 23 65 6c 73 65 20 20 20 0a 09 54 63 6c 5f 53  .#else   ..Tcl_S
1400: 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74  etVar(interp, "t
1410: 63 6c 5f 72 63 46 69 6c 65 4e 61 6d 65 22 2c 20  cl_rcFileName", 
1420: 22 7e 2f 2e 74 63 6c 6b 69 74 72 63 22 2c 20 54  "~/.tclkitrc", T
1430: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1440: 0a 23 65 6e 64 69 66 0a 0a 09 6b 69 74 64 6c 6c  .#endif...kitdll
1450: 5f 70 61 74 68 20 3d 20 66 69 6e 64 5f 74 63 6c  _path = find_tcl
1460: 6b 69 74 5f 64 6c 6c 5f 70 61 74 68 28 29 3b 0a  kit_dll_path();.
1470: 09 69 66 20 28 6b 69 74 64 6c 6c 5f 70 61 74 68  .if (kitdll_path
1480: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 54 63   != NULL) {...Tc
1490: 6c 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c  l_SetVar(interp,
14a0: 20 22 74 63 6c 4b 69 74 46 69 6c 65 6e 61 6d 65   "tclKitFilename
14b0: 22 2c 20 6b 69 74 64 6c 6c 5f 70 61 74 68 2c 20  ", kitdll_path, 
14c0: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14d0: 3b 0a 0a 09 09 66 72 65 65 28 6b 69 74 64 6c 6c  ;....free(kitdll
14e0: 5f 70 61 74 68 29 3b 0a 09 7d 0a 0a 09 46 69 6e  _path);..}...Fin
14f0: 64 41 6e 64 53 65 74 45 78 65 63 4e 61 6d 65 28  dAndSetExecName(
1500: 69 6e 74 65 72 70 29 3b 0a 0a 23 69 66 64 65 66  interp);..#ifdef
1510: 20 54 43 4c 4b 49 54 5f 43 41 4e 5f 53 45 54 5f   TCLKIT_CAN_SET_
1520: 45 4e 43 4f 44 49 4e 47 0a 09 2f 2a 20 53 65 74  ENCODING../* Set
1530: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 66 72   the encoding fr
1540: 6f 6d 20 74 68 65 20 45 6e 76 69 72 6f 6e 6d 65  om the Environme
1550: 6e 74 20 2a 2f 0a 09 54 63 6c 5f 47 65 74 45 6e  nt */..Tcl_GetEn
1560: 63 6f 64 69 6e 67 4e 61 6d 65 46 72 6f 6d 45 6e  codingNameFromEn
1570: 76 69 72 6f 6e 6d 65 6e 74 28 26 65 6e 63 6f 64  vironment(&encod
1580: 69 6e 67 4e 61 6d 65 29 3b 0a 09 54 63 6c 5f 53  ingName);..Tcl_S
1590: 65 74 53 79 73 74 65 6d 45 6e 63 6f 64 69 6e 67  etSystemEncoding
15a0: 28 4e 55 4c 4c 2c 20 54 63 6c 5f 44 53 74 72 69  (NULL, Tcl_DStri
15b0: 6e 67 56 61 6c 75 65 28 26 65 6e 63 6f 64 69 6e  ngValue(&encodin
15c0: 67 4e 61 6d 65 29 29 3b 0a 09 54 63 6c 5f 53 65  gName));..Tcl_Se
15d0: 74 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74 63  tVar(interp, "tc
15e0: 6c 6b 69 74 5f 73 79 73 74 65 6d 5f 65 6e 63 6f  lkit_system_enco
15f0: 64 69 6e 67 22 2c 20 54 63 6c 5f 44 53 74 72 69  ding", Tcl_DStri
1600: 6e 67 56 61 6c 75 65 28 26 65 6e 63 6f 64 69 6e  ngValue(&encodin
1610: 67 4e 61 6d 65 29 2c 20 54 43 4c 5f 47 4c 4f 42  gName), TCL_GLOB
1620: 41 4c 5f 4f 4e 4c 59 29 3b 0a 09 54 63 6c 5f 44  AL_ONLY);..Tcl_D
1630: 53 74 72 69 6e 67 46 72 65 65 28 26 65 6e 63 6f  StringFree(&enco
1640: 64 69 6e 67 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  dingName);.#endi
1650: 66 20 20 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  f  ...return(TCL
1660: 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 43  _OK);.}../*. * C
1670: 72 65 61 74 65 20 61 20 70 61 63 6b 61 67 65 20  reate a package 
1680: 66 6f 72 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  for initializing
1690: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 69 6e   a particular in
16a0: 74 65 72 70 72 65 74 65 72 2e 20 20 54 68 69 73  terpreter.  This
16b0: 20 69 73 0a 20 2a 20 6f 75 72 20 68 6f 6f 6b 20   is. * our hook 
16c0: 74 6f 20 68 61 76 65 20 54 63 6c 20 69 6e 76 6f  to have Tcl invo
16d0: 6b 65 20 43 20 63 6f 6d 6d 61 6e 64 73 20 77 68  ke C commands wh
16e0: 65 6e 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69  en creating an i
16f0: 6e 74 65 72 70 72 65 74 65 72 2e 0a 20 2a 20 54  nterpreter.. * T
1700: 68 65 20 70 72 65 49 6e 69 74 43 6d 64 20 77 69  he preInitCmd wi
1710: 6c 6c 20 6c 6f 61 64 20 74 68 65 20 70 61 63 6b  ll load the pack
1720: 61 67 65 20 69 6e 20 74 68 65 20 6e 65 77 20 69  age in the new i
1730: 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20 69  nterpreter and i
1740: 6e 76 6f 6b 65 0a 20 2a 20 74 68 69 73 20 66 75  nvoke. * this fu
1750: 6e 63 74 69 6f 6e 2e 0a 20 2a 2f 0a 69 6e 74 20  nction.. */.int 
1760: 54 63 6c 6b 69 74 5f 69 6e 69 74 5f 49 6e 69 74  Tclkit_init_Init
1770: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1780: 65 72 70 29 20 7b 0a 09 54 63 6c 5f 43 6f 6d 6d  erp) {..Tcl_Comm
1790: 61 6e 64 20 74 63 6c 43 72 65 61 74 43 6f 6d 6d  and tclCreatComm
17a0: 5f 72 65 74 3b 0a 09 69 6e 74 20 74 63 6c 50 6b  _ret;..int tclPk
17b0: 67 50 72 6f 76 5f 72 65 74 3b 0a 0a 09 74 63 6c  gProv_ret;...tcl
17c0: 43 72 65 61 74 43 6f 6d 6d 5f 72 65 74 20 3d 20  CreatComm_ret = 
17d0: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
17e0: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
17f0: 74 63 6c 6b 69 74 3a 3a 69 6e 69 74 3a 3a 69 6e  tclkit::init::in
1800: 69 74 49 6e 74 65 72 70 22 2c 20 74 63 6c 6b 69  itInterp", tclki
1810: 74 5f 69 6e 69 74 5f 69 6e 69 74 69 6e 74 65 72  t_init_initinter
1820: 70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  p, NULL, NULL);.
1830: 09 69 66 20 28 21 74 63 6c 43 72 65 61 74 43 6f  .if (!tclCreatCo
1840: 6d 6d 5f 72 65 74 29 20 7b 0a 09 09 72 65 74 75  mm_ret) {...retu
1850: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
1860: 7d 0a 0a 09 74 63 6c 50 6b 67 50 72 6f 76 5f 72  }...tclPkgProv_r
1870: 65 74 20 3d 20 54 63 6c 5f 50 6b 67 50 72 6f 76  et = Tcl_PkgProv
1880: 69 64 65 28 69 6e 74 65 72 70 2c 20 22 74 63 6c  ide(interp, "tcl
1890: 6b 69 74 3a 3a 69 6e 69 74 22 2c 20 22 31 2e 30  kit::init", "1.0
18a0: 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 74 63 6c  ");...return(tcl
18b0: 50 6b 67 50 72 6f 76 5f 72 65 74 29 3b 0a 7d 0a  PkgProv_ret);.}.
18c0: 0a 2f 2a 0a 20 2a 20 49 6e 69 74 69 61 6c 69 7a  ./*. * Initializ
18d0: 65 20 74 68 65 20 54 63 6c 20 73 79 73 74 65 6d  e the Tcl system
18e0: 20 77 68 65 6e 20 77 65 20 61 72 65 20 6c 6f 61   when we are loa
18f0: 64 65 64 2c 20 74 68 61 74 20 77 61 79 20 54 63  ded, that way Tc
1900: 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 20 61  l functions. * a
1910: 72 65 20 72 65 61 64 79 20 74 6f 20 62 65 20 75  re ready to be u
1920: 73 65 64 20 77 68 65 6e 20 69 6e 76 6f 6b 65 64  sed when invoked
1930: 2e 0a 20 2a 2f 0a 76 6f 69 64 20 5f 5f 61 74 74  .. */.void __att
1940: 72 69 62 75 74 65 5f 5f 28 28 63 6f 6e 73 74 72  ribute__((constr
1950: 75 63 74 6f 72 29 29 20 5f 54 63 6c 6b 69 74 5f  uctor)) _Tclkit_
1960: 49 6e 69 74 28 76 6f 69 64 29 20 7b 0a 09 54 63  Init(void) {..Tc
1970: 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65 28  l_StaticPackage(
1980: 30 2c 20 22 74 63 6c 6b 69 74 3a 3a 69 6e 69 74  0, "tclkit::init
1990: 22 2c 20 54 63 6c 6b 69 74 5f 69 6e 69 74 5f 49  ", Tclkit_init_I
19a0: 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c  nit, NULL);..Tcl
19b0: 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65 28 30  _StaticPackage(0
19c0: 2c 20 22 72 65 63 68 61 6e 22 2c 20 52 65 63 68  , "rechan", Rech
19d0: 61 6e 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a  an_Init, NULL);.
19e0: 09 54 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61  .Tcl_StaticPacka
19f0: 67 65 28 30 2c 20 22 76 66 73 22 2c 20 56 66 73  ge(0, "vfs", Vfs
1a00: 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 09 54  _Init, NULL);..T
1a10: 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67 65  cl_StaticPackage
1a20: 28 30 2c 20 22 76 66 73 5f 6b 69 74 64 6c 6c 5f  (0, "vfs_kitdll_
1a30: 64 61 74 61 5f 74 63 6c 22 2c 20 56 66 73 5f 6b  data_tcl", Vfs_k
1a40: 69 74 64 6c 6c 5f 64 61 74 61 5f 74 63 6c 5f 49  itdll_data_tcl_I
1a50: 6e 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23 69 66 64  nit, NULL);.#ifd
1a60: 65 66 20 4b 49 54 5f 49 4e 43 4c 55 44 45 53 5f  ef KIT_INCLUDES_
1a70: 4d 4b 34 54 43 4c 0a 09 54 63 6c 5f 53 74 61 74  MK4TCL..Tcl_Stat
1a80: 69 63 50 61 63 6b 61 67 65 28 30 2c 20 22 4d 6b  icPackage(0, "Mk
1a90: 34 74 63 6c 22 2c 20 4d 6b 34 74 63 6c 5f 49 6e  4tcl", Mk4tcl_In
1aa0: 69 74 2c 20 4e 55 4c 4c 29 3b 0a 23 65 6e 64 69  it, NULL);.#endi
1ab0: 66 0a 23 69 66 64 65 66 20 4b 49 54 5f 49 4e 43  f.#ifdef KIT_INC
1ac0: 4c 55 44 45 53 5f 50 57 42 0a 09 54 63 6c 5f 53  LUDES_PWB..Tcl_S
1ad0: 74 61 74 69 63 50 61 63 6b 61 67 65 28 30 2c 20  taticPackage(0, 
1ae0: 22 70 77 62 22 2c 20 50 77 62 5f 49 6e 69 74 2c  "pwb", Pwb_Init,
1af0: 20 4e 55 4c 4c 29 3b 0a 23 65 6e 64 69 66 0a 23   NULL);.#endif.#
1b00: 69 66 64 65 66 20 54 43 4c 5f 54 48 52 45 41 44  ifdef TCL_THREAD
1b10: 53 0a 09 54 63 6c 5f 53 74 61 74 69 63 50 61 63  S..Tcl_StaticPac
1b20: 6b 61 67 65 28 30 2c 20 22 54 68 72 65 61 64 22  kage(0, "Thread"
1b30: 2c 20 54 68 72 65 61 64 5f 49 6e 69 74 2c 20 4e  , Thread_Init, N
1b40: 55 4c 4c 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ULL);.#endif.#if
1b50: 64 65 66 20 5f 57 49 4e 33 32 0a 09 54 63 6c 5f  def _WIN32..Tcl_
1b60: 53 74 61 74 69 63 50 61 63 6b 61 67 65 28 30 2c  StaticPackage(0,
1b70: 20 22 64 64 65 22 2c 20 44 64 65 5f 49 6e 69 74   "dde", Dde_Init
1b80: 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 53 74  , NULL);..Tcl_St
1b90: 61 74 69 63 50 61 63 6b 61 67 65 28 30 2c 20 22  aticPackage(0, "
1ba0: 72 65 67 69 73 74 72 79 22 2c 20 52 65 67 69 73  registry", Regis
1bb0: 74 72 79 5f 49 6e 69 74 2c 20 4e 55 4c 4c 29 3b  try_Init, NULL);
1bc0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4b  .#endif.#ifdef K
1bd0: 49 54 5f 49 4e 43 4c 55 44 45 53 5f 54 4b 0a 09  IT_INCLUDES_TK..
1be0: 54 63 6c 5f 53 74 61 74 69 63 50 61 63 6b 61 67  Tcl_StaticPackag
1bf0: 65 28 30 2c 20 22 54 6b 22 2c 20 54 6b 5f 49 6e  e(0, "Tk", Tk_In
1c00: 69 74 2c 20 54 6b 5f 53 61 66 65 49 6e 69 74 29  it, Tk_SafeInit)
1c10: 3b 0a 23 65 6e 64 69 66 20 20 0a 0a 09 54 63 6c  ;.#endif  ...Tcl
1c20: 53 65 74 50 72 65 49 6e 69 74 53 63 72 69 70 74  SetPreInitScript
1c30: 28 70 72 65 49 6e 69 74 43 6d 64 29 3b 0a 0a 09  (preInitCmd);...
1c40: 72 65 74 75 72 6e 3b 0a 7d 0a                    return;.}.