Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

The Deepwoods Software Model Railroad System contains several parts, most of
can be used independently or with other pieces of software.

Right now it contains several complete (but not necessarily finished!)

	1) A port of Tim O'Conner's older Freight Car Forwarding
	   system, written in a mix of (portable) C++ and Tcl/Tk -- it is
	   completely cross-platform.  Included is a program to create
	   the data files needed for this system.

	2) A Working Time Table creation program, also in a mix of
	   (portable) C++ and Tcl/Tk (but it needs LaTeX installed to
	   format the Time Tables). Like the Freight Car Forwarding
	   program, it is completely cross-platform.

	3) A pair scripts for computing focal distances, view area, and
	   scaling when taking pictures, coded completely in Tcl/Tk.

	4) A program for computing resistor values, also completely in

	5) A program to create computerized CTC dispather and/or 'tower'
        control panels that exist on a computer screen. Code for supporting a
        CMR/I interface can be generated, allowing the creation of programs
        that can interface to your trackwork using CMR/I interface boards
        using the CMR/I Tcl library, the Aztrax USB library, or use the
        LCC/OpenLCB library. This program can read in XTrkCAD layout files as
        an aid in creating the dispather control panels,
        6) A collection of Tcl programs to interface with a LCC network that 
        interface with various other control interfaces.

These programs are documented in the User Manual and all include their
own on-line documentation.

There are some other bits and pieces:

	There is a Tcl interface for talking to C/MRI nodes via a serial port
        (RS232). This is working and includes a version of the Universal Test
        Program in Tcl/Tk. 

	There is a Tcl interface for talking to Lenz XpressNet nodes via a
        serial port (RS232). This code has not been tested yet, since I have
        not yet gotten by Lenz XpressNet system up and running (I don't yet
        have all of the parts needed to do this).
        There is a Tcl library for interfacing with a LCC network. 

	There is also a collection of Tcl/Tk script modules that provide
various support for different things.  

The use of these additional code packages is described in detailed in
the Programming Guide documention, which abound with example code,
which is also included with the Programming Guide (a 'How To' sort of
guide) and Internals Manuals (detailed API reference).

The directory structure is pretty straight forward:

All of the C++ code lives under C++ (each C++ library includes its own SWIG
interface module), all of the Tcl code lives under Scripts, all of the on-line
help is under Help and all of the 'printed' documentation is under Doc. Under
the C++ directory are directories for the C/MRI module/library, the XPressNet
module/library, the XTrakCad parser module/library, and the C++ support
module/library for the freight car forwarder and time table programs. Under
the Scripts directory are directories for each of the main programs, as well
as directories for the various support packages. Under Help are the on-line
help files. Under the Doc directory are directories for the User and Internals
manuals, and the Programming Guide, plus a support directory. There are
BuildScripts and BuildData directories containing various propgrams and data
needed in the build process. 

Building from source

Building from source is straightforward.  This package uses the GNU Autotools: 
autoconf, automake, libtool, aclocal, and make.  First, you should run the 
bootstrap script and then the configure script:

mkdir Build
cd Build

Then you should be able to build and (optionally) install the package:

sudo make install

Building under Linux for CPU types x86_64/amd64 (64-bit), ix86 (32-bit), 
armv7l (32-bit ARM), and aarch64 (64-bit ARM), should work out-of-the-box, so 
long as you have these build pre-requisites installed:

gcc, g++, binutils, make, automake, autoconf, libtool, autotools-dev, 
libboost1.65-dev, libc6-dev, libstdc++-dev, libudev-dev, libusb-1.0-0-dev, 
tcl8.6-dev, tcllib, swig, bison++, zip, unzip, gettext, and doxyden-latex.

Other operating systems and/or CPU types

Building for/under other operating systems, such as MS-Windows or MacOSX, is a
little more complicated. Right now, the configure script will crash with an
error (unsupport operating system or CPU type). In order to build under other
operating systems or CPU types, you need to get or build a Tclkit for the O/S
and/or CPU type. Note: it is possible to crossbuild for MS-Windows under Linux
using Mingw's cross-build tools, but you need a MS-Windows tclkit, tcl8.6
development files (includes,, and libtcl86stub library),
MS-Windows dev tools for libusb 1.0 and boost, along with tcllib, swig, and
bison++ for the build host. Building nativly under MS-Windows using
Microsoft's C and C++ compilers is going to require re-creating the whole
build infrastrue from scratch, and you of course you need the build
pre-requisites (you may have to build some of these from source). Building
under MacOSX should be not much different from building under Linux, once you
have the Tclkit needed for MacOSX and the rest of the build pre-requisites.

The bigest hurdle needed for building is creating the tclkit.  A tclkit is 
just a special executable with a statically built version of the Tcl 
interpreter which includes a VFS (Virtual File System) containing Tcl's 
support libraries, along with the shared library for Tk and Tk's support 
libraries.  Additionally, the Tclkit needed for the Model Railroad System need 
to also include the Img library as well.  A base tclkit can be built with the 
kbskit package.  Under Linux/UNIX (including MacOSX) this is done like this:

git clone

and then run

cd kbskit
MAKEFLAGS=-j4 ./kbs.tcl -r install kbskit8.6

I am not sure if this can cross build a kit for MS-Windows -- I think it 
should, but you need to make sure it picks up the cross compiler.

Once the base kit is built, you need to add in the Img library.  This is done 
like this:

create a directory named something like 'tclkit-8.6.x-platform-Img1.4.x.vfs'. 
Replace the x's with the proper version numbers, and 'platform' with the 
platform name (eg win32, win64, macosx, linux-ppc, etc.).  Then create a 
subdirectory named 'lib' under this directory.  Then create a subdirectory 
named 'Img1.4.x' under the 'lib' subdirectory and copy the Img files under that 
directory.  It should look something like this:


Now bundle it up with sdx.kit:

# get a native kit to run on the host
cp .../kbsvq8.6-dyn tclkit
# get a target kit for the target
cp .../kbsvq8.6-dyn tclkit-runtime
# assemeble the kit
./tclkit .../sdx.kit wrap tclkit-8.6.11-x86_64-Img1.4.7.bin -runtime tclkit-runtime
# remove the extension (Linix/UNIX only)
mv tclkit-8.6.11-x86_64-Img1.4.7.bin tclkit-8.6.11-x86_64-Img1.4.7

Note: .../kbsvq8.6-dyn is the kit built by the kbskit package and will be
under kbskit/build<whatever>/bin. Note further: if you are cross building you 
will also need a *native* tclkit (there are *native* tclkits for linux included 
in the BuildData subdirectory of the Model Railroad System).

Once you have the target tclkit, you can copy it to the BuildData subdirectory
of the Model Railroad System and then edit the there and file in the root directory and look for these lines:

AC_MSG_CHECKING([Checking target tclkit])
case $target_os in 

Then in the case statement you need to change things, either remove the error,
and uncomment some lines and edit as needed or add a new case, using the
existing code as a guide. You might also need to look for these lines:

AC_MSG_CHECKING([Checking build tclkit])                                       
case $build_os in                                                              
And make similar edits, if your build enviroment was also unsupported.

It should be possible to now build the system, assuming you have all the 
necessary build requirements installed. Note to cross build you need to
pass the --host and --with-tcl options to the configure script to specify the
cross build target and cross-built tcl library. MacOSX might also need the 
--with-tcl option, depending on where the tcl 8.6 files are installed.


Libraries and programs for your model railroad







No releases published


No packages published