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