aboutsummaryrefslogtreecommitdiff
path: root/make-c-ext.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'make-c-ext.tcl')
-rw-r--r--make-c-ext.tcl40
1 files changed, 40 insertions, 0 deletions
diff --git a/make-c-ext.tcl b/make-c-ext.tcl
new file mode 100644
index 0000000..96f6355
--- /dev/null
+++ b/make-c-ext.tcl
@@ -0,0 +1,40 @@
+#!/usr/bin/env tclsh
+
+proc tcl_to_string {str} {
+ set result {}
+ foreach buf [split $str \n] {
+ set trimmed [string trim $buf]
+ if {[string match "#*" $trimmed] || $trimmed == ""} {
+ continue
+ }
+ regsub -all {\\} $buf {\\\\} buf
+ regsub -all \" $buf "\\\"" buf
+ append result {"} $buf {\n"} \n
+ }
+ return $result
+}
+
+set outfile [lindex $argv 0]
+set argv [lrange $argv 1 end]
+
+foreach file $argv {
+ if {![string match *.tcl $file]} {
+ error "Not a tcl file: $file"
+ }
+ set tmp [file tail $file]
+ set rootname [file rootname $tmp]
+ if {0} {
+ set outfile jim-$rootname.c
+ }
+ set f [open $file]
+ set str [read $f]
+ close $f
+ set f [open $outfile w]
+ puts $f {#include <jim.h>}
+ puts $f "int Jim_${rootname}Init(Jim_Interp *interp)"
+ puts $f "{"
+ puts $f "\treturn Jim_EvalGlobal(interp, "
+ puts -nonewline $f [tcl_to_string $str]
+ puts $f ");\t}"
+ close $f
+}