1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
-
+
-
+
-
-
+
+
-
+
|
proc tclInit {} {
rename tclInit {}
global auto_path tcl_library tcl_libPath
global tcl_version tcl_rcFileName
global tcl_version
# Set path where to mount VFS
set noe "/.KITDLL_TCL"
set tcl_mountpoint "/.KITDLL_TCL"
set tcl_library [file join $noe lib tcl$tcl_version]
set tcl_libPath [list $tcl_library [file join $noe lib]]
set tcl_library [file join $tcl_mountpoint lib tcl$tcl_version]
set tcl_libPath [list $tcl_library [file join $tcl_mountpoint lib]]
# get rid of a build residue
unset -nocomplain ::tclDefaultLibrary
# the following code only gets executed once on startup
if {[info exists tcl_rcFileName]} {
if {[info exists ::initVFS]} {
set vfsHandler [list ::vfs::kitdll::vfshandler tcl]
# alter path to find encodings
if {[info tclversion] eq "8.4"} {
load {} pwb
librarypath [info library]
} else {
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
-
+
-
-
+
+
-
-
-
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
}
}
# now remount the executable with the correct encoding
vfs::filesystem unmount [lindex [::vfs::filesystem info] 0]
# Resolve symlinks
set noe [file dirname [file normalize [file join $noe __dummy__]]]
set tcl_mountpoint [file dirname [file normalize [file join $tcl_mountpoint __dummy__]]]
set tcl_library [file join $noe lib tcl$tcl_version]
set tcl_libPath [list $tcl_library [file join $noe lib]]
set tcl_library [file join $tcl_mountpoint lib tcl$tcl_version]
set tcl_libPath [list $tcl_library [file join $tcl_mountpoint lib]]
vfs::filesystem mount $noe $vfsHandler
}
vfs::filesystem mount $tcl_mountpoint $vfsHandler
}
# load config settings file if present
namespace eval ::vfs { variable tclkit_version 1 }
catch { uplevel #0 [list source [file join $noe config.tcl]] }
catch { uplevel #0 [list source [file join $tcl_mountpoint config.tcl]] }
uplevel #0 [list source [file join $tcl_library init.tcl]]
# reset auto_path, so that init.tcl's search outside of tclkit is cancelled
set auto_path $tcl_libPath
# This loads everything needed for "clock scan" to work
# "clock scan" is used within "vfs::zip", which may be
# loaded before this is run causing the root VFS to break
catch { clock scan }
}
# Load these, the original Tclkit does so it should be safe.
uplevel #0 [list source [file join $tcl_mountpoint lib vfs vfsUtils.tcl]]
# Now that the initialization is complete, mount the user VFS if needed
## Mount the VFS from the Shared Object
if {[info exists ::initVFS] && [info exists ::tclKitFilename]} {
catch {
package require vfs::zip
vfs::zip::Mount $::tclKitFilename "/.KITDLL_USER"
lappend auto_path [file normalize "/.KITDLL_USER/lib"]
}
}
## Mount the VFS from executable
if {[info exists ::initVFS]} {
catch {
package require vfs::zip
vfs::zip::Mount [info nameofexecutable] "/.KITDLL_APP"
lappend auto_path [file normalize "/.KITDLL_APP/lib"]
}
}
# Clean up after the kitInit.c:preInitCmd
unset -nocomplain ::initVFS ::tclKitFilename
}
|