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
105
106
107
108
109
|
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
105
106
107
108
109
110
111
112
|
-
+
-
+
+
+
+
|
foreach lib $libs {
$handle add_library $lib
}
if {$::tcl_platform(platform) eq "windows"} {
$handle define DLL_EXPORT {__declspec(dllexport)}
set f [open [file join $::tcc4tcl::dir c dllcrt1.c]]
set f [open [file join $::tcc4tcl::dir lib dllcrt1.c]]
$handle compile [read $f]
close $f
set f [open [file join $::tcc4tcl::dir c dllmain.c]]
set f [open [file join $::tcc4tcl::dir lib dllmain.c]]
$handle compile [read $f]
close $f
} else {
$handle define DLL_EXPORT ""
}
$handle compile $code
$handle output_file $dll
rename $handle {}
}
proc ::tcc4tcl::Log {args} {
# puts $args
}
proc ::tcc4tcl::reset {} {
variable tcc
set tcc(code) ""
set tcc(cfiles) [list]
set tcc(tk) 0
}
# Custom helpers
proc ::tcc4tcl::checkname {n} {expr {[regexp {^[a-zA-Z0-9_]+$} $n] > 0}}
proc ::tcc4tcl::cleanname {n} {regsub -all {[^a-zA-Z0-9_]+} $n _}
proc ::tcc4tcl::ccode {code} {
variable tcc
|