It is not clear, after reading Critcl pages, exactly what files have to be installed on a Windows machine to use Critcl. Does one have to install the critcl source code and then some other piece(s)? ''June 2002'' - Yes, you need critcl installed as a normal Tcl package (i.e. so "package require critcl" works in tclsh or tclkit) and you need to set things up so "gcc" works. What I do is install the mingw system, and set up the PATH so "gcc" works from the command line. That's it. -jcw ---- '''Q:''' ''When does the code get compiled?'' In an example such as critcl::cproc triple {int i} int { return i * 3; /* this is C code */ } puts "three times 123 is [triple 123]" when is the C-coded '''triple''' command created? '''A:''' When it is called the first time. The '''critcl::cproc''' command creates an [auto_index] entry for the command it defines. The script in this entry causes complete C sources to be written, the compiler to be run, and the resulting dynamic library to be [load]ed. (It takes longer time than the [source] or [load] you'd normally find in such entries, and there are more ways in which it can go wrong, but there is no difference in principle.) Compiled commands are created on a per source-file basis. ---- [Paolo Noli]: A little question: How to call a tcl commands from inside a c funcion declared with the statement "ccode"? (I need this to implement a callback procedure.. but I think this can be an interesting tip for others people. :) ---- '''Instructions for installing critcl in an existing "traditional" (i.e. non-starkit) Tcl installation''' * Critcl is supplied as a Starkit; but perhaps you would like to use it with a traditional Tcl distribution, e.g to use your collection of extensions * these instructions are console commands for a Linux/Unix system. Please adapt for other platforms. * download the [tclkit] binary for your platform, and the starkits critcl.kit, and [sdx].kit * follow the instructions for installing tclkit (you can remove it at the end if you wish) * check that tclkit and critcl.kit work correctly: run the command tclkit critcl.kit test-critcl.tcl * (where tclkit is in your command path and critcl.kit, test-critcl.tcl are in your current directory; the file test-critcl.tcl is listed below) * you should see the console output "three times 123 is 369" * now use sdx.kit to unpack critcl.kit: run the command tclkit sdx.kit critcl.kit * (where tclkit is in your command path and sdx.kit, critcl.kit are in your current directory) * a directory critcl.vfs will be created that holds the contents of critcl.kit: cd to this folder's lib subfolder cd critcl.vfs/lib * ensure that you are the root user and that the folders and their contents have appropriate ownership * copy the contents of this folder to the lib folder of your Tcl installation, and then cd there cp -a * /path/to/tcl/lib cd /path/to/tcl/lib * open the file app-critcl/critcl.tcl in a text editor and do the following... * ... in the first non-comment line, 'exec tclkit $0 ${1+"$@"}', replace 'tclkit' with 'tclsh' * ... find the line with 'Wikit::init' and comment it out (alternatively, install the files from the critcl.vfs/doc folder somewhere on your machine, and specify the path in the 'file join' statement) * make the file app-critcl/critcl.tcl executable and symlink it from a directory in your PATH, e.g. ln -s /path/to/tcl/lib/app-critcl/critcl.tcl /usr/local/bin/critcl * delete your Critcl cache directory ~/.critcl so the next command will test the correct functioning of the compiler * now test this installation of Critcl: tclsh test-critcl.tcl * as before, you should see the console output "three times 123 is 369" * once again delete your Critcl cache directory ~/.critcl, and now test the command-line critcl tool (which provides useful command-line options) critcl test-critcl.tcl * if this is successful, you can now use Critcl from your existing Tcl installation, and you no longer need the tclkit or starkit files to use Critcl The file test-critcl.tcl: lappend auto_path . package require critcl critcl::cproc triple {int i} int { return i * 3; /* this is C code */ } puts "three times 123 is [triple 123]" ---- At present (June 2006), there is a severe bug [http://www.equi4.com/cgi-bin/cvstrac/critcl/tktview?tn=4,4] in the pkgIndex scripts generated by the [Critcl] package builder. These scripts will, if they are at all ''installed'' in your system (it doesn't matter whether you required them), evaluate the command package provide critcl 0.0 and that blocks loading any functional form of critcl. In order to make it work, you may have to do something like the following trickery instead of a normal [package require]: # Save [package ifneeded] scripts for functional versions of critcl. set cmds "" foreach ver [package versions critcl] { if {$ver ne "0.0"} then { append cmds [list package ifneeded critcl $ver [package ifneeded critcl $ver]] \n } } # Forget critcl package declarations package forget critcl # Restore useful critcl package declarations eval $cmds # Now load a working package package require critcl ---- [Sarnold] had problems with whitespaces in directory names on Windows XP. Here is the trace : gcc -r -nostdlib -DUSE_TCL_STUBS {-IC:/Program Files/msys/1.0/home/St‚phane ARNOLD/.critcl/Windows-x86} -o C:/Program Files/msys/1.0/home/St‚phane ARNOLD/.critcl/Windows-x86/v034_1e3ab721192aa1df5ef708c68f019a0b_pic.o C:/Program Files/msys/1.0/home/St‚phane ARNOLD/.critcl/Windows-x86/v034_1e3ab721192aa1df5ef708c68f019a0b.c gcc.exe: Files/msys/1.0/home/St‚phane: No such file or directory gcc.exe: ARNOLD/.critcl/Windows-x86/v034_1e3ab721192aa1df5ef708c68f019a0b_pic.o: No such file or directory gcc.exe: C:/Program: No such file or directory gcc.exe: Files/msys/1.0/home/St‚phane: No such file or directory gcc.exe: ARNOLD/.critcl/Windows-x86/v034_1e3ab721192aa1df5ef708c68f019a0b.c: No such file or directory ---- [Category Critcl]