|  | 
   
 |   |  |   
  
    | critcl_devguide(n) | C Runtime In Tcl (CriTcl) | critcl_devguide(n) |  
 critcl_devguide - Guide To The CriTcl Internals Be welcome to the C Runtime In Tcl (short: CriTcl),
    a system for embedding and using C code from within Tcl
    [http://core.tcl-lang.org/tcl] scripts. This document is a guide for developers working on CriTcl, i.e.
    maintainers fixing bugs, extending the package's functionality, etc. Please read 
  [1]CriTcl - License,[2]CriTcl - How To Get The Sources, and[3]CriTcl - The Installer's Guide first, if that was not done already. Here we assume that the sources are already available in a
    directory of the readers choice, and that the reader not only know how to
    build and install them, but also has all the necessary requisites to
    actually do so. The guide to the sources in particular also explains which
    source code management system is used, where to find it, how to set it up,
    etc. Note that the sources of CriTcl, should the reader have
    gotten them, also contain several examples show-casing various aspects of
    the system. These demonstration packages can all be found in the
    sub-directory "examples/" of the sources. Lots of smaller examples can be found in the document Using
    CriTcl, an introduction to CriTcl by way of a of examples. These focus
    more on specific critcl commands than the overall picture shown by the large
    examples mentioned in the previous paragraph. 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.
      Generate Package and Generate TEA Package. 
  [2]Below that is the core package providing the essential functionality of
      the system, plus various utility packages which make common tasks more
      convenient. 
  [3]Lastly a layer of supporting packages, mostly external to critcl. 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. 
  dtpliteA Tcl application provided by Tcllib, for the validation and conversion of
      doctools-formatted text.diaA 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.fileutilA Tcl package provided by Tcllib, providing file system utilities.vfs::mk4,
    vfsTcl packages written in C providing access to Tcl's VFS facilities,
      required for the generation of critcl starkits and starpacks. 
  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 
  
  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. 
  md5md5cplatformThese 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. Jean Claude Wippler, Steve Landers, Andreas Kupries This document, and the package it describes, will undoubtedly
    contain bugs and other problems. Please report them at
    https://github.com/andreas-kupries/critcl/issues. Ideas for
    enhancements you may have for either package, application, and/or the
    documentation are also very welcome and should be reported at
    https://github.com/andreas-kupries/critcl/issues as well. C code, Embedded C Code, calling C code from Tcl, code generator,
    compile & run, compiler, dynamic code generation, dynamic compilation,
    generate package, linker, on demand compilation, on-the-fly compilation Copyright (c) Jean-Claude Wippler
Copyright (c) Steve Landers
Copyright (c) 2011-2024 Andreas Kupries
 
  Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc.
 |