Tcl/Tk Software Overview

Future Lab provides software built using Tcl/Tk (shortened to Tcl in this documentation) under the terms of the General Public License (GPL). For a complete review of these concepts, refer to:

- GPL software and support
- Our values

These Tcl libraries and applications will run under many platforms including Unix/Linux/BSD, MacOS and Windows. Future Lab GPL software for Tcl is currently built using Tcl version 8.4.9.

I am in the process of constructing the Tcl documentation so there will be some missing pieces for the time being.

The Tcl software contains similar libraries and API's that the C version of the Future Lab GPL software has. The GPL applications and API's in the Tcl version are also modeled after the C version although some of the Tcl applications are graphical.

Future Lab GPL software is like building a house. Everything is built upon the foundation and many pieces interconnect. For this reason, a natural drawback is that pieces cannot easily be removed from the software.

Most applications will be offered in a single user version and a client/server version although the current applications and libraries are for single user only. The client/server version of the Tcl applications will be built using the TCP socket interprocess communication (IPC) method and the built-in Tcl socket.

Future Lab Tcl software is distributed in various compressed forms for different operating systems.

# Differences Between the C and the Tcl Versions

Defines in the C code that are normally found in include files have been converted to Tcl constants. Tcl natively has no provision for constants so they have been added to the Future Lab software. The implementation of constants was taken from here. This method has been successful with one exception:

- there is no concept of scope to constants (all are global)

I have placed constants which are required by more than one module into Tcl files which I call definition files.

Since every variable in Tcl is a string of no size limits (except for memory) with automatic garbage collection, string memory allocation is not required. In addition, all code that calculates the size of a string before allocation is also not required.

The C code uses the int data type to support boolean operations. Tcl has no data types but does support boolean operations in conditional statements. I have used the constant zero (0) to represent false and (1) to represent true in Tcl procedures. I could have defined TRUE and FALSE constants but Tcl requires the global declaration in procedures for everything outside of the procedure.

The C code contains functions that return a character array through a call by reference parameter although the function does not actually return any value. Since Tcl has full support for returning a string from a procedure, any C function that does not return an explicit value but rather returns a character array value through a call by reference has been changed to a procedure returning a string.

Since Tcl has no ability to create structs or records all data types that are C structures have been created as Tcl lists or arrays.

The C version sometimes excludes module global variables, struct members or entire functions by using pre-processor directives. Since Tcl has no ability to selectively exclude code in procedures, I have chosen to always include these items in the Tcl code along with placing conditional statements which will cause an error to be returned in cases where the procedure is not appropriate.

Tcl has no ability to hide procedures from other modules and procedures so unfortunately, all procedures are callable even ones that are only used inside a specific module.

This next section will briefly describe the GPL modules.

# Library Modules

The foundation of our GPL software is the library. These library modules are:

- Tcl Non-graphical Library Modules
  - application initialization/notification
  - common code definition file
  - math conversions
  - date/time conversions
  - directory scanning
  - file/channel I/O
  - fixed-point math
  - local/personal logger
  - logging manager
  - miscellaneous
  - string parsing
  - path split and join
  - manage tcl preference files
  - specific to tcl
  - standard/main definition file
  - weather conversions
- Tcl Graphical Library Modules That Require Tk
  - cut/copy/paste
  - find dialog
  - font dialog
  - goto line number dialog
  - build menu entries to existing menu bar
  - build menu bar
  - choose path dialog
  - text widget routines
  - text widget print module for Windows
  - display and remove a popup window

# Database Modules

This category consists of the database engine (called Bbuuzzb) module and interface API modules. The database engine is based on variable field/record length and typeless data. The following modules are included:

- database command definition file
- Bbuuzzb engine
- catalog management
- configuration management
- database sort
- fixed-point get/put
- error code translation
- error/send/reply code definition file
- database ASCII import API

# Tcl Applications

Before attempting to run any of the Future Lab Tcl applications, make sure you understand the source directory structure. You should also review the guide to running the Tcl applications.

Goto Top | Future Lab Home | Contact Webmaster | Feedback

Copyright © 2005-2008 Future Lab, Last Updated Sep 01, 2008