Hex Artifact Content

Artifact a3240f621e218d1ce28894001d415679ed68aeec:


0000: 70 72 6f 63 20 74 63 6c 49 6e 69 74 20 7b 7d 20  proc tclInit {} 
0010: 7b 0a 20 20 72 65 6e 61 6d 65 20 74 63 6c 49 6e  {.  rename tclIn
0020: 69 74 20 7b 7d 0a 0a 20 20 67 6c 6f 62 61 6c 20  it {}..  global 
0030: 61 75 74 6f 5f 70 61 74 68 20 74 63 6c 5f 6c 69  auto_path tcl_li
0040: 62 72 61 72 79 20 74 63 6c 5f 6c 69 62 50 61 74  brary tcl_libPat
0050: 68 0a 20 20 67 6c 6f 62 61 6c 20 74 63 6c 5f 76  h.  global tcl_v
0060: 65 72 73 69 6f 6e 20 74 63 6c 5f 72 63 46 69 6c  ersion tcl_rcFil
0070: 65 4e 61 6d 65 0a 20 20 0a 20 20 73 65 74 20 6e  eName.  .  set n
0080: 6f 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65  oe [info nameofe
0090: 78 65 63 75 74 61 62 6c 65 5d 0a 0a 20 20 23 20  xecutable]..  # 
00a0: 52 65 73 6f 6c 76 65 20 73 79 6d 6c 69 6e 6b 73  Resolve symlinks
00b0: 0a 20 20 73 65 74 20 6e 6f 65 20 5b 66 69 6c 65  .  set noe [file
00c0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 6e   dirname [file n
00d0: 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a  ormalize [file j
00e0: 6f 69 6e 20 24 6e 6f 65 20 5f 5f 64 75 6d 6d 79  oin $noe __dummy
00f0: 5f 5f 5d 5d 5d 0a 0a 20 20 73 65 74 20 74 63 6c  __]]]..  set tcl
0100: 5f 6c 69 62 72 61 72 79 20 5b 66 69 6c 65 20 6a  _library [file j
0110: 6f 69 6e 20 24 6e 6f 65 20 6c 69 62 20 74 63 6c  oin $noe lib tcl
0120: 24 74 63 6c 5f 76 65 72 73 69 6f 6e 5d 0a 20 20  $tcl_version].  
0130: 73 65 74 20 74 63 6c 5f 6c 69 62 50 61 74 68 20  set tcl_libPath 
0140: 5b 6c 69 73 74 20 24 74 63 6c 5f 6c 69 62 72 61  [list $tcl_libra
0150: 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e  ry [file join $n
0160: 6f 65 20 6c 69 62 5d 5d 0a 0a 20 20 23 20 67 65  oe lib]]..  # ge
0170: 74 20 72 69 64 20 6f 66 20 61 20 62 75 69 6c 64  t rid of a build
0180: 20 72 65 73 69 64 75 65 0a 20 20 75 6e 73 65 74   residue.  unset
0190: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 74   -nocomplain ::t
01a0: 63 6c 44 65 66 61 75 6c 74 4c 69 62 72 61 72 79  clDefaultLibrary
01b0: 0a 0a 20 20 23 20 74 68 65 20 66 6f 6c 6c 6f 77  ..  # the follow
01c0: 69 6e 67 20 63 6f 64 65 20 6f 6e 6c 79 20 67 65  ing code only ge
01d0: 74 73 20 65 78 65 63 75 74 65 64 20 6f 6e 63 65  ts executed once
01e0: 20 6f 6e 20 73 74 61 72 74 75 70 0a 20 20 69 66   on startup.  if
01f0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74   {[info exists t
0200: 63 6c 5f 72 63 46 69 6c 65 4e 61 6d 65 5d 7d 20  cl_rcFileName]} 
0210: 7b 0a 20 20 20 20 6c 6f 61 64 20 7b 7d 20 76 66  {.    load {} vf
0220: 73 0a 0a 20 20 20 20 23 20 6c 6f 6f 6b 75 70 20  s..    # lookup 
0230: 61 6e 64 20 65 6d 75 6c 61 74 65 20 22 73 6f 75  and emulate "sou
0240: 72 63 65 22 20 6f 66 20 6c 69 62 2f 76 66 73 2f  rce" of lib/vfs/
0250: 7b 76 66 73 2a 2e 74 63 6c 2c 6d 6b 34 76 66 73  {vfs*.tcl,mk4vfs
0260: 2e 74 63 6c 7d 0a 20 20 20 20 23 20 6d 75 73 74  .tcl}.    # must
0270: 20 75 73 65 20 72 61 77 20 4d 65 74 61 4b 69 74   use raw MetaKit
0280: 20 63 61 6c 6c 73 20 62 65 63 61 75 73 65 20 56   calls because V
0290: 46 53 20 69 73 20 6e 6f 74 20 79 65 74 20 69 6e  FS is not yet in
02a0: 20 70 6c 61 63 65 0a 20 20 20 20 73 65 74 20 64   place.    set d
02b0: 20 5b 24 7b 3a 3a 74 63 6c 6b 69 74 4d 6b 4e 61   [${::tclkitMkNa
02c0: 6d 65 73 70 61 63 65 7d 3a 3a 73 65 6c 65 63 74  mespace}::select
02d0: 20 65 78 65 2e 64 69 72 73 20 70 61 72 65 6e 74   exe.dirs parent
02e0: 20 30 20 6e 61 6d 65 20 6c 69 62 5d 0a 20 20 20   0 name lib].   
02f0: 20 73 65 74 20 64 20 5b 24 7b 3a 3a 74 63 6c 6b   set d [${::tclk
0300: 69 74 4d 6b 4e 61 6d 65 73 70 61 63 65 7d 3a 3a  itMkNamespace}::
0310: 73 65 6c 65 63 74 20 65 78 65 2e 64 69 72 73 20  select exe.dirs 
0320: 70 61 72 65 6e 74 20 24 64 20 6e 61 6d 65 20 76  parent $d name v
0330: 66 73 5d 0a 20 20 20 20 0a 20 20 20 20 66 6f 72  fs].    .    for
0340: 65 61 63 68 20 78 20 7b 76 66 73 55 74 69 6c 73  each x {vfsUtils
0350: 20 76 66 73 6c 69 62 20 6d 6b 34 76 66 73 7d 20   vfslib mk4vfs} 
0360: 7b 0a 20 20 20 20 20 20 73 65 74 20 6e 20 5b 24  {.      set n [$
0370: 7b 3a 3a 74 63 6c 6b 69 74 4d 6b 4e 61 6d 65 73  {::tclkitMkNames
0380: 70 61 63 65 7d 3a 3a 73 65 6c 65 63 74 20 65 78  pace}::select ex
0390: 65 2e 64 69 72 73 21 24 64 2e 66 69 6c 65 73 20  e.dirs!$d.files 
03a0: 6e 61 6d 65 20 24 78 2e 74 63 6c 5d 0a 20 20 20  name $x.tcl].   
03b0: 20 20 20 73 65 74 20 73 20 5b 24 7b 3a 3a 74 63     set s [${::tc
03c0: 6c 6b 69 74 4d 6b 4e 61 6d 65 73 70 61 63 65 7d  lkitMkNamespace}
03d0: 3a 3a 67 65 74 20 65 78 65 2e 64 69 72 73 21 24  ::get exe.dirs!$
03e0: 64 2e 66 69 6c 65 73 21 24 6e 20 63 6f 6e 74 65  d.files!$n conte
03f0: 6e 74 73 5d 0a 20 20 20 20 20 20 63 61 74 63 68  nts].      catch
0400: 20 7b 73 65 74 20 73 20 5b 7a 6c 69 62 20 64 65   {set s [zlib de
0410: 63 6f 6d 70 72 65 73 73 20 24 73 5d 7d 0a 20 20  compress $s]}.  
0420: 20 20 20 20 75 70 6c 65 76 65 6c 20 23 30 20 24      uplevel #0 $
0430: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 75  s.    }..    # u
0440: 73 65 20 6f 6e 2d 74 68 65 2d 66 6c 79 20 64 65  se on-the-fly de
0450: 63 6f 6d 70 72 65 73 73 69 6f 6e 2c 20 69 66 20  compression, if 
0460: 6d 6b 34 76 66 73 20 75 6e 64 65 72 73 74 61 6e  mk4vfs understan
0470: 64 73 20 74 68 61 74 0a 20 20 20 20 73 77 69 74  ds that.    swit
0480: 63 68 20 2d 2d 20 24 3a 3a 74 63 6c 6b 69 74 4d  ch -- $::tclkitM
0490: 6b 4e 61 6d 65 73 70 61 63 65 20 7b 0a 20 20 20  kNamespace {.   
04a0: 20 20 20 20 20 22 6d 6b 22 20 7b 0a 20 20 20 20       "mk" {.    
04b0: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6b 34 76          set mk4v
04c0: 66 73 3a 3a 7a 73 74 72 65 61 6d 65 64 20 31 0a  fs::zstreamed 1.
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
04e0: 76 66 73 69 6d 70 6c 20 22 6d 6b 34 22 0a 20 20  vfsimpl "mk4".  
04f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0500: 22 72 65 61 64 6b 69 74 22 20 7b 0a 20 20 20 20  "readkit" {.    
0510: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6b 63 6c          set mkcl
0520: 5f 76 66 73 3a 3a 7a 73 74 72 65 61 6d 65 64 20  _vfs::zstreamed 
0530: 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  1.            se
0540: 74 20 76 66 73 69 6d 70 6c 20 22 6d 6b 63 6c 22  t vfsimpl "mkcl"
0550: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
0560: 0a 0a 20 20 20 20 23 20 6d 6f 75 6e 74 20 74 68  ..    # mount th
0570: 65 20 65 78 65 63 75 74 61 62 6c 65 2c 20 69 2e  e executable, i.
0580: 65 2e 20 6d 61 6b 65 20 61 6c 6c 20 72 75 6e 74  e. make all runt
0590: 69 6d 65 20 66 69 6c 65 73 20 61 76 61 69 6c 61  ime files availa
05a0: 62 6c 65 0a 20 20 20 20 76 66 73 3a 3a 66 69 6c  ble.    vfs::fil
05b0: 65 73 79 73 74 65 6d 20 6d 6f 75 6e 74 20 24 6e  esystem mount $n
05c0: 6f 65 20 5b 6c 69 73 74 20 3a 3a 76 66 73 3a 3a  oe [list ::vfs::
05d0: 24 7b 76 66 73 69 6d 70 6c 7d 3a 3a 68 61 6e 64  ${vfsimpl}::hand
05e0: 6c 65 72 20 65 78 65 5d 0a 0a 20 20 20 20 23 20  ler exe]..    # 
05f0: 61 6c 74 65 72 20 70 61 74 68 20 74 6f 20 66 69  alter path to fi
0600: 6e 64 20 65 6e 63 6f 64 69 6e 67 73 0a 20 20 20  nd encodings.   
0610: 20 69 66 20 7b 5b 69 6e 66 6f 20 74 63 6c 76 65   if {[info tclve
0620: 72 73 69 6f 6e 5d 20 65 71 20 22 38 2e 34 22 7d  rsion] eq "8.4"}
0630: 20 7b 0a 20 20 20 20 20 20 6c 6f 61 64 20 7b 7d   {.      load {}
0640: 20 70 77 62 0a 20 20 20 20 20 20 6c 69 62 72 61   pwb.      libra
0650: 72 79 70 61 74 68 20 5b 69 6e 66 6f 20 6c 69 62  rypath [info lib
0660: 72 61 72 79 5d 0a 20 20 20 20 7d 20 65 6c 73 65  rary].    } else
0670: 20 7b 0a 20 20 20 20 20 20 65 6e 63 6f 64 69 6e   {.      encodin
0680: 67 20 64 69 72 73 20 5b 6c 69 73 74 20 5b 66 69  g dirs [list [fi
0690: 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 6c 69  le join [info li
06a0: 62 72 61 72 79 5d 20 65 6e 63 6f 64 69 6e 67 5d  brary] encoding]
06b0: 5d 20 3b 23 20 54 49 50 20 32 35 38 0a 20 20 20  ] ;# TIP 258.   
06c0: 20 7d 0a 0a 20 20 20 20 23 20 66 69 78 20 73 79   }..    # fix sy
06d0: 73 74 65 6d 20 65 6e 63 6f 64 69 6e 67 2c 20 69  stem encoding, i
06e0: 66 20 69 74 20 77 61 73 6e 27 74 20 70 72 6f 70  f it wasn't prop
06f0: 65 72 6c 79 20 73 65 74 20 75 70 20 28 32 30 30  erly set up (200
0700: 32 30 37 2e 30 30 34 20 62 75 67 29 0a 20 20 20  207.004 bug).   
0710: 20 69 66 20 7b 5b 65 6e 63 6f 64 69 6e 67 20 73   if {[encoding s
0720: 79 73 74 65 6d 5d 20 65 71 20 22 69 64 65 6e 74  ystem] eq "ident
0730: 69 74 79 22 7d 20 7b 0a 20 20 20 20 20 20 73 77  ity"} {.      sw
0740: 69 74 63 68 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  itch $::tcl_plat
0750: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 20 7b  form(platform) {
0760: 0a 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 73  .        windows
0770: 09 09 7b 20 65 6e 63 6f 64 69 6e 67 20 73 79 73  ..{ encoding sys
0780: 74 65 6d 20 63 70 31 32 35 32 20 7d 0a 20 20 20  tem cp1252 }.   
0790: 20 20 20 20 20 6d 61 63 69 6e 74 6f 73 68 09 7b       macintosh.{
07a0: 20 65 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 6d   encoding system
07b0: 20 6d 61 63 52 6f 6d 61 6e 20 7d 0a 20 20 20 20   macRoman }.    
07c0: 20 20 20 20 64 65 66 61 75 6c 74 09 09 7b 20 65      default..{ e
07d0: 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 20 69  ncoding system i
07e0: 73 6f 38 38 35 39 2d 31 20 7d 0a 20 20 20 20 20  so8859-1 }.     
07f0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20   }.    }..    # 
0800: 6e 6f 77 20 72 65 6d 6f 75 6e 74 20 74 68 65 20  now remount the 
0810: 65 78 65 63 75 74 61 62 6c 65 20 77 69 74 68 20  executable with 
0820: 74 68 65 20 63 6f 72 72 65 63 74 20 65 6e 63 6f  the correct enco
0830: 64 69 6e 67 0a 20 20 20 20 23 76 66 73 3a 3a 66  ding.    #vfs::f
0840: 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d 6f 75 6e  ilesystem unmoun
0850: 74 20 24 6e 6f 65 0a 20 20 20 20 76 66 73 3a 3a  t $noe.    vfs::
0860: 66 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d 6f 75  filesystem unmou
0870: 6e 74 20 5b 6c 69 6e 64 65 78 20 5b 3a 3a 76 66  nt [lindex [::vf
0880: 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 69 6e  s::filesystem in
0890: 66 6f 5d 20 30 5d 0a 0a 20 20 20 20 73 65 74 20  fo] 0]..    set 
08a0: 6e 6f 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66  noe [info nameof
08b0: 65 78 65 63 75 74 61 62 6c 65 5d 0a 0a 20 20 09  executable]..  .
08c0: 23 20 52 65 73 6f 6c 76 65 20 73 79 6d 6c 69 6e  # Resolve symlin
08d0: 6b 73 0a 20 20 09 73 65 74 20 6e 6f 65 20 5b 66  ks.  .set noe [f
08e0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c  ile dirname [fil
08f0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c  e normalize [fil
0900: 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 5f 5f 64 75  e join $noe __du
0910: 6d 6d 79 5f 5f 5d 5d 5d 0a 0a 20 20 20 20 73 65  mmy__]]]..    se
0920: 74 20 74 63 6c 5f 6c 69 62 72 61 72 79 20 5b 66  t tcl_library [f
0930: 69 6c 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 6c 69  ile join $noe li
0940: 62 20 74 63 6c 24 74 63 6c 5f 76 65 72 73 69 6f  b tcl$tcl_versio
0950: 6e 5d 0a 20 20 20 20 73 65 74 20 74 63 6c 5f 6c  n].    set tcl_l
0960: 69 62 50 61 74 68 20 5b 6c 69 73 74 20 24 74 63  ibPath [list $tc
0970: 6c 5f 6c 69 62 72 61 72 79 20 5b 66 69 6c 65 20  l_library [file 
0980: 6a 6f 69 6e 20 24 6e 6f 65 20 6c 69 62 5d 5d 0a  join $noe lib]].
0990: 20 20 20 20 76 66 73 3a 3a 66 69 6c 65 73 79 73      vfs::filesys
09a0: 74 65 6d 20 6d 6f 75 6e 74 20 24 6e 6f 65 20 5b  tem mount $noe [
09b0: 6c 69 73 74 20 3a 3a 76 66 73 3a 3a 24 7b 76 66  list ::vfs::${vf
09c0: 73 69 6d 70 6c 7d 3a 3a 68 61 6e 64 6c 65 72 20  simpl}::handler 
09d0: 65 78 65 5d 0a 20 20 7d 0a 20 20 0a 20 20 23 20  exe].  }.  .  # 
09e0: 6c 6f 61 64 20 63 6f 6e 66 69 67 20 73 65 74 74  load config sett
09f0: 69 6e 67 73 20 66 69 6c 65 20 69 66 20 70 72 65  ings file if pre
0a00: 73 65 6e 74 0a 20 20 6e 61 6d 65 73 70 61 63 65  sent.  namespace
0a10: 20 65 76 61 6c 20 3a 3a 76 66 73 20 7b 20 76 61   eval ::vfs { va
0a20: 72 69 61 62 6c 65 20 74 63 6c 6b 69 74 5f 76 65  riable tclkit_ve
0a30: 72 73 69 6f 6e 20 31 20 7d 0a 20 20 63 61 74 63  rsion 1 }.  catc
0a40: 68 20 7b 20 75 70 6c 65 76 65 6c 20 23 30 20 5b  h { uplevel #0 [
0a50: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c  list source [fil
0a60: 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 63 6f 6e 66  e join $noe conf
0a70: 69 67 2e 74 63 6c 5d 5d 20 7d 0a 0a 20 20 75 70  ig.tcl]] }..  up
0a80: 6c 65 76 65 6c 20 23 30 20 5b 6c 69 73 74 20 73  level #0 [list s
0a90: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0aa0: 20 24 74 63 6c 5f 6c 69 62 72 61 72 79 20 69 6e   $tcl_library in
0ab0: 69 74 2e 74 63 6c 5d 5d 0a 20 20 0a 23 20 72 65  it.tcl]].  .# re
0ac0: 73 65 74 20 61 75 74 6f 5f 70 61 74 68 2c 20 73  set auto_path, s
0ad0: 6f 20 74 68 61 74 20 69 6e 69 74 2e 74 63 6c 27  o that init.tcl'
0ae0: 73 20 73 65 61 72 63 68 20 6f 75 74 73 69 64 65  s search outside
0af0: 20 6f 66 20 74 63 6c 6b 69 74 20 69 73 20 63 61   of tclkit is ca
0b00: 6e 63 65 6c 6c 65 64 0a 20 20 73 65 74 20 61 75  ncelled.  set au
0b10: 74 6f 5f 70 61 74 68 20 24 74 63 6c 5f 6c 69 62  to_path $tcl_lib
0b20: 50 61 74 68 0a 0a 20 20 75 6e 73 65 74 20 3a 3a  Path..  unset ::
0b30: 74 63 6c 6b 69 74 4d 6b 4e 61 6d 65 73 70 61 63  tclkitMkNamespac
0b40: 65 0a 7d 0a                                      e.}.