Hex Artifact Content

Artifact 72fbb06cf9b520ce4f6552b14d95fb7e6973f09a:


0000: 70 72 6f 63 20 74 63 6c 49 6e 69 74 20 7b 7d 20  proc tclInit {} 
0010: 7b 0a 09 72 65 6e 61 6d 65 20 74 63 6c 49 6e 69  {..rename tclIni
0020: 74 20 7b 7d 0a 0a 09 67 6c 6f 62 61 6c 20 61 75  t {}...global au
0030: 74 6f 5f 70 61 74 68 20 74 63 6c 5f 6c 69 62 72  to_path tcl_libr
0040: 61 72 79 20 74 63 6c 5f 6c 69 62 50 61 74 68 0a  ary tcl_libPath.
0050: 09 67 6c 6f 62 61 6c 20 74 63 6c 5f 76 65 72 73  .global tcl_vers
0060: 69 6f 6e 20 74 63 6c 5f 72 63 46 69 6c 65 4e 61  ion tcl_rcFileNa
0070: 6d 65 0a 20 20 0a 09 23 20 52 65 73 6f 6c 76 65  me.  ..# Resolve
0080: 20 73 79 6d 6c 69 6e 6b 73 0a 09 73 65 74 20 6e   symlinks..set n
0090: 6f 65 20 2f 2e 4b 49 54 44 4c 4c 5f 54 43 4c 0a  oe /.KITDLL_TCL.
00a0: 0a 09 73 65 74 20 74 63 6c 5f 6c 69 62 72 61 72  ..set tcl_librar
00b0: 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e 6f  y [file join $no
00c0: 65 20 6c 69 62 20 74 63 6c 24 74 63 6c 5f 76 65  e lib tcl$tcl_ve
00d0: 72 73 69 6f 6e 5d 0a 09 73 65 74 20 74 63 6c 5f  rsion]..set tcl_
00e0: 6c 69 62 50 61 74 68 20 5b 6c 69 73 74 20 24 74  libPath [list $t
00f0: 63 6c 5f 6c 69 62 72 61 72 79 20 5b 66 69 6c 65  cl_library [file
0100: 20 6a 6f 69 6e 20 24 6e 6f 65 20 6c 69 62 5d 5d   join $noe lib]]
0110: 0a 0a 09 23 20 67 65 74 20 72 69 64 20 6f 66 20  ...# get rid of 
0120: 61 20 62 75 69 6c 64 20 72 65 73 69 64 75 65 0a  a build residue.
0130: 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
0140: 69 6e 20 3a 3a 74 63 6c 44 65 66 61 75 6c 74 4c  in ::tclDefaultL
0150: 69 62 72 61 72 79 0a 0a 09 23 20 74 68 65 20 66  ibrary...# the f
0160: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 6f 6e  ollowing code on
0170: 6c 79 20 67 65 74 73 20 65 78 65 63 75 74 65 64  ly gets executed
0180: 20 6f 6e 63 65 20 6f 6e 20 73 74 61 72 74 75 70   once on startup
0190: 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  ..if {[info exis
01a0: 74 73 20 74 63 6c 5f 72 63 46 69 6c 65 4e 61 6d  ts tcl_rcFileNam
01b0: 65 5d 7d 20 7b 0a 09 09 73 65 74 20 76 66 73 48  e]} {...set vfsH
01c0: 61 6e 64 6c 65 72 20 5b 6c 69 73 74 20 3a 3a 76  andler [list ::v
01d0: 66 73 3a 3a 6b 69 74 64 6c 6c 3a 3a 76 66 73 68  fs::kitdll::vfsh
01e0: 61 6e 64 6c 65 72 20 74 63 6c 5d 0a 0a 09 09 23  andler tcl]....#
01f0: 20 6d 6f 75 6e 74 20 74 68 65 20 65 78 65 63 75   mount the execu
0200: 74 61 62 6c 65 2c 20 69 2e 65 2e 20 6d 61 6b 65  table, i.e. make
0210: 20 61 6c 6c 20 72 75 6e 74 69 6d 65 20 66 69 6c   all runtime fil
0220: 65 73 20 61 76 61 69 6c 61 62 6c 65 0a 09 09 76  es available...v
0230: 66 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 6d  fs::filesystem m
0240: 6f 75 6e 74 20 24 6e 6f 65 20 24 76 66 73 48 61  ount $noe $vfsHa
0250: 6e 64 6c 65 72 0a 0a 09 09 23 20 61 6c 74 65 72  ndler....# alter
0260: 20 70 61 74 68 20 74 6f 20 66 69 6e 64 20 65 6e   path to find en
0270: 63 6f 64 69 6e 67 73 0a 09 09 69 66 20 7b 5b 69  codings...if {[i
0280: 6e 66 6f 20 74 63 6c 76 65 72 73 69 6f 6e 5d 20  nfo tclversion] 
0290: 65 71 20 22 38 2e 34 22 7d 20 7b 0a 09 09 09 63  eq "8.4"} {....c
02a0: 61 74 63 68 20 7b 0a 09 09 09 09 6c 6f 61 64 20  atch {.....load 
02b0: 7b 7d 20 70 77 62 0a 09 09 09 09 6c 69 62 72 61  {} pwb.....libra
02c0: 72 79 70 61 74 68 20 5b 69 6e 66 6f 20 6c 69 62  rypath [info lib
02d0: 72 61 72 79 5d 0a 09 09 09 7d 0a 09 09 7d 20 65  rary]....}...} e
02e0: 6c 73 65 20 7b 0a 09 09 09 65 6e 63 6f 64 69 6e  lse {....encodin
02f0: 67 20 64 69 72 73 20 5b 6c 69 73 74 20 5b 66 69  g dirs [list [fi
0300: 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 6c 69  le join [info li
0310: 62 72 61 72 79 5d 20 65 6e 63 6f 64 69 6e 67 5d  brary] encoding]
0320: 5d 20 3b 23 20 54 49 50 20 32 35 38 0a 09 09 7d  ] ;# TIP 258...}
0330: 0a 0a 09 09 23 20 66 69 78 20 73 79 73 74 65 6d  ....# fix system
0340: 20 65 6e 63 6f 64 69 6e 67 2c 20 69 66 20 69 74   encoding, if it
0350: 20 77 61 73 6e 27 74 20 70 72 6f 70 65 72 6c 79   wasn't properly
0360: 20 73 65 74 20 75 70 20 28 32 30 30 32 30 37 2e   set up (200207.
0370: 30 30 34 20 62 75 67 29 0a 09 09 69 66 20 7b 5b  004 bug)...if {[
0380: 65 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 5d  encoding system]
0390: 20 65 71 20 22 69 64 65 6e 74 69 74 79 22 7d 20   eq "identity"} 
03a0: 7b 0a 09 09 09 69 66 20 7b 5b 69 6e 66 6f 20 65  {....if {[info e
03b0: 78 69 73 74 73 20 3a 3a 74 63 6c 6b 69 74 5f 73  xists ::tclkit_s
03c0: 79 73 74 65 6d 5f 65 6e 63 6f 64 69 6e 67 5d 20  ystem_encoding] 
03d0: 26 26 20 24 3a 3a 74 63 6c 6b 69 74 5f 73 79 73  && $::tclkit_sys
03e0: 74 65 6d 5f 65 6e 63 6f 64 69 6e 67 20 21 3d 20  tem_encoding != 
03f0: 22 22 7d 20 7b 0a 09 09 09 09 63 61 74 63 68 20  ""} {.....catch 
0400: 7b 0a 09 09 09 09 09 65 6e 63 6f 64 69 6e 67 20  {......encoding 
0410: 73 79 73 74 65 6d 20 24 3a 3a 74 63 6c 6b 69 74  system $::tclkit
0420: 5f 73 79 73 74 65 6d 5f 65 6e 63 6f 64 69 6e 67  _system_encoding
0430: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 75  .....}....}....u
0440: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
0450: 20 3a 3a 74 63 6c 6b 69 74 5f 73 79 73 74 65 6d   ::tclkit_system
0460: 5f 65 6e 63 6f 64 69 6e 67 0a 09 09 7d 0a 0a 09  _encoding...}...
0470: 09 23 20 49 66 20 77 65 27 76 65 20 73 74 69 6c  .# If we've stil
0480: 6c 20 6e 6f 74 20 62 65 65 6e 20 61 62 6c 65 20  l not been able 
0490: 74 6f 20 73 65 74 20 74 68 65 20 65 6e 63 6f 64  to set the encod
04a0: 69 6e 67 2c 20 72 65 76 65 72 74 20 74 6f 20 54  ing, revert to T
04b0: 63 6c 6b 69 74 20 64 65 66 61 75 6c 74 73 0a 09  clkit defaults..
04c0: 09 69 66 20 7b 5b 65 6e 63 6f 64 69 6e 67 20 73  .if {[encoding s
04d0: 79 73 74 65 6d 5d 20 65 71 20 22 69 64 65 6e 74  ystem] eq "ident
04e0: 69 74 79 22 7d 20 7b 0a 09 09 09 63 61 74 63 68  ity"} {....catch
04f0: 20 7b 0a 09 09 09 09 73 77 69 74 63 68 20 24 3a   {.....switch $:
0500: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  :tcl_platform(pl
0510: 61 74 66 6f 72 6d 29 20 7b 0a 09 09 09 09 09 77  atform) {......w
0520: 69 6e 64 6f 77 73 09 09 7b 20 65 6e 63 6f 64 69  indows..{ encodi
0530: 6e 67 20 73 79 73 74 65 6d 20 63 70 31 32 35 32  ng system cp1252
0540: 20 7d 0a 09 09 09 09 09 6d 61 63 69 6e 74 6f 73   }......macintos
0550: 68 09 7b 20 65 6e 63 6f 64 69 6e 67 20 73 79 73  h.{ encoding sys
0560: 74 65 6d 20 6d 61 63 52 6f 6d 61 6e 20 7d 0a 09  tem macRoman }..
0570: 09 09 09 20 20 20 20 20 20 20 20 64 65 66 61 75  ...        defau
0580: 6c 74 09 09 7b 20 65 6e 63 6f 64 69 6e 67 20 73  lt..{ encoding s
0590: 79 73 74 65 6d 20 69 73 6f 38 38 35 39 2d 31 20  ystem iso8859-1 
05a0: 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d  }.....}....}...}
05b0: 0a 0a 09 09 23 20 6e 6f 77 20 72 65 6d 6f 75 6e  ....# now remoun
05c0: 74 20 74 68 65 20 65 78 65 63 75 74 61 62 6c 65  t the executable
05d0: 20 77 69 74 68 20 74 68 65 20 63 6f 72 72 65 63   with the correc
05e0: 74 20 65 6e 63 6f 64 69 6e 67 0a 09 09 76 66 73  t encoding...vfs
05f0: 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d  ::filesystem unm
0600: 6f 75 6e 74 20 5b 6c 69 6e 64 65 78 20 5b 3a 3a  ount [lindex [::
0610: 76 66 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20  vfs::filesystem 
0620: 69 6e 66 6f 5d 20 30 5d 0a 0a 09 09 23 20 52 65  info] 0]....# Re
0630: 73 6f 6c 76 65 20 73 79 6d 6c 69 6e 6b 73 0a 09  solve symlinks..
0640: 09 73 65 74 20 6e 6f 65 20 5b 66 69 6c 65 20 64  .set noe [file d
0650: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72  irname [file nor
0660: 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69  malize [file joi
0670: 6e 20 24 6e 6f 65 20 5f 5f 64 75 6d 6d 79 5f 5f  n $noe __dummy__
0680: 5d 5d 5d 0a 0a 09 09 73 65 74 20 74 63 6c 5f 6c  ]]]....set tcl_l
0690: 69 62 72 61 72 79 20 5b 66 69 6c 65 20 6a 6f 69  ibrary [file joi
06a0: 6e 20 24 6e 6f 65 20 6c 69 62 20 74 63 6c 24 74  n $noe lib tcl$t
06b0: 63 6c 5f 76 65 72 73 69 6f 6e 5d 0a 09 09 73 65  cl_version]...se
06c0: 74 20 74 63 6c 5f 6c 69 62 50 61 74 68 20 5b 6c  t tcl_libPath [l
06d0: 69 73 74 20 24 74 63 6c 5f 6c 69 62 72 61 72 79  ist $tcl_library
06e0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e 6f 65   [file join $noe
06f0: 20 6c 69 62 5d 5d 0a 0a 09 09 76 66 73 3a 3a 66   lib]]....vfs::f
0700: 69 6c 65 73 79 73 74 65 6d 20 6d 6f 75 6e 74 20  ilesystem mount 
0710: 24 6e 6f 65 20 24 76 66 73 48 61 6e 64 6c 65 72  $noe $vfsHandler
0720: 0a 09 7d 0a 20 20 0a 09 23 20 6c 6f 61 64 20 63  ..}.  ..# load c
0730: 6f 6e 66 69 67 20 73 65 74 74 69 6e 67 73 20 66  onfig settings f
0740: 69 6c 65 20 69 66 20 70 72 65 73 65 6e 74 0a 09  ile if present..
0750: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
0760: 3a 76 66 73 20 7b 20 76 61 72 69 61 62 6c 65 20  :vfs { variable 
0770: 74 63 6c 6b 69 74 5f 76 65 72 73 69 6f 6e 20 31  tclkit_version 1
0780: 20 7d 0a 09 63 61 74 63 68 20 7b 20 75 70 6c 65   }..catch { uple
0790: 76 65 6c 20 23 30 20 5b 6c 69 73 74 20 73 6f 75  vel #0 [list sou
07a0: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  rce [file join $
07b0: 6e 6f 65 20 63 6f 6e 66 69 67 2e 74 63 6c 5d 5d  noe config.tcl]]
07c0: 20 7d 0a 0a 09 75 70 6c 65 76 65 6c 20 23 30 20   }...uplevel #0 
07d0: 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69  [list source [fi
07e0: 6c 65 20 6a 6f 69 6e 20 24 74 63 6c 5f 6c 69 62  le join $tcl_lib
07f0: 72 61 72 79 20 69 6e 69 74 2e 74 63 6c 5d 5d 0a  rary init.tcl]].
0800: 20 20 0a 09 23 20 72 65 73 65 74 20 61 75 74 6f    ..# reset auto
0810: 5f 70 61 74 68 2c 20 73 6f 20 74 68 61 74 20 69  _path, so that i
0820: 6e 69 74 2e 74 63 6c 27 73 20 73 65 61 72 63 68  nit.tcl's search
0830: 20 6f 75 74 73 69 64 65 20 6f 66 20 74 63 6c 6b   outside of tclk
0840: 69 74 20 69 73 20 63 61 6e 63 65 6c 6c 65 64 0a  it is cancelled.
0850: 09 73 65 74 20 61 75 74 6f 5f 70 61 74 68 20 24  .set auto_path $
0860: 74 63 6c 5f 6c 69 62 50 61 74 68 0a 0a 09 23 20  tcl_libPath...# 
0870: 54 68 69 73 20 6c 6f 61 64 73 20 65 76 65 72 79  This loads every
0880: 74 68 69 6e 67 20 6e 65 65 64 65 64 20 66 6f 72  thing needed for
0890: 20 22 63 6c 6f 63 6b 20 73 63 61 6e 22 20 74 6f   "clock scan" to
08a0: 20 77 6f 72 6b 0a 09 23 20 22 63 6c 6f 63 6b 20   work..# "clock 
08b0: 73 63 61 6e 22 20 69 73 20 75 73 65 64 20 77 69  scan" is used wi
08c0: 74 68 69 6e 20 22 76 66 73 3a 3a 7a 69 70 22 2c  thin "vfs::zip",
08d0: 20 77 68 69 63 68 20 6d 61 79 20 62 65 0a 09 23   which may be..#
08e0: 20 6c 6f 61 64 65 64 20 62 65 66 6f 72 65 20 74   loaded before t
08f0: 68 69 73 20 69 73 20 72 75 6e 20 63 61 75 73 69  his is run causi
0900: 6e 67 20 74 68 65 20 72 6f 6f 74 20 56 46 53 20  ng the root VFS 
0910: 74 6f 20 62 72 65 61 6b 0a 09 63 61 74 63 68 20  to break..catch 
0920: 7b 20 63 6c 6f 63 6b 20 73 63 61 6e 20 7d 0a 7d  { clock scan }.}
0930: 0a                                               .