This site contains things produced by Pat Thoyts. For some of the software projects, this may not be the primary site in which case you should follow the links to ensure you have the most up to date version.

There is a blog here with various random thoughts on Tcl, Tk and Git mostly.

Canoeing guides

Before my children were born I did a lot of kayaking around Europe and recorded details about our trips. These became written up as Pat's Guides. The canoeing guides are here.


The notes section contains various memos and howtos for this and that.



I am now using Git a lot for managing software revision control for myself and also my own modifications to third-party projects with git-cvs mirroring.There is a public git repository for various projects that I have written or forked. Along with a few that are available at github.

I've since taken on maintentance of git gui since the original author has been running out of time. This is hosted at and included in the core release of Git.


I've written about my experience Using Mercurial with Tcl and Tk. As a primarily Windows developer it is mostly really good and I think I would be quite happy to make Mercurial my main revision control system if it wasn't for Git.

Here are some software projects that I have released. The majority are Tcl extensions.

Tcl maintenance

I have been a Tcl and Tk maintainer since March 2003, focusing on Windows support. In this time I've authored a few Tcl Improvement Proposals (TIPs): 120, 130, 135 135 150

I'm also one of the Tcl standard library maintainers. In this project I deal with the crc, uuencode, yencode, smtpd, dns, ntp, md4, md5, sha1, rimepd SASL, and uuid modules. Reviewing the list there seems to be a clear trend towards network protocols and cryptographic algorithms.

On the Tk side, I have been helping to add themeing support to Tk through the tile project. Chiefly doing the XP and winnative support.

TclKit: bleeding-edge Windows builds

See here for some details on building recent versions of tclkit using Tcl and Tk 8.5 with MSVC++ 6.0 and Visual Studio 2005 and versions of tclkit for Vista x64 and Win7. There are also daily builds for linux and windows and various other goodies.

tclftd2xx - Tcl FTDI D2XX interface

This package provides Tcl access to the FTDI USB device driver. It permits the binding of Tcl channels to USB devices that use this chip.

tclxmppd - a Tcl XMPP server

I am currently developing the pieces of a Tcl XMPP server (ie: Jabber). See RFC 3920 and RFC 3921.

Using X-Chat with #tcl

An X-Chat plugin to trim the bridge nickname prefixes from #tcl.

Running Tcl scripts as NT services

I have a pre-built version of the tclsvc package available as This is built using MSVC++6 and Tcl 8.4 and includes the patch from the wiki. I am using it to run tclhttpd for this site. The original distribution of tclsvc is Sensus Consulting.

aMSN Single File Installation

A demonstration of aMSN wrapped as a starpack for Windows.


I have been using tkabber recently for messaging over the jabber network. I've also been using this to access the tcl chat on #tcl on using the jabber-irc gateway at My starkit version of tkabber including support for downloading the tkchat history and some other tkchat features can be downloaded from The tcler's chat plugin (sig) is available separately as well.

As of 24-Nov-2004 this tkabber includes support for downloading the history for the new Jabber-based tclers chat. Also the translation feature from tkchat has been converted into a tkabber plugin.

For tkabber we have a Babelfish plugin (sig) which adds a plugin menu item that gets babelfish to translate the current selection. We also have an AutoCorrect plugin (sig) which lets you define a set of common typing mistakes that will be corrected automatically in the chat entry field.


A video widget for Tk on Windows. This extension allows a Tk application to display the output of a web cam of a video file stream.

Asynchronous name resolution for Tcl

Tclresolver is a package which provide asynchrous name resolution for Tcl or Tk applications on Windows using a slave thread to perform the resolution.


A SOAP and XML-RPC implementation in Tcl. This project is hosted at SourceForge.


TclUDP is a cross-platform extension that provides UDP sockets for Tcl. This is used by the tcllib dns and ntp packages. Supports fileevents and ipv6.


This is a package for Windows that gives Tcl script access to structured storages. This package includes a Tcl virtual filesystem to simplify the use of these composite files. There is documentation for the storage package and for the virtual filesystem.


The winsend package is an attempt to provide the complete functionality of the Tk send command for Microsoft Windows platform. See the link for the rest - will eventually become TIP #150.

Tcl Random Number Generators

Implementation of some additional pseudo-random number generation algorithms for use in Tcl. There should be some documentation someplace.

OLE Application automation

To investigate adding automation to an application I produced a sample application AutoNotepad which is a automatable notepad-style editor. This requires WTL.


BrainScript is an ActiveScripting engine that interprets brainfuck code.

Creating and using COM components with gcc

A sample COM component that can be built using the mingw version of gcc-2.8.x for Win32. The component is written in C++ and the code includes a C++ client and a C client. The server uses a template class factory. The whole lot is provided as a tar file.

Pretty printing with emacs on Windows

A modified version of an old lisp file. This provides a set of menu items that will pretty-print your code and display it in GhostView for you to check and then print. w32-ps-print.el


A utility to check if a network interface is available or not.
e.g.: if [ `ifup ppp0` ]; then echo "PPP is UP"; fi
Also see ifchecking ppp0 5 for a Tcl/Tk version.


This is a emacs major mode for use in editing Unibasic files. This is a PICK dialect. The single emacs list file is unibasic.el


generate an MIT-MAGIC-COOKIE-1 for use with xauth. See the source.


short C program to find the address of the remote host and provide it for use in setting the DISPLAY environment variable upon login.

tcpdump -D patch

patch for tcpdump-3.3 that adds a -D option to dump the packet data as ASCII characters.