Artifact 1c8e83d48311b47304fcfc12e01bdffd7792135b:
- File
kitsh/buildsrc/kitsh-0.0/boot.tcl
— part of check-in
[f8234649a5]
at
2011-07-18 03:02:23
on branch trunk
— Updated to set "starkit::topdir" so that it is always correct, even with KitDLL
Updated mk4vfs zlib compressed seek test to use starkit::topdir (user: rkeene, size: 5608) [annotate] [blame] [check-ins using]
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 73 65 74 20 6d 6f 75 6e 74 me. ..set mount 0080: 70 6f 69 6e 74 20 5b 73 75 62 73 74 20 22 24 3a point [subst "$: 0090: 3a 54 43 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 :TCLKIT_MOUNTPOI 00a0: 4e 54 5f 56 41 52 22 5d 0a 0a 09 23 20 52 65 73 NT_VAR"]...# Res 00b0: 6f 6c 76 65 20 73 79 6d 6c 69 6e 6b 73 0a 09 73 olve symlinks..s 00c0: 65 74 20 6d 6f 75 6e 74 70 6f 69 6e 74 20 5b 66 et mountpoint [f 00d0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c ile dirname [fil 00e0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c e normalize [fil 00f0: 65 20 6a 6f 69 6e 20 24 6d 6f 75 6e 74 70 6f 69 e join $mountpoi 0100: 6e 74 20 5f 5f 64 75 6d 6d 79 5f 5f 5d 5d 5d 0a nt __dummy__]]]. 0110: 0a 09 73 65 74 20 74 63 6c 5f 6c 69 62 72 61 72 ..set tcl_librar 0120: 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6d 6f y [file join $mo 0130: 75 6e 74 70 6f 69 6e 74 20 6c 69 62 20 74 63 6c untpoint lib tcl 0140: 24 74 63 6c 5f 76 65 72 73 69 6f 6e 5d 0a 09 73 $tcl_version]..s 0150: 65 74 20 74 63 6c 5f 6c 69 62 50 61 74 68 20 5b et tcl_libPath [ 0160: 6c 69 73 74 20 24 74 63 6c 5f 6c 69 62 72 61 72 list $tcl_librar 0170: 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6d 6f y [file join $mo 0180: 75 6e 74 70 6f 69 6e 74 20 6c 69 62 5d 5d 0a 0a untpoint lib]].. 0190: 09 23 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 .# the following 01a0: 20 63 6f 64 65 20 6f 6e 6c 79 20 67 65 74 73 20 code only gets 01b0: 65 78 65 63 75 74 65 64 20 6f 6e 63 65 20 6f 6e executed once on 01c0: 20 73 74 61 72 74 75 70 0a 09 69 66 20 7b 5b 69 startup..if {[i 01d0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 54 43 4c nfo exists ::TCL 01e0: 4b 49 54 5f 49 4e 49 54 56 46 53 5d 7d 20 7b 0a KIT_INITVFS]} {. 01f0: 09 09 23 20 6c 6f 6f 6b 75 70 20 61 6e 64 20 65 ..# lookup and e 0200: 6d 75 6c 61 74 65 20 22 73 6f 75 72 63 65 22 20 mulate "source" 0210: 6f 66 20 6c 69 62 2f 76 66 73 2f 7b 76 66 73 2a of lib/vfs/{vfs* 0220: 2e 74 63 6c 2c 6d 6b 34 76 66 73 2e 74 63 6c 7d .tcl,mk4vfs.tcl} 0230: 0a 09 09 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a ...switch -- $:: 0240: 74 63 6c 4b 69 74 53 74 6f 72 61 67 65 20 7b 0a tclKitStorage {. 0250: 09 09 09 22 6d 6b 34 22 20 7b 0a 09 09 09 09 23 ..."mk4" {.....# 0260: 20 6d 75 73 74 20 75 73 65 20 72 61 77 20 4d 65 must use raw Me 0270: 74 61 4b 69 74 20 63 61 6c 6c 73 20 62 65 63 61 taKit calls beca 0280: 75 73 65 20 56 46 53 20 69 73 20 6e 6f 74 20 79 use VFS is not y 0290: 65 74 20 69 6e 20 70 6c 61 63 65 0a 09 09 09 09 et in place..... 02a0: 73 65 74 20 64 20 5b 6d 6b 3a 3a 73 65 6c 65 63 set d [mk::selec 02b0: 74 20 65 78 65 2e 64 69 72 73 20 70 61 72 65 6e t exe.dirs paren 02c0: 74 20 30 20 6e 61 6d 65 20 6c 69 62 5d 0a 09 09 t 0 name lib]... 02d0: 09 09 73 65 74 20 64 20 5b 6d 6b 3a 3a 73 65 6c ..set d [mk::sel 02e0: 65 63 74 20 65 78 65 2e 64 69 72 73 20 70 61 72 ect exe.dirs par 02f0: 65 6e 74 20 24 64 20 6e 61 6d 65 20 76 66 73 5d ent $d name vfs] 0300: 0a 20 20 20 20 0a 09 09 09 09 66 6f 72 65 61 63 . .....foreac 0310: 68 20 78 20 7b 76 66 73 55 74 69 6c 73 20 76 66 h x {vfsUtils vf 0320: 73 6c 69 62 20 6d 6b 34 76 66 73 7d 20 7b 0a 09 slib mk4vfs} {.. 0330: 09 09 09 09 73 65 74 20 6e 20 5b 6d 6b 3a 3a 73 ....set n [mk::s 0340: 65 6c 65 63 74 20 65 78 65 2e 64 69 72 73 21 24 elect exe.dirs!$ 0350: 64 2e 66 69 6c 65 73 20 6e 61 6d 65 20 24 78 2e d.files name $x. 0360: 74 63 6c 5d 0a 09 09 09 09 09 73 65 74 20 73 20 tcl]......set s 0370: 5b 6d 6b 3a 3a 67 65 74 20 65 78 65 2e 64 69 72 [mk::get exe.dir 0380: 73 21 24 64 2e 66 69 6c 65 73 21 24 6e 20 63 6f s!$d.files!$n co 0390: 6e 74 65 6e 74 73 5d 0a 09 09 09 09 09 63 61 74 ntents]......cat 03a0: 63 68 20 7b 73 65 74 20 73 20 5b 7a 6c 69 62 20 ch {set s [zlib 03b0: 64 65 63 6f 6d 70 72 65 73 73 20 24 73 5d 7d 0a decompress $s]}. 03c0: 09 09 09 09 09 75 70 6c 65 76 65 6c 20 23 30 20 .....uplevel #0 03d0: 24 73 0a 09 09 09 09 7d 0a 0a 09 09 09 09 23 20 $s.....}......# 03e0: 75 73 65 20 6f 6e 2d 74 68 65 2d 66 6c 79 20 64 use on-the-fly d 03f0: 65 63 6f 6d 70 72 65 73 73 69 6f 6e 2c 20 69 66 ecompression, if 0400: 20 6d 6b 34 76 66 73 20 75 6e 64 65 72 73 74 61 mk4vfs understa 0410: 6e 64 73 20 74 68 61 74 0a 09 09 09 09 73 65 74 nds that.....set 0420: 20 6d 6b 34 76 66 73 3a 3a 7a 73 74 72 65 61 6d mk4vfs::zstream 0430: 65 64 20 31 0a 0a 09 09 09 09 23 20 53 65 74 20 ed 1......# Set 0440: 56 46 53 20 68 61 6e 64 6c 65 72 20 6e 61 6d 65 VFS handler name 0450: 0a 09 09 09 09 73 65 74 20 76 66 73 48 61 6e 64 .....set vfsHand 0460: 6c 65 72 20 5b 6c 69 73 74 20 3a 3a 76 66 73 3a ler [list ::vfs: 0470: 3a 6d 6b 34 3a 3a 68 61 6e 64 6c 65 72 20 65 78 :mk4::handler ex 0480: 65 5d 0a 09 09 09 7d 0a 09 09 09 22 7a 69 70 22 e]....}...."zip" 0490: 20 7b 0a 09 09 09 09 73 65 74 20 70 72 65 66 69 {.....set prefi 04a0: 78 20 22 6c 69 62 2f 76 66 73 22 0a 09 09 09 09 x "lib/vfs"..... 04b0: 66 6f 72 65 61 63 68 20 66 69 6c 65 20 5b 6c 69 foreach file [li 04c0: 73 74 20 76 66 73 55 74 69 6c 73 20 76 66 73 6c st vfsUtils vfsl 04d0: 69 62 5d 20 7b 0a 09 09 09 09 09 73 65 74 20 66 ib] {......set f 04e0: 75 6c 6c 66 69 6c 65 20 22 24 7b 70 72 65 66 69 ullfile "${prefi 04f0: 78 7d 2f 24 7b 66 69 6c 65 7d 2e 74 63 6c 22 0a x}/${file}.tcl". 0500: 0a 09 09 09 09 09 3a 3a 7a 69 70 3a 3a 73 74 61 ......::zip::sta 0510: 74 20 24 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 61 t $::tclKitStora 0520: 67 65 5f 66 64 20 24 66 75 6c 6c 66 69 6c 65 20 ge_fd $fullfile 0530: 66 69 6e 66 6f 0a 09 09 09 09 09 73 65 65 6b 20 finfo......seek 0540: 24 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 61 67 65 $::tclKitStorage 0550: 5f 66 64 20 24 66 69 6e 66 6f 28 69 6e 6f 29 0a _fd $finfo(ino). 0560: 09 09 09 09 09 7a 69 70 3a 3a 44 61 74 61 20 24 .....zip::Data $ 0570: 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 61 67 65 5f ::tclKitStorage_ 0580: 66 64 20 73 62 20 73 0a 0a 09 09 09 09 09 73 77 fd sb s.......sw 0590: 69 74 63 68 20 2d 2d 20 24 66 69 6c 65 20 7b 0a itch -- $file {. 05a0: 09 09 09 09 09 09 22 76 66 73 55 74 69 6c 73 22 ......"vfsUtils" 05b0: 20 7b 0a 09 09 09 09 09 09 09 23 20 50 72 65 73 {........# Pres 05c0: 65 72 76 65 20 6f 75 72 20 77 6f 72 6b 69 6e 67 erve our working 05d0: 20 22 3a 3a 76 66 73 3a 3a 7a 69 70 22 20 69 6d "::vfs::zip" im 05e0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 09 09 09 plementation.... 05f0: 09 09 09 09 23 20 73 6f 20 77 65 20 63 61 6e 20 ....# so we can 0600: 72 65 70 6c 61 63 65 20 69 74 20 61 66 74 65 72 replace it after 0610: 20 74 68 65 20 73 74 75 62 20 69 73 20 72 65 70 the stub is rep 0620: 6c 61 63 65 64 0a 09 09 09 09 09 09 09 23 20 66 laced........# f 0630: 72 6f 6d 20 76 66 73 55 74 69 6c 73 0a 09 09 09 rom vfsUtils.... 0640: 09 09 09 09 23 20 54 68 65 20 63 6f 72 72 65 63 ....# The correc 0650: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e t implementation 0660: 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 will be provide 0670: 64 20 62 79 20 76 66 73 6c 69 62 2c 20 0a 09 09 d by vfslib, ... 0680: 09 09 09 09 09 23 20 62 75 74 20 6f 6e 6c 79 20 .....# but only 0690: 69 66 20 77 65 20 63 61 6e 20 72 65 61 64 20 69 if we can read i 06a0: 74 0a 09 09 09 09 09 09 09 72 65 6e 61 6d 65 20 t........rename 06b0: 3a 3a 76 66 73 3a 3a 7a 69 70 20 3a 3a 76 66 73 ::vfs::zip ::vfs 06c0: 3a 3a 7a 69 70 5f 69 6d 70 6c 0a 09 09 09 09 09 ::zip_impl...... 06d0: 09 7d 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 .}......}....... 06e0: 75 70 6c 65 76 65 6c 20 23 30 20 24 73 0a 0a 09 uplevel #0 $s... 06f0: 09 09 09 09 73 77 69 74 63 68 20 2d 2d 20 24 66 ....switch -- $f 0700: 69 6c 65 20 7b 0a 09 09 09 09 09 09 22 76 66 73 ile {......."vfs 0710: 55 74 69 6c 73 22 20 7b 0a 09 09 09 09 09 09 09 Utils" {........ 0720: 23 20 52 65 73 74 6f 72 65 20 70 72 65 73 65 72 # Restore preser 0730: 76 65 64 20 22 3a 3a 76 66 73 3a 7a 69 70 22 20 ved "::vfs:zip" 0740: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 09 implementation.. 0750: 09 09 09 09 09 09 72 65 6e 61 6d 65 20 3a 3a 76 ......rename ::v 0760: 66 73 3a 3a 7a 69 70 20 7b 7d 0a 09 09 09 09 09 fs::zip {}...... 0770: 09 09 72 65 6e 61 6d 65 20 3a 3a 76 66 73 3a 3a ..rename ::vfs:: 0780: 7a 69 70 5f 69 6d 70 6c 20 3a 3a 76 66 73 3a 3a zip_impl ::vfs:: 0790: 7a 69 70 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 zip.......}..... 07a0: 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 73 65 .}.....}......se 07b0: 65 6b 20 24 3a 3a 74 63 6c 4b 69 74 53 74 6f 72 ek $::tclKitStor 07c0: 61 67 65 5f 66 64 20 30 0a 09 09 09 09 73 65 74 age_fd 0.....set 07d0: 20 76 66 73 48 61 6e 64 6c 65 72 20 5b 6c 69 73 vfsHandler [lis 07e0: 74 20 3a 3a 76 66 73 3a 3a 7a 69 70 3a 3a 68 61 t ::vfs::zip::ha 07f0: 6e 64 6c 65 72 20 24 3a 3a 74 63 6c 4b 69 74 53 ndler $::tclKitS 0800: 74 6f 72 61 67 65 5f 66 64 5d 0a 09 09 09 09 75 torage_fd].....u 0810: 6e 73 65 74 20 3a 3a 74 63 6c 4b 69 74 53 74 6f nset ::tclKitSto 0820: 72 61 67 65 5f 66 64 0a 09 09 09 7d 0a 09 09 09 rage_fd....}.... 0830: 22 63 76 66 73 22 20 7b 0a 09 09 09 09 73 65 74 "cvfs" {.....set 0840: 20 76 66 73 48 61 6e 64 6c 65 72 20 5b 6c 69 73 vfsHandler [lis 0850: 74 20 3a 3a 76 66 73 3a 3a 63 76 66 73 3a 3a 76 t ::vfs::cvfs::v 0860: 66 73 68 61 6e 64 6c 65 72 20 74 63 6c 5d 0a 0a fshandler tcl].. 0870: 09 09 09 09 23 20 4c 6f 61 64 20 74 68 65 73 65 ....# Load these 0880: 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 54 , the original T 0890: 63 6c 6b 69 74 20 64 6f 65 73 20 73 6f 20 69 74 clkit does so it 08a0: 20 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 2e should be safe. 08b0: 0a 09 09 09 09 66 6f 72 65 61 63 68 20 76 66 73 .....foreach vfs 08c0: 66 69 6c 65 20 5b 6c 69 73 74 20 76 66 73 55 74 file [list vfsUt 08d0: 69 6c 73 20 76 66 73 6c 69 62 5d 20 7b 0a 09 09 ils vfslib] {... 08e0: 09 09 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 ...unset -nocomp 08f0: 6c 61 69 6e 20 73 0a 0a 09 09 09 09 09 63 61 74 lain s.......cat 0900: 63 68 20 7b 0a 09 09 09 09 09 09 73 65 74 20 73 ch {.......set s 0910: 20 5b 3a 3a 76 66 73 3a 3a 63 76 66 73 3a 3a 64 [::vfs::cvfs::d 0920: 61 74 61 3a 3a 67 65 74 44 61 74 61 20 74 63 6c ata::getData tcl 0930: 20 22 6c 69 62 2f 76 66 73 2f 24 7b 76 66 73 66 "lib/vfs/${vfsf 0940: 69 6c 65 7d 2e 74 63 6c 22 5d 0a 09 09 09 09 09 ile}.tcl"]...... 0950: 7d 0a 0a 09 09 09 09 09 69 66 20 7b 21 5b 69 6e }.......if {![in 0960: 66 6f 20 65 78 69 73 74 73 20 73 5d 7d 20 7b 0a fo exists s]} {. 0970: 09 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 ......continue.. 0980: 09 09 09 09 7d 0a 0a 09 09 09 09 09 75 70 6c 65 ....}.......uple 0990: 76 65 6c 20 23 30 20 24 73 0a 09 09 09 09 7d 0a vel #0 $s.....}. 09a0: 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 23 20 6d 6f ...}...}....# mo 09b0: 75 6e 74 20 74 68 65 20 65 78 65 63 75 74 61 62 unt the executab 09c0: 6c 65 2c 20 69 2e 65 2e 20 6d 61 6b 65 20 61 6c le, i.e. make al 09d0: 6c 20 72 75 6e 74 69 6d 65 20 66 69 6c 65 73 20 l runtime files 09e0: 61 76 61 69 6c 61 62 6c 65 0a 09 09 76 66 73 3a available...vfs: 09f0: 3a 66 69 6c 65 73 79 73 74 65 6d 20 6d 6f 75 6e :filesystem moun 0a00: 74 20 24 6d 6f 75 6e 74 70 6f 69 6e 74 20 24 76 t $mountpoint $v 0a10: 66 73 48 61 6e 64 6c 65 72 0a 0a 09 09 23 20 61 fsHandler....# a 0a20: 6c 74 65 72 20 70 61 74 68 20 74 6f 20 66 69 6e lter path to fin 0a30: 64 20 65 6e 63 6f 64 69 6e 67 73 0a 09 09 69 66 d encodings...if 0a40: 20 7b 5b 69 6e 66 6f 20 74 63 6c 76 65 72 73 69 {[info tclversi 0a50: 6f 6e 5d 20 65 71 20 22 38 2e 34 22 7d 20 7b 0a on] eq "8.4"} {. 0a60: 09 09 09 6c 6f 61 64 20 7b 7d 20 70 77 62 0a 09 ...load {} pwb.. 0a70: 09 09 6c 69 62 72 61 72 79 70 61 74 68 20 5b 69 ..librarypath [i 0a80: 6e 66 6f 20 6c 69 62 72 61 72 79 5d 0a 09 09 7d nfo library]...} 0a90: 20 65 6c 73 65 20 7b 0a 09 09 09 65 6e 63 6f 64 else {....encod 0aa0: 69 6e 67 20 64 69 72 73 20 5b 6c 69 73 74 20 5b ing dirs [list [ 0ab0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 file join [info 0ac0: 6c 69 62 72 61 72 79 5d 20 65 6e 63 6f 64 69 6e library] encodin 0ad0: 67 5d 5d 20 3b 23 20 54 49 50 20 32 35 38 0a 09 g]] ;# TIP 258.. 0ae0: 09 7d 0a 0a 09 09 23 20 66 69 78 20 73 79 73 74 .}....# fix syst 0af0: 65 6d 20 65 6e 63 6f 64 69 6e 67 2c 20 69 66 20 em encoding, if 0b00: 69 74 20 77 61 73 6e 27 74 20 70 72 6f 70 65 72 it wasn't proper 0b10: 6c 79 20 73 65 74 20 75 70 20 28 32 30 30 32 30 ly set up (20020 0b20: 37 2e 30 30 34 20 62 75 67 29 0a 09 09 69 66 20 7.004 bug)...if 0b30: 7b 5b 65 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 {[encoding syste 0b40: 6d 5d 20 65 71 20 22 69 64 65 6e 74 69 74 79 22 m] eq "identity" 0b50: 7d 20 7b 0a 09 09 09 69 66 20 7b 5b 69 6e 66 6f } {....if {[info 0b60: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 6b 69 74 exists ::tclkit 0b70: 5f 73 79 73 74 65 6d 5f 65 6e 63 6f 64 69 6e 67 _system_encoding 0b80: 5d 20 26 26 20 24 3a 3a 74 63 6c 6b 69 74 5f 73 ] && $::tclkit_s 0b90: 79 73 74 65 6d 5f 65 6e 63 6f 64 69 6e 67 20 21 ystem_encoding ! 0ba0: 3d 20 22 22 7d 20 7b 0a 09 09 09 09 63 61 74 63 = ""} {.....catc 0bb0: 68 20 7b 0a 09 09 09 09 09 65 6e 63 6f 64 69 6e h {......encodin 0bc0: 67 20 73 79 73 74 65 6d 20 24 3a 3a 74 63 6c 6b g system $::tclk 0bd0: 69 74 5f 73 79 73 74 65 6d 5f 65 6e 63 6f 64 69 it_system_encodi 0be0: 6e 67 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 ng.....}....}... 0bf0: 7d 0a 0a 09 09 23 20 49 66 20 77 65 27 76 65 20 }....# If we've 0c00: 73 74 69 6c 6c 20 6e 6f 74 20 62 65 65 6e 20 61 still not been a 0c10: 62 6c 65 20 74 6f 20 73 65 74 20 74 68 65 20 65 ble to set the e 0c20: 6e 63 6f 64 69 6e 67 2c 20 72 65 76 65 72 74 20 ncoding, revert 0c30: 74 6f 20 54 63 6c 6b 69 74 20 64 65 66 61 75 6c to Tclkit defaul 0c40: 74 73 0a 09 09 69 66 20 7b 5b 65 6e 63 6f 64 69 ts...if {[encodi 0c50: 6e 67 20 73 79 73 74 65 6d 5d 20 65 71 20 22 69 ng system] eq "i 0c60: 64 65 6e 74 69 74 79 22 7d 20 7b 0a 09 09 09 63 dentity"} {....c 0c70: 61 74 63 68 20 7b 0a 09 09 09 09 73 77 69 74 63 atch {.....switc 0c80: 68 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 h $::tcl_platfor 0c90: 6d 28 70 6c 61 74 66 6f 72 6d 29 20 7b 0a 09 09 m(platform) {... 0ca0: 09 09 09 77 69 6e 64 6f 77 73 09 09 7b 20 65 6e ...windows..{ en 0cb0: 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 20 63 70 coding system cp 0cc0: 31 32 35 32 20 7d 0a 09 09 09 09 09 6d 61 63 69 1252 }......maci 0cd0: 6e 74 6f 73 68 09 7b 20 65 6e 63 6f 64 69 6e 67 ntosh.{ encoding 0ce0: 20 73 79 73 74 65 6d 20 6d 61 63 52 6f 6d 61 6e system macRoman 0cf0: 20 7d 0a 09 09 09 09 20 20 20 20 20 20 20 20 64 }..... d 0d00: 65 66 61 75 6c 74 09 09 7b 20 65 6e 63 6f 64 69 efault..{ encodi 0d10: 6e 67 20 73 79 73 74 65 6d 20 69 73 6f 38 38 35 ng system iso885 0d20: 39 2d 31 20 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 9-1 }.....}....} 0d30: 0a 09 09 7d 0a 0a 09 09 23 20 52 65 2d 65 76 61 ...}....# Re-eva 0d40: 6c 75 61 74 65 20 6d 6f 75 6e 74 70 6f 69 6e 74 luate mountpoint 0d50: 20 77 69 74 68 20 63 6f 72 72 65 63 74 20 65 6e with correct en 0d60: 63 6f 64 69 6e 67 20 73 65 74 0a 09 09 73 65 74 coding set...set 0d70: 20 6d 6f 75 6e 74 70 6f 69 6e 74 20 5b 73 75 62 mountpoint [sub 0d80: 73 74 20 22 24 3a 3a 54 43 4c 4b 49 54 5f 4d 4f st "$::TCLKIT_MO 0d90: 55 4e 54 50 4f 49 4e 54 5f 56 41 52 22 5d 0a 0a UNTPOINT_VAR"].. 0da0: 09 09 23 20 6e 6f 77 20 72 65 6d 6f 75 6e 74 20 ..# now remount 0db0: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 20 77 the executable w 0dc0: 69 74 68 20 74 68 65 20 63 6f 72 72 65 63 74 20 ith the correct 0dd0: 65 6e 63 6f 64 69 6e 67 0a 09 09 76 66 73 3a 3a encoding...vfs:: 0de0: 66 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d 6f 75 filesystem unmou 0df0: 6e 74 20 5b 6c 69 6e 64 65 78 20 5b 3a 3a 76 66 nt [lindex [::vf 0e00: 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 69 6e s::filesystem in 0e10: 66 6f 5d 20 30 5d 0a 0a 09 09 23 20 52 65 73 6f fo] 0]....# Reso 0e20: 6c 76 65 20 73 79 6d 6c 69 6e 6b 73 0a 09 09 73 lve symlinks...s 0e30: 65 74 20 6d 6f 75 6e 74 70 6f 69 6e 74 20 5b 66 et mountpoint [f 0e40: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c ile dirname [fil 0e50: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c e normalize [fil 0e60: 65 20 6a 6f 69 6e 20 24 6d 6f 75 6e 74 70 6f 69 e join $mountpoi 0e70: 6e 74 20 5f 5f 64 75 6d 6d 79 5f 5f 5d 5d 5d 0a nt __dummy__]]]. 0e80: 0a 09 09 73 65 74 20 74 63 6c 5f 6c 69 62 72 61 ...set tcl_libra 0e90: 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6d ry [file join $m 0ea0: 6f 75 6e 74 70 6f 69 6e 74 20 6c 69 62 20 74 63 ountpoint lib tc 0eb0: 6c 24 74 63 6c 5f 76 65 72 73 69 6f 6e 5d 0a 09 l$tcl_version].. 0ec0: 09 73 65 74 20 74 63 6c 5f 6c 69 62 50 61 74 68 .set tcl_libPath 0ed0: 20 5b 6c 69 73 74 20 24 74 63 6c 5f 6c 69 62 72 [list $tcl_libr 0ee0: 61 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 ary [file join $ 0ef0: 6d 6f 75 6e 74 70 6f 69 6e 74 20 6c 69 62 5d 5d mountpoint lib]] 0f00: 0a 0a 09 09 76 66 73 3a 3a 66 69 6c 65 73 79 73 ....vfs::filesys 0f10: 74 65 6d 20 6d 6f 75 6e 74 20 24 6d 6f 75 6e 74 tem mount $mount 0f20: 70 6f 69 6e 74 20 24 76 66 73 48 61 6e 64 6c 65 point $vfsHandle 0f30: 72 0a 0a 09 09 23 20 54 68 69 73 20 6c 6f 61 64 r....# This load 0f40: 73 20 65 76 65 72 79 74 68 69 6e 67 20 6e 65 65 s everything nee 0f50: 64 65 64 20 66 6f 72 20 22 63 6c 6f 63 6b 20 73 ded for "clock s 0f60: 63 61 6e 22 20 74 6f 20 77 6f 72 6b 0a 09 09 23 can" to work...# 0f70: 20 22 63 6c 6f 63 6b 20 73 63 61 6e 22 20 69 73 "clock scan" is 0f80: 20 75 73 65 64 20 77 69 74 68 69 6e 20 22 76 66 used within "vf 0f90: 73 3a 3a 7a 69 70 22 2c 20 77 68 69 63 68 20 6d s::zip", which m 0fa0: 61 79 20 62 65 0a 09 09 23 20 6c 6f 61 64 65 64 ay be...# loaded 0fb0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 69 73 20 before this is 0fc0: 72 75 6e 20 63 61 75 73 69 6e 67 20 74 68 65 20 run causing the 0fd0: 72 6f 6f 74 20 56 46 53 20 74 6f 20 62 72 65 61 root VFS to brea 0fe0: 6b 0a 09 09 63 61 74 63 68 20 7b 20 63 6c 6f 63 k...catch { cloc 0ff0: 6b 20 73 63 61 6e 20 7d 0a 09 7d 0a 20 20 0a 09 k scan }..}. .. 1000: 23 20 6c 6f 61 64 20 63 6f 6e 66 69 67 20 73 65 # load config se 1010: 74 74 69 6e 67 73 20 66 69 6c 65 20 69 66 20 70 ttings file if p 1020: 72 65 73 65 6e 74 0a 09 6e 61 6d 65 73 70 61 63 resent..namespac 1030: 65 20 65 76 61 6c 20 3a 3a 76 66 73 20 7b 20 76 e eval ::vfs { v 1040: 61 72 69 61 62 6c 65 20 74 63 6c 6b 69 74 5f 76 ariable tclkit_v 1050: 65 72 73 69 6f 6e 20 31 20 7d 0a 09 63 61 74 63 ersion 1 }..catc 1060: 68 20 7b 20 75 70 6c 65 76 65 6c 20 23 30 20 5b h { uplevel #0 [ 1070: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c list source [fil 1080: 65 20 6a 6f 69 6e 20 24 6d 6f 75 6e 74 70 6f 69 e join $mountpoi 1090: 6e 74 20 63 6f 6e 66 69 67 2e 74 63 6c 5d 5d 20 nt config.tcl]] 10a0: 7d 0a 0a 09 23 20 53 65 74 2d 75 70 20 73 74 61 }...# Set-up sta 10b0: 72 6b 69 74 3a 3a 74 6f 70 64 69 72 20 63 6f 72 rkit::topdir cor 10c0: 72 65 63 74 6c 79 0a 09 6e 61 6d 65 73 70 61 63 rectly..namespac 10d0: 65 20 65 76 61 6c 20 3a 3a 73 74 61 72 6b 69 74 e eval ::starkit 10e0: 20 7b 20 76 61 72 69 61 62 6c 65 20 74 6f 70 64 { variable topd 10f0: 69 72 20 7d 0a 09 73 65 74 20 3a 3a 73 74 61 72 ir }..set ::star 1100: 6b 69 74 3a 3a 74 6f 70 64 69 72 20 24 6d 6f 75 kit::topdir $mou 1110: 6e 74 70 6f 69 6e 74 0a 0a 09 23 20 50 65 72 66 ntpoint...# Perf 1120: 6f 72 6d 20 65 78 70 65 63 74 65 64 20 69 6e 69 orm expected ini 1130: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 09 75 70 6c tialization..upl 1140: 65 76 65 6c 20 23 30 20 5b 6c 69 73 74 20 73 6f evel #0 [list so 1150: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 urce [file join 1160: 24 74 63 6c 5f 6c 69 62 72 61 72 79 20 69 6e 69 $tcl_library ini 1170: 74 2e 74 63 6c 5d 5d 0a 20 20 0a 09 23 20 72 65 t.tcl]]. ..# re 1180: 73 65 74 20 61 75 74 6f 5f 70 61 74 68 2c 20 73 set auto_path, s 1190: 6f 20 74 68 61 74 20 69 6e 69 74 2e 74 63 6c 27 o that init.tcl' 11a0: 73 20 73 65 61 72 63 68 20 6f 75 74 73 69 64 65 s search outside 11b0: 20 6f 66 20 74 63 6c 6b 69 74 20 69 73 20 63 61 of tclkit is ca 11c0: 6e 63 65 6c 6c 65 64 0a 09 73 65 74 20 61 75 74 ncelled..set aut 11d0: 6f 5f 70 61 74 68 20 24 74 63 6c 5f 6c 69 62 50 o_path $tcl_libP 11e0: 61 74 68 0a 0a 09 69 66 20 7b 24 3a 3a 54 43 4c ath...if {$::TCL 11f0: 4b 49 54 5f 54 59 50 45 20 3d 3d 20 22 6b 69 74 KIT_TYPE == "kit 1200: 64 6c 6c 22 7d 20 7b 0a 09 09 23 20 53 65 74 20 dll"} {...# Set 1210: 61 20 6d 61 78 69 6d 75 6d 20 73 65 65 6b 20 74 a maximum seek t 1220: 6f 20 61 76 6f 69 64 20 72 65 61 64 69 6e 67 20 o avoid reading 1230: 74 68 65 20 65 6e 74 69 72 65 20 66 69 6c 65 20 the entire file 1240: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 0a 09 09 looking for a... 1250: 23 20 7a 69 70 20 68 65 61 64 65 72 0a 09 09 63 # zip header...c 1260: 61 74 63 68 20 7b 20 0a 09 09 09 70 61 63 6b 61 atch { ....packa 1270: 67 65 20 72 65 71 75 69 72 65 20 76 66 73 3a 3a ge require vfs:: 1280: 7a 69 70 0a 09 09 09 73 65 74 20 3a 3a 7a 69 70 zip....set ::zip 1290: 3a 3a 6d 61 78 5f 68 65 61 64 65 72 5f 73 65 65 ::max_header_see 12a0: 6b 20 38 31 39 32 0a 09 09 7d 0a 0a 09 09 23 20 k 8192...}....# 12b0: 4e 6f 77 20 74 68 61 74 20 74 68 65 20 69 6e 69 Now that the ini 12c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 73 20 63 tialization is c 12d0: 6f 6d 70 6c 65 74 65 2c 20 6d 6f 75 6e 74 20 74 omplete, mount t 12e0: 68 65 20 75 73 65 72 20 56 46 53 20 69 66 20 6e he user VFS if n 12f0: 65 65 64 65 64 0a 09 09 23 23 20 4d 6f 75 6e 74 eeded...## Mount 1300: 20 74 68 65 20 56 46 53 20 66 72 6f 6d 20 74 68 the VFS from th 1310: 65 20 53 68 61 72 65 64 20 4f 62 6a 65 63 74 0a e Shared Object. 1320: 09 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 ..if {[info exis 1330: 74 73 20 3a 3a 54 43 4c 4b 49 54 5f 49 4e 49 54 ts ::TCLKIT_INIT 1340: 56 46 53 5d 20 26 26 20 5b 69 6e 66 6f 20 65 78 VFS] && [info ex 1350: 69 73 74 73 20 3a 3a 74 63 6c 4b 69 74 46 69 6c ists ::tclKitFil 1360: 65 6e 61 6d 65 5d 7d 20 7b 0a 09 09 09 63 61 74 ename]} {....cat 1370: 63 68 20 7b 0a 09 09 09 09 76 66 73 3a 3a 7a 69 ch {.....vfs::zi 1380: 70 3a 3a 4d 6f 75 6e 74 20 24 3a 3a 74 63 6c 4b p::Mount $::tclK 1390: 69 74 46 69 6c 65 6e 61 6d 65 20 22 2f 2e 4b 49 itFilename "/.KI 13a0: 54 44 4c 4c 5f 55 53 45 52 22 0a 09 09 09 7d 0a TDLL_USER"....}. 13b0: 09 09 7d 0a 09 09 6c 61 70 70 65 6e 64 20 61 75 ..}...lappend au 13c0: 74 6f 5f 70 61 74 68 20 22 2f 2e 4b 49 54 44 4c to_path "/.KITDL 13d0: 4c 5f 55 53 45 52 2f 6c 69 62 22 0a 0a 09 09 23 L_USER/lib"....# 13e0: 23 20 4d 6f 75 6e 74 20 74 68 65 20 56 46 53 20 # Mount the VFS 13f0: 66 72 6f 6d 20 65 78 65 63 75 74 61 62 6c 65 0a from executable. 1400: 09 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 ..if {[info exis 1410: 74 73 20 3a 3a 54 43 4c 4b 49 54 5f 49 4e 49 54 ts ::TCLKIT_INIT 1420: 56 46 53 5d 7d 20 7b 0a 09 09 09 63 61 74 63 68 VFS]} {....catch 1430: 20 7b 0a 09 09 09 09 76 66 73 3a 3a 7a 69 70 3a {.....vfs::zip: 1440: 3a 4d 6f 75 6e 74 20 5b 69 6e 66 6f 20 6e 61 6d :Mount [info nam 1450: 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d 20 22 eofexecutable] " 1460: 2f 2e 4b 49 54 44 4c 4c 5f 41 50 50 22 0a 09 09 /.KITDLL_APP"... 1470: 09 7d 0a 09 09 7d 0a 09 09 6c 61 70 70 65 6e 64 .}...}...lappend 1480: 20 61 75 74 6f 5f 70 61 74 68 20 22 2f 2e 4b 49 auto_path "/.KI 1490: 54 44 4c 4c 5f 41 50 50 2f 6c 69 62 22 0a 09 7d TDLL_APP/lib"..} 14a0: 0a 0a 09 23 20 43 6c 65 61 6e 20 75 70 0a 09 75 ...# Clean up..u 14b0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 14c0: 20 3a 3a 7a 69 70 3a 3a 6d 61 78 5f 68 65 61 64 ::zip::max_head 14d0: 65 72 5f 73 65 65 6b 0a 09 75 6e 73 65 74 20 2d er_seek..unset - 14e0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 54 43 4c nocomplain ::TCL 14f0: 4b 49 54 5f 54 59 50 45 20 3a 3a 54 43 4c 4b 49 KIT_TYPE ::TCLKI 1500: 54 5f 49 4e 49 54 56 46 53 0a 09 75 6e 73 65 74 T_INITVFS..unset 1510: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 54 -nocomplain ::T 1520: 43 4c 4b 49 54 5f 4d 4f 55 4e 54 50 4f 49 4e 54 CLKIT_MOUNTPOINT 1530: 20 3a 3a 54 43 4c 4b 49 54 5f 56 46 53 53 4f 55 ::TCLKIT_VFSSOU 1540: 52 43 45 20 3a 3a 54 43 4c 4b 49 54 5f 4d 4f 55 RCE ::TCLKIT_MOU 1550: 4e 54 50 4f 49 4e 54 5f 56 41 52 20 3a 3a 54 43 NTPOINT_VAR ::TC 1560: 4c 4b 49 54 5f 56 46 53 53 4f 55 52 43 45 5f 56 LKIT_VFSSOURCE_V 1570: 41 52 0a 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d AR..unset -nocom 1580: 70 6c 61 69 6e 20 3a 3a 74 63 6c 4b 69 74 53 74 plain ::tclKitSt 1590: 6f 72 61 67 65 20 3a 3a 74 63 6c 4b 69 74 53 74 orage ::tclKitSt 15a0: 6f 72 61 67 65 5f 66 64 20 3a 3a 74 63 6c 4b 69 orage_fd ::tclKi 15b0: 74 46 69 6c 65 6e 61 6d 65 0a 09 75 6e 73 65 74 tFilename..unset 15c0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 74 -nocomplain ::t 15d0: 63 6c 6b 69 74 5f 73 79 73 74 65 6d 5f 65 6e 63 clkit_system_enc 15e0: 6f 64 69 6e 67 0a 7d 0a oding.}.