Keith Vetter

mailto:[email protected]

I've been programming in tcl/tk since 1993. I have several tcl/tk projects in the public domain which I'm maintaining, some more actively than others.

Tcl/tk is my language of choice for throwing together short, fun little graphical programs. I seem to have a ton of these lying around, and I'm slowly digging them out, converting them from whatever prehistoric version of TK they were originally written in, and posting them here. I hope you like them.

Project Date What
TkFibs 1994-10-10 a GUI to FIBS--the First Internet Backgammon Server
tcl-only datefield 2002-02-20 a tcl only clone of iwidgets datefield widget. This is now part of tklib
sockspy version 2.0 of Tom Poindexter's ethernet sniffer program
klimb 2001-07-25 a really cool bike route planner
Dragon Curve 2002-05-09 draws the Dragon Curve fractal
Octabug 2002-06-07 draws an Octabug which morphs from a octahedron into an open cuboctahedron and back.
TkTopoMap 2002-08-22 fetches and displays USGS topomaps or aerial images for any location in the US.
Why manhole covers are round 2002-09-22 fun animation which amplifies one answer to this question.
3D Maze 2003-04-07 based on maze generator2, lets you create and interactively solve 3D mazes.
SpiroGraph 2002-09-30 a program that simulates the kid's drawing game of SpiroGraph. It draws epicycloids and hypocycloids and lets you tweak various parameters. WARNING: it can become addictive drawing the different shapes.
TkChallenger 2002-10-09 a tcl/tk game that lets you solve the Challenger puzzles that you find in the daily paper.
TkPente 2002-10-15 a two-player version of the popular Pente game.
TkOverload 2002-10-18 another two-player logic game.
Dot to Dots 2002-10-21 a dot-to-dot game that I wrote for my 3-year old.
Pass by reference 2002-09-19 syntactic sugar to get automatic pass by reference calling convention
Semaphore Flag Signalling System 2002-11-05 lets you play with semaphore flags
Maritime Signal Flags 2002-11-05 lets you play with both semaphore flags and with signal flags
Fractal Mountains 2002-11-11 draws mountain landscapes using fractals
Møiré Patterns 2002-11-14 another short graphical program, this one lets you play around generating various Moiré patterns
Mandelbrot 2002-11-19 more fractals, this time the Mandelbrot fractal
Juggler 2002-11-25 cute little program showing someone juggling up to 20 balls
TkMapper 2003-01-15 tired of Yahoo maps being only 400x400 in size? This program grabs neighboring Yahoo maps and tiles them on the screen letting you build up a fuller map of an area.
Bitmap Editor 2002-01-16 a simple program to edit tcl/tk bitmaps
a triangle puzzle 2003-01-26 graphic visualization of a classic triangle counting puzzle
TkRose 2003-01-30 draws rosette figures
Morley's Miracle 2003-02-07 a whizzlet visualizing the Morley's Miracle theorem
Bulging Line Illusion 2003-02-07 an optical illusion
Hilbert Curve 2003-02-10 a whizzlet drawing the Hilbert plane-filling curve
Buffon's Needle 2003-02-18 a whizzlet showing how you can estimate pi (?) by dropping needles
3 Triangles 2003-02-18 another whizzlet about three equilateral triangles
tkAtaxx 2003-02-19 an implementation of the popular Ataxx arcade game
Polyhedron Nets 2003-03-06 draws polyhedron nets, 2-D unfolding of a 3-D solid that you can print, cut out and fold to create polyhedron models.
Cubic Splines 2003-03-07 routine (w/ demo) to generate a cubic spline curve from a set of control points
Arrow buttons 2003-03-12 buttons with bitmaps of arrows in four directions
Drawing rounded polygons 2003-03-19 applied the ideas found in Drawing rounded rectangles to any polygon.
Canvas Rotation 2003-03-19 routines to rotates items on a canvas. Works well for polygons and lines but not ovals or text.
Named Colors 2003-03-21 displays all the colors Tk knows the name for (for those who don't have xcolors)
tkGoldberg 2003-03-21 a really fun Rube Goldberg whizzlet
Regular Polygons 2 2003-03-24 a generalization of Regular Polygons to support -start and -extent parameters
3D Hilbert Curve 2003-04-07 like Hilbert Curve but in 3 dimensions
Playing Card Images 2003-04-25 image data for playing cards
Scat 2003-04-25 play the card game scat against the computer
Falling Marbles 2003-04-29 animation of marbles falling down a peg board
Rain Storm 2003-05-04 simulates rain drops on a window
Lissajous Figures 2003-05-09 draws Lissajous figures
Puzzle Blocks 2003-05-12 move blocks to solve a puzzle
Video Poker 2003-05-28 lets you play Jack or Better video poker
Eliminator 2003-05-31 a moving ball puzzle game
Gem Game 2003-06-04 another puzzle game
Triangle Madness 2003-07-09 a visualization of some interesting properties of a triangle.
Square Root 2003-07-14 various ways to calculate a square root
Hack-O-Matic 2003-09-03 a visual binary editor written as a challenge
Printing text files under Windows 2003-09-10
Variable versus a Global Array 2003-09-14 thoughts on global variables
TkMines 2003-09-24 updated version of Tk Minesweeper
Widget Configure 2003-09-24 a debugging tool to interactive configure a widget
I love foreach 2003-09-29 why the foreach command is beautiful
Starfield 2003-10-06 another starfield animation
Collapse 2003-10-31 yet another arcade type game
Pastel Colors 2003-11-06 picks random pastel colors
Wiki History Diff 2003-11-07 does diffs on back versions of wiki pages
Word Jumble 2003-11-11 an anagram game
Pig Latin 2003-11-12 translates text into pig latin
SkipList 2003-05-15 a tcllib module that implements skip lists
SkipList Demo 2003-11-21 a demo on how skip lists work
Fern Fractal 2003-12-01 draws the Barnsley's Fern fractal
A Very Simple Weather App 2003-12-03 simple app showing current temperature
A Simple Fan Animation 2004-01-30 an animation of a rotating fan
Parsing XML 2004-03-01 yet another xml/html parser, this one in pure tcl
Parallel Geturl 2004-03-06 how to efficiently download lots of web pages
Azimuth Plotting 2004-03-10 help in locating benchmarks
Universal Transverse Mercator 2004-04-15 conversions to and from UTM coordinates
Print Area Selector 2004-03-31 control to select an area of a canvas to print
Convolutions 2004-05-20 fun visual affects
Following Redirects 2004-06-18 a better way of handling http redirects
Tic Tac Toe 2004-09-10 can you guess what this is?
Lights Out 2004-09-10 a one-person puzzle
Rush Hour 2004-09-13 get the red car out of the traffic jam
Word Search 2004-09-16 find words hidden in a grid of letters
A simple Font Viewer 2004-10-22 displays all fonts on your system
Dynix2RSS 2004-11-26 produces an RSS feed for all your checked out library books
TriPeaks Solitaire 2004-11-29 the TriPeak solitaire game
Can You Read This? 2004-12-18 Deos letter oredr matter?
WAV Dump 2005-02-28 Dumps out info about wav audio files
XML Tree Walking 2005-03-21 Walks an XML dom tree built with tdom
My House 2005-06-15 Can you find your house?
BMP Dump 2005-09-22 Dups out info about bmp image files
Hold'Em Solitaire 2005-10-26 A one-person Texas Hold'em diversion
Simple Tktable 2005-10-27 A simpler replacement of tktable for simple tables
3d Matrix Inversion 2005-11-02 routine that inverts 3x3 matrices
Labyrinth 2005-11-18 a version of Junior Labyrinth board game
Smallest Enclosing Disc 2005-11-21 Another geometric algorithm
The Classic 15 Puzzle 2005-12-07 guess
N-Puzzle 2005-12-10 Generalization of the 15-puzzle to any size
Animated Circles 2005-12-13 fun little visual animation
Wavy Text 2005-12-13 Animates some arbitrary text
Mind Reader 2005-12-15 A little program proving the tcl can read minds
Kandinsky Dance 2005-12-24 An animation of figures based on a painting by Wassily Kandinsky
Spotlight 2006-01-06 Shines a spotlight on an image
Magnifying Glass 2006-01-06 Aims a magnifying glass at an image
Colliding Blocks 2006-01-13 A fun little arcade style game
Lights On 2006-02-09 A game where you have to connect wires to light every node
Ring Master 2006-02-11 puzzle with rotating numbers around three rings
Capturing Multiple Screens 2006-02-13 package to capture screens larger than the display
Shadow Photo 2006-03-01 displays an image with nice looking shadow border
Photo Gallery 2006-03-16 shows a gallery of images which you can dynamically resize
Montana Solitaire 2006-04-28 another solitaire card game
Black Box 2006-05-09 plays the game Black Box
Another Font Chooser Dialog 2006-06-23 my version of a font chooser dialog
Dithering 2006-07-22 some dithering techniques and examples
Gradient Spheres 2006-08-16 using gradients to create sphere shapes
Geneva Drive 2006-08-24 animation of a Geneva Drive mechanism
Vanishing Child 2006-08-28 A visual conundrum
Gear Animation 2006-08-30 Animates interlocking gears
Nice Numbers 2006-09-01 Two similar routines useful with graphs
Reading BMP image dimensions 2006-09-06 pure tcl routine to read BMP image dimensions
Chinese Checkers 2006-09-06 a version of the game chinese checkers
Bulging Square Illusion 2006-09-08 an optical illusion
Ribbon Graphs 2006-09-27 turning 2D line graphs into sexy 3D graphs
Pulsing Squares 2006-10-04 an optical illusion
Benford's Law 2006-10-11 a visualization of the counter-intuitive Benford's Law
Word Chain 2006-10-12 computes cat-cot-cog-dog word chains
Dice 2006-10-21 draws pretty playing dice
Cubic Function Explorer 2006-12-18 plots the graph of some cubic equations
Unzip in tcl 2007-01-04 a simple tcl-only version of unzip
Crazy Eights 2005-01-11 plays the card game Crazy Eight's
NOAA Weather Forecast 2007-01-23 displays the weather forecast from NOAA
Crossword Puzzle Builder 2007-02-08 lets you create grids for crossword puzzles
Solving Logic Puzzles 2007-02-09 solves one type of logic puzzles
Cubic equation 2003-02-26 created the page, but I can't claim credit for the code
A Hypertext Help System 2007-06-27 a nice, tcl only help system
tclTiger 2007-07-08 interface to the TIGER GIS dataset from the US Census Bureau
Image Fading 2007-09-10 hack to fade two images together
Rotated Text Font 2007-09-17 another way to get rotated text
Arbitrary Rectangle Selection 2007-10-12 grabs any (including any angle) rectangular area of a canvas
Text2PDF 2007-10-16 package for converting text into PDF
Parsing PDF 2007-10-20 code to parse and display PDF document and page information
Celtic Braid 2007-11-17 draws an inter-woven pattern reminiscent of a Celtic braid
Project Euler 2008-01-25 a web site [1 ] with a series of really fun programming challenges
Scotch Yoke 2008-03-01 animation of a Scotch Yoke, converting linear motion into rotary motion
Tile Table 2008-03-21 yet another table widget, this one using tile's treeview widget
Grid Debugger 2008-04-09 helps you solve grid layout problems
Tk Robots 2008-04-25 plays the old UNIX robots game
High Score Package 2008-04-29 package for showing, adding to and saving high scores for a game
Tk Robots2 2008-04-29 enhanced version of Tk Robots
WhenIdle 2008-05-06 a way to run background commands when user is really idle
VS Project List Editor 2008-07-09 lets you edit Visual Studio's project list
Nonogram 2008-07-28 lets you solve nonogram logic puzzles
Time Picker 2008-10-08 an interesting way to pick times
GridLines 2008-12-30 another way of solving grid layout problems
Canvas Annotations 2009-04-15 nice looking, moveable annotations for a canvas
TkAsciiArt 2009-07-27 converts images into ASCII text
Tk Dali Clock 2009-08-31 tk version of character morphing Dali clock
CryptoAid 2009-10-10 tool to help you solve cryptograms
TreeView Tooltips 2009-11-07 how to get tooltip events for a ttk::treeview widget
Cribbage Crib Aid 2009-02-18 tool to help determine best discard in cribbage
CheckedListBox Widget 2010-03-24 multi-column list of checkboxes
ChooseDir 2010-04-11 a better looking version of tk_chooseDirectory
Extensions to Plotchart 2 2010-04-20 Another extension to Plotchart for ribbon x-y graphs
Pythagoras Tree 2010-06-02 A fractal constructed from squares
Slippy Map Demo 2010-07-05 How to use tcllib slippy module to show street maps
GPX 2010-07-08 module to extract information from GPX (GPS eXchange) files
Word Clock 2010-07-22 displays time in English text
Mormon Porn 2010-09-10 lets your mind turns innocent, albeit racy pictures into a nudie picture
Line Simplification 2010-12-17 demo of the Douglas-Peucker line simplification algorithm
Integer Partition 2011-04-01 enumerates all integer partitions of a given number
Bubble Letters 2011-08-08 transcribes text into unicode circled letters
CPU Monitor 2013-03-08 visually shows activity for each cpu on your machine
Nominatim Demo 2013-03-12 how to use tcllib's geocoding Nominatim module
Celtic Knot 2013-05-15 draws ornamental Celtic Knots
Reading WEBP image dimensions 2013-06-01 pure tcl routine to read WEBP image dimensions
EpubCreator 2014-03-14 command line tool for creating an epub from a single file
EpubDump 2014-03-14 displays the metadata associated with an epub
Gmail Filters 2014-04-08 parse Gmail filters into csv format
Flow Colors 2014-04-23 a simple yet addictive puzzle game
PNG Dump 2015-02-16 displays detailed information about the chunks comprising a png image
PNG Decoder 2015-02-16 tcl only png decoder
Penrose Tiling 2015-12-01 play with Penrose non-periodic tiling of the plane
1010! 2016-03-25 tcl version of the popular 1010! game
Divisible by 7 2016-04-18 simple, graphical toy to determine if a number is divisible by 7
Image Compare 2016-04-26 way to visually compare two images with a sliding bar between them
Rubik's Cube Timer 2016-05-22 tool for timing Rubik's Cube solves
Image Sizes 2016-05-25 command line tool for displaying the size of images
Photo Crop 2016-06-13 tool to help crop images to 4x6 ratio
Continued Fraction 2016-06-15 displays the continued fraction for any expression
Image Viewer 2016-06-16 a simple, cross-platform image viewing tool
Photo Album 2016-07-22 a way to lay out photos emulating a photo album
Super SymDoodle 2016-11-22 extending A symmetric doodler to have multiple axes
string mapx 2017-08-10 like string map but allowing the match to use regular expressions
Clock of Clocks 2017-09-09 a clock animation using smaller clocks as pixels
Solomon's Knot 2017-04-07 an updated version of my Celtic Braid allowing for more intertwining loops
@decorators 2018-05-03 a tcl implementation of Python's decorator syntax
Centered Coordinate System 2018-06-04 a snippet to move a canvas's origin to the middle of the widget
Impossible Triangle 2018-06-04 draws an Impossible Triangle figure
Tip #288 2018-08-15 my tcl implementation Tip 288 -- Allow "args" Anywhere in Procedure Formal Arguments
Tip #508 2018-08-15 my tcl implementation Tip 508 -- New subcommand [array default]
ao3 2018-08-31 a scripted interface to the fan-fiction site Archive of Our Own
ao3ToEpub 2018-08-31 a script that uses ao3 to download stories from fan-fiction site Archive of Our Own and turn them into epubs
Enhanced Expression Syntax 2018-09-26 a tcl-only implementation of Tip 282.
FamFamFam Demo 2019-01-03 displays all the icons in the FamFamFam icon set
Spider Go 2019-01-07 a variant of Spider Solitaire with six columns and only King through 8
Magic Squares 2019-01-18 enumerate all unique 4x4 magic squares
Filter Image fun 2019-01-24 tool for some simple filtering of an image
Pretty Html 2019-03-01 an HTML formatter
Razzle Dazzle 2019-04-24 a tcl version of the Razzle Dazzle carnival game
Multi-column Listbox with Button 2019-05-17 a multi-column list box with the first column acting like a button
Text Spinner 2019-10-01 package that provides 50+ types of text spinners
OpenSky API 2019-10-04 scripting interface to OpenSky's live airspace information
OpenSky App 2019-10-17 an application displaying live airspace info using the OpenSky API
Jeopardy 2019-11-06 Play the tv game show Jeopardy

Hey Keith, thanks for sockspy. I used the starkit and for the very first time I could understand its use and see how cool it was in Windows. Thanks for all the hard work! --Ro

Been submitting your whizzlets to sdarchive and adding screen dumps, last one is the delightful "Juggler" - I hope that's ok with you... -jcw


LV Thank you so much for all your program contributions. It is developers like you which make Tcl such a fun community.

MG Hey Keith, just wanted to add my thanks for all the code you've added to the Wiki. I've used several of them in the last few days and saved a lot of time (and have ended up with better looking widgets than I'd have likely made on my own), so thanks :)