ARCHITECTURE&CONCEPTS
The system consists of two main layers, as seen in the figure below, plus a support layer containing
general packages the system uses during operation.
+----------------+
|Applications |
| critcl |
| critcl::app |
+----------------+
+----------------+
|Core Packages |
| critcl |
| critcl::util |
+----------------+
+----------------+
|Support Packages|
| stubs::* |
| md5, platform |
| ... |
+----------------+
[1] At the top we have an application built on top of the core packages, providing command line access
to the second and third usage modes, i.e. GeneratePackage and GenerateTEAPackage.
critclcritcl::app
[2] Below that is the core package providing the essential functionality of the system, plus various
utility packages which make common tasks more convenient.
critclcritcl::util
[3] Lastly a layer of supporting packages, mostly external to critcl.
md5 For this pure-Tcl package to be fast users should get one of several possible accelerator
packages:
[1] tcllibc
[2] Trf
[3] md5ccmdlineplatformstubs::containerstubs::readerstubs::writerstubs::genstubs::gen::initstubs::gen::headerstubs::gen::declstubs::gen::macrostubs::gen::slotstubs::gen::libREQUIREMENTS
To develop for critcl the following packages and applications must be available in the environment. These
are all used by the build.tcl helper application.
dtplite
A Tcl application provided by Tcllib, for the validation and conversion of doctools-formatted
text.
dia A Tcl application provided by Tklib, for the validation and conversion of diagram-formatted
figures into raster images.
Do not confuse this with the Gnome dia application, which is a graphical editor for figures and
diagrams, and completely unrelated.
fileutil
A Tcl package provided by Tcllib, providing file system utilities.
vfs::mk4, vfs
Tcl packages written in C providing access to Tcl's VFS facilities, required for the generation of
critcl starkits and starpacks.
DIRECTORYSTRUCTURE
Helpers
"build.tcl"
This helper application provides various operations needed by a developer for critcl, like
regenerating the documentation, the figures, building and installing critcl, etc.
Running the command like
./build.tcl help
will provide more details about the available operations and their arguments.
Documentation
"doc/" This directory contains the documentation sources, for both the text, and the figures. The
texts are written in doctools format, whereas the figures are written for tklib's dia(gram)
package and application.
"embedded/"
This directory contains the documentation converted to regular manpages (nroff) and HTML.
It is called embedded because these files, while derived, are part of the git repository,
i.e. embedded into it. This enables us to place these files where they are visible when
serving the prject's web interface.
Testsuite
"test/all.tcl"
"test/testutilities.tcl"
"test/*.test"
These files are a standard testsuite based on Tcl's tcltest package, with some utility code
snarfed from Tcllib.
This currently tests only some of the stubs::* packages.
"test/*.tcl"
These files (except for "all.tcl" and "testutilities.tcl") are example files (Tcl with
embedded C) which can be run through critcl for testing.
TODO for a maintainers: These should be converted into a proper test suite.
Package Code, General structure
Package Code, Per Package
critcl
"lib/critcl/critcl.tcl"
The Tcl code implementing the package.
"lib/critcl/Config"
The configuration file for the standard targets and their settings.
"lib/critcl/critcl_c/"
Various C code snippets used by the package. This directory also contains the
copies of the Tcl header files used to compile the assembled C code, for the major
brnaches of Tcl, i.e. 8.4, 8.5, and 8.6.
critcl::util
"lib/critcl-util/util.tcl"
The Tcl code implementing the package.
critcl::app
"lib/app-critcl/critcl.tcl"
The Tcl code implementing the package.
critcl::iassoc
"lib/critcl-iassoc/iassoc.tcl"
The Tcl code implementing the package.
"lib/critcl-iassoc/iassoc.h"
C code template used by the package.
critcl::class
"lib/critcl-class/class.tcl"
The Tcl code implementing the package.
"lib/critcl-class/class.h"
C code template used by the package.
stubs::*
"lib/stubs/*"
A set of non-public (still) packages which provide read and write access to and
represent Tcl stubs tables. These were created by taking the "genStubs.tcl" helper
application coming with the Tcl core sources apart along its internal logical lines.
critclf
"lib/critclf/"
Arjen Markus' work on a critcl/Fortran. The code is outdated and has not been
adapted to the changes in critcl version 3 yet.
md5md5cplatform
These are all external packages whose code has been inlined in the repository for easier
development (less dependencies to pull), and quicker deployment from the repository
(generation of starkit and -pack).
TODO for maintainers: These should all be checked against their origin for updates and
changes since they were inlined.