Tcl Source Code Libraries

General Programming Philosophy

All WebSubmit CGI scripts and support code are written in the Tool Command Language (Tcl).  The code is designed to be used with Tcl interpreters version 8.0 or greater, since previous versions of the language did not support namespaces.  The WebSubmit Tcl library consists of a group of functionally-distinct packages.  Each package is encapsulated within its own namespace to prevent variable and procedure name collisions, and to allow more flexibility.  Future developers can add to the WebSubmit library by either creating new packages and including them, or by modifying existing packages.

Variable Naming Conventions
In an effort to make the code more self-documenting, variable naming conventions were adopted.  Tcl only supports three basic types of variables: strings, lists, and arrays.  The following conventions have been utilized throughout the code:

We attempted to follow these conventions throughout, although there are certainly instances where internal consistency is less than perfect.
 

Namespace Hierarchy
Namespaces are organized hierarchically and are all nested beneath a master (root) namespace called webSubmit.  For example, the namespace corresponding to the utility package is called webSubmit::util.  Namespace names are correlated with the name of the Tcl file that contains the package.  Each package is named wsPackageName.tcl, and the namespace corresponding to this package is packagename.  In some cases, there are additional namespaces nested within a given package.  No consistent convention was adopted regarding the use of fully- vs. partially-qualified namespaces names.  In many cases, namespace imports were used to simplify coding, whereas in others, the fully-qualified names were used.
 

Package File Structure
Each package is organized in a similar fashion.  The primary namespace definition lies at the top of the package. Namespace imports, namespace exports, and variables definitions are all made within this section of code.  The remainder of the package contains the definitions of procedures within this namespace.
 
 

Package Descriptions

webSubmit.tcl
Package name: webSubmit
Namespace: webSubmit
Description: This package contains primarily variables associated with the function of WebSubmit in general, as well as some global namespace imports and other supplementary code.

wsUtil.tcl
Package name: wsUtil
Namespace: webSubmit::util
Description: A collection of utility routines of general use throughout all packages in WebSubmit.  These routines typically perform functions such as variable or file manipulation.
Procedure Information

wsDatabase.tcl
Package name: wsDatabase
Namespace: webSubmit::database
Description: All routines related to database manipulation are contained in this core package.
Procedure Information
 

wsAuth.tcl
Package name: wsAuth
Namespace: webSubmit::auth
Description:  The WebSubmit authentication package.  Routines in this package are primarily used to establish a user's identity at the outset of a session.
Procedure Information
 

wsForms.tcl
Package name: wsForms
Namespace: webSubmit::forms
Description:  This package collects routines related to automatic form generation, as well as session management.
Procedure Information
 

wsNetwork.tcl
Package name: wsNetwork
Namespace: webSubmit::network
Description:  Remote execution of commands via SSH is performed using routines in this package.  There are also supplementary procedures that execute simple, frequently-used commands on remote systems.
Procedure Information
 

wsCgi.tcl
Package name: wsCgi
Namespace: webSubmit::cgi
Description:  These routines supplement the cgi.tcl library routines and provide functionality specifically needed by WebSubmit.
Procedure Information
 

wsMaster.tcl
Package name: wsMaster
Namespace: webSubmit::master
Description:  This package collects all procedures related to the construction of the master page.
Procedure Information

 
wsLoadLeveler.tcl
Package name: wsLoadLeveler
Namespace: webSubmit::loadleveler
Description:  Package containing procedures related to interaction with the Load Leveler batch queuing facility.  This includes code for submission of jobs, construction of job control files, and other miscellaneous utilities.
Procedure Information