Tom's Programming Projects


These are most of the programs I've written over the past 17 years.  I've provided download links for many of them because they may be useful or entertaining.  I will not be liable for any bad things that happen as a result of what you download from this page, but if you have trouble with something just email me and I'll be glad to help you with it.  Note that all screenshot links will automatically open in new browser windows.

Licensing policy: These programs are free for your personal, non-commercial use, unless otherwise specified by an individual program.  Commercial use is subject to my approval, so please send me email at explaining what you want to do.

Anchors:

Windows Programs:


Name: iRacingTelem (still needs a real name)
Started: December, 2008
Description: A real-time telemetry analysis and visualization tool for the iRacing simulator. As you're driving in the iRacing simulator, this program will display (on an external USB7 7 segment display) the time difference between your current lap and your best lap to the nearest hundredth of a second. Fastest laps are automatically validated for integrity and made the new standard for comparison, stored in simple text files that are used to persist across sessions.

This program can also represent the time difference aurally, using a tone that varies in frequency. This allows an unconventional and interesting way of perceiving and comprehending change in time difference over time, which has the additional benefit of not requiring you to take your eyes off of the road. In practice, it takes significant getting used to and is not really a substitute for a numeric display, but it can still be useful in some situations.

Status: Usable, but not polished enough to release to the public yet.
Download: Not available.

Name: Keidoku
Started: January, 2008
Description: A simple text to image converter to enable reading on a cell phone. My cell phone is a simple Nokia with an excellent 240x320 display but very poor (J2ME) programming capability. I wanted to be able to view Japanese text on the go, but the phone doesn't make it easy to view text files and has no Japanese font. It does a great job viewing image files though, so I wrote this program. This program takes text copied and pasted into a textbox and generates a series of 1bpp PNG image files that are formatted to fit the 240x320 display exactly. This approach is simple, extremely space efficient, and makes it very fast and easy to view the text on the phone with perfect quality and no dependencies. No fonts or software need to be installed on the phone: just copy over image files into whatever directory structure you like.
Status: Usable, but not polished enough to release to the public yet.
Download: Not available.

Name: ACWatch
Started: July, 2003
Description: A program that facilitates interaction between MoodLogic software and the AudioTron networked MP3 player to let users generate a playlist based on a song.  Leave this program running on a PC which has your MP3 collection shared and the MoodLogic software installed.  Then, from the front panel of the AudioTron, you can choose a song in your collection and have a playlist generated automatically based on that song.
Status: Completed, usable, but hopelessly obscure. MoodLogic and the AudioTron are both discontinued products now and were never well known to begin with.
Download: Go to the ACWatch home page.  C++ source code is included.

Name: TAConf
Started: August, 2002
Description: A point-to-point audio and video conferencing program built for low latency and ease-of-use.  I was getting sick of having a delay of a few seconds when talking to someone with NetMeeting when my ping to that person was only 130ms, and the other programs I tried all had terrible audio quality and/or nasty user interfaces, so I wrote this.  It streams 16-bit 16kHz audio over the Internet using UDP packets and the excellent Speex codec.  Latency is low enough to not be noticeable in a conversation, given a good Internet connection between users (like a sub-100ms ping), and still quite good on a broadband-to-modem connection.  You can connect to as many people as your bandwidth can support.  Requires DirectX 8 or later.

TAConf supports real-time low-latency video using a DirectShow-compatible video capture device and any codec with Video for Windows support.  Very good results have been obtained with WMV9, XviD, and VP6 at 320x240, 15-30 fps, using bit rates from 20kbps to 200kbps.  Unlike most programs that support video, TAConf lets you control everything AND send full-size video to multiple people at the same time.  There is also a focus on efficiency which lets you make the most out of your available CPU power and bandwidth.

Status: Core functionality complete. Updated occasionally.
Download: Go to the TAConf home page.

Name: MIDICCI
Started: July, 2002
Description: A simple utility for adjusting two MIDI controllers at the same time by using the mouse.  It's easy: Choose a MIDI output device, choose one or two controllers to adjust, then drag the mouse around the main window.  I wrote this program mainly to experiment with controlling cutoff frequency and resonance simultaneously on the Roland SC-8850.  The source code for this program includes simple C++ classes I wrote to do MIDI I/O, registry I/O, and double-buffering with GDI.
Status: Completed, usable.
Download: midicci.exe (30K, program executable) - screenshot
midicci-source.zip (20K, C++ source code)

Name: tg3d
Started: November, 2001
Description: A second attempt at cool 3D stuff.  This time I'm using Direct3D 8.1, which is much cleaner than previous versions.  So far I'm just playing around.  The screenshots below show some interesting effects obtained by using a particle system and not clearing the framebuffer between updates.  Eventually I did some multitextured lightmaps and alpha blended texturing, but I don't have screenshots of it here...
Status: Development abandoned - need to switch to DX9 (or DX10?!) and start over!
Download: No download, just: - screenshot 1, screenshot 2, screenshot 3, screenshot 4

Name: tghex
Started: October, 2001
Description: A hex (and text) viewer built for speed, efficiency, and simplicity.  Since the 1980's I'd been using an old DOS program called LIST for all of my hex viewing needs.  I finally decided to write a Windows program with exactly the functionality I needed to do certain data analysis tasks.  I also wanted to try using memory mapped files, which worked out well.  tghex lets you load an unlimited number of files, of size up to 4GB each, without using more than a few hundred bytes of memory for each file.  You can instantly seek to any part of the file.  Also, you can easily flip between open files by hitting the space bar.
New: You can now view files in both hex and text views.  This makes the program especially handy for examining and searching large text files.
Status: Core functionality complete.  Updated occasionally.
Download: tghex.exe (40K, program executable) - screenshot

Name: Tom's Spectrum Analyzer
Started: January, 2001
Description: A program for capturing audio and visualizing it with a waveform display and spectral analysis, including a voiceprint mode.  I used DirectSoundCapture to capture audio for the purpose of meaningful visualization, updating the display as quickly as possible.  The goal was to get a little experience using DSP and the Fourier transform, though this can be a handy utility for seeing how much noise different mixers in your system are letting through or just seeing what sound looks like in both frequency and time domains.  Several parameters are adjustable to get a closer look at the data.  Also be aware that this program will use as much CPU time as it can get, without taking CPU away from other non-idle processes - the main processing thread's priority is just above idle.  This program requires DirectX 8 or higher.
Status: Completed, usable.
Download: tspec.exe (29K, program executable) - screenshot 1, screenshot 2, screenshot 3 (shows face in voiceprint mode)
tspec-source.zip (14K, C++ source code)

Name: ACT LABS Shifter Utility (formerly known as Shift It!)
Started: September, 2000
Description: A utility enabling free-shifting with the ACT LABS RS Shifter and GPL USB Shifter in games without native support for it.  The RS Shifter is an add-on for the ACT LABS Force RS wheel, providing a realistic shifting experience.  The GPL USB Shifter is a standalone shifter that can work along with any manufacturer's wheel.  Until recently, these shifters only fully worked in a handful of games that provided native support.  Now they can be used with almost any racing game, with a native-like shifting experience for most games.  Just leave this utility running in the background, go into a supported game, and you can shift gears.  This program requires DirectX 7 or higher.
Status: Completed, usable.
Download: This utility is available from the ACT LABS web site.

Name: TSMail
Started: July, 2000
Description: A DLL providing a high-level function for sending e-mail, callable from Visual Basic and any other language supporting DLLs.  It handles everything necessary for sending an e-mail message, with extensive error checking and reporting.  Multiple file attachments are supported using standard MIME base64 encoding.  Using TSMail, sending an e-mail message is as simple as this:

ret = send_email("mail.yourisp.com", "sender@asdf.org", "recipient@somewhere.org", "Subject line", "Message body text (optional)", "textfile.txt (optional - filename of text file to append to message body)", "blah.exe,asdf.txt,test.wav (optional - list of files to attach)")

Status: Completed, usable.
Download: tsmail.zip (27K, program source code, DLL, and usage instructions)

Name: IPCheck
Started: March, 2000
Description: A Win32 console app combining ping and traceroute functionality.  I wrote this because I was annoyed with the inaccurate timing of the Windows ping program, and the slowness of tracert.  This program is accurate to 0.1ms as opposed to the 10-20ms of the standard Windows ping.  I also added some extra features like the ability to sound the system beep if a ping response is received, an ongoing packet-loss indicator for continuous pings, a graphical representation of ping time, a delta-time between hops for traceroutes, and a special outage tracking and reporting mode.
Status: Completed, usable.  Updated rarely.
Download: ipcheck.exe (26K, program executable) - screenshot 1, screenshot 2

Name: Win32 DF ("disk free")
Started: September, 1999
Description: A Win32 console app summarizing free/total disk space on all drives/partitions.  This was inspired by Kai Uwe Rommel's DF 1.7, a hybrid DOS-OS/2 port of the UNIX df command.  I wrote this because Rommel's DF couldn't handle the size of modern drives and running it was relatively slow, since it was a 16-bit program.  I added some info not present in his program, as well as a total line for local fixed disks only.  This program sure beats looking at My Computer to summarize your disk space situation.
Status: Completed, usable.
Download: df.exe (22K, program executable) - screenshot 1 (1999), screenshot 2 (2009)
dfsrc.zip (3K, C source code and VC++ project files)

Name: ACV3 / OSS / ACV4
Started: June, 1999
Description: 3D graphic design software specific to the awning and sign industries.  This was my main project for work for awhile.  Ever wonder what your house or company building would look like with awnings and/or signage?  Well, this software lets you get a preview before having any construction work done.  Companies that manufacture and design awnings and signs use this software to give their customers renderings of what the job is going to look like.  A photograph of the building is taken, imported into the program, and then 3D models of awnings and signs are overlaid onto it.

This project involved development with Direct3D Retained Mode for Visual Basic.  Think 3DSMAX but industry-specific and simplified enough so anyone can use it with a minimal learning curve.  Main challenges included scene management, user interface, dynamic valance generation (involving tessellation with curved surfaces - i.e. wavy valance on a round bullnose awning), and the hassles of developing a large application with Visual Basic and 3rd-party controls.

Status: Shipped March, 2000! (ACV3)
Download: See program web sites (linked above)

Name: D3DSkel
Started: April, 1999
Description: A test program for learning Direct3D Immediate Mode.  This is my first attempt at a 3D engine. The scene consists of a rainbow floor, a particle fountain of smiling spheres, a large textured Earth, and several cats floating around. You can fly around the scene and shoot the cats to make them spin and fly up in the air. Make sure you run this with sound, or you'll miss out on half the fun!  Requires DirectX 7 or higher and a 3D accelerator is strongly recommended. Use w, s, a, d and the mouse to move. 1, 2, and 3 select different weapons. "I" inverts the mouse and various other keys do various other things. I encourage you to experiment.
Status: Development pretty much abandoned - in favor of starting fresh with a new 3D engine.
Download: d3dskel-with-a-vengeance.zip - an enhanced version of the program with additional graphics, sounds, and.. gameplay?! (1MB, ZIP file containing program executable and data) - screenshot
d3dskel.zip (657K, ZIP file containing program executable and data)

Name: TMIDI
Started: April, 1999
Description: A MIDI player.  It has its own playback engine, which allows it to visualize many of the underlying structures and event flow of the MIDI format.   TMIDI lets the user see what's going on and have control over a couple of things that most MIDI players don't allow for: reassignment of instruments, global note velocity and pitch shifts, and tempo.  The display shows what notes are being played on each channel, what instruments are being used, what text events and marker points are in the file, and there is a track list window showing info about each MIDI track, such as which controller was last used and what its value was.  A detailed analysis feature lets you dump a human-readable event-by-event interpretation of the MIDI file to a text file for careful examination.
Status: Core functionality complete.  C++ source code available on home page.
Download: Go to the TMIDI Home Page.   Actual download is a <100KB EXE.

Name: MIDICast
Started: April, 1999
Description: A program for sharing MIDI music data in real-time over a network. Uses UDP/IP to communicate over the Internet or a LAN. I have tested this by sending data from myself playing on my MIDI keyboard over a slow 19200 modem connection to others on the Internet and it works well. Streaming complex MIDI files did not work so well due to the packet volume and my lack of bandwidth at the time.
Status: Completed, usable.
Download: midicast.exe (36K, program executable) - screenshot

Name: DBClass
Started: March, 1999
Description: A C++ wrapper class for accessing ODBC data sources and databases.  Easily add ODBC database I/O to a C++ program without having to mess with DAO, ADO, OLEDB, or other scary acronyms.  This class was written using the sql*() ODBC API and has been used successfully by myself and others in several applications.  Look at the bottom of dbclass.cpp for usage examples.
Status: Completed, usable.
Download: dbclass.zip (5K, C++ source code)

Name: Tom's HTTP Leech
Started: January, 1999
Description: A utility for downloading many files through HTTP. Give this program a URL and it will download everything referenced by that web page. An optional filter lets you place requirements on the contents of URLs of files to be downloaded - a filter of .mid would only download MIDI files. Options for local and foreign levels of recursion allows the program to scan HTML that it downloads for more links, letting you download an entire web site and even other sites that it links to. An overwrite option lets you specify whether or not files already on your hard drive should be re-downloaded. Downloaded files can be all be placed in one directory, or the remote directory structure can be mirrored on your hard drive.
Status: Completed, usable. Updated very rarely.
Download: httpleech.exe (69K, program executable) - screenshot

Name: IPServ / IPClient
Started: January, 1999
Description: A client/server system for tracking peoples' IP addresses. The server runs as an NT service or Win32 console app and keeps track of peoples' IP addresses. The client is a Windows program that lives in the system tray and communicates with the server. It can be configured to keep the server posted as to whether the client is running or not (which can indicate online vs. offline) as well as check in on a periodic basis. It can also query the server to see the information for a particular user, including their IP address, online/offline status, and last seen date and time. This system was once very helpful to me for keeping track of the IP addresses of computers with dialup connections to the Internet. It could have been useful as a layer upon which a general-purpose communications system (like ICQ) could be built.
Status: Completed, usable.
Download: Not available.

Name: TMail (Tom's E-Mail Client)
Started: September, 1998
Description: A lightweight scalable POP3/SMTP email client. Resides in the system tray. Several options for notification of new email, including flashing the scroll lock light and optional text-to-speech reading of message senders and subjects. Maintains list of messages in memory - can optionally download message contents on-demand (when you read the message). This allows the use of IMAP4-style message browsing with a POP3 server. You can also reply to, forward, and send messages quickly. Basic support for decoding of multipart MIME messages and quoted-printable encoding. Support for sending and receiving attachments. Optional support for hierarchical mail folder system including Inbox, Sent, and Trash folders.  Powerful filter support, both automatic (on message receive) and manual (when you hit F in a folder).
Status: Completed, usable.  Updated rarely.
Download: Go to the TMail Home Page.   Actual download is a 100KB EXE.

Name: Adjustable Particle System
Started: August, 1998
Description: An adjustable 2D particle system using DirectDraw. You can create and configure various particle emitters and then run the system to see the results. Created as an exercise in DirectDraw and Win32 GUI. Requires DirectX 6 or higher.
Status: Completed, usable.
Download: particles.exe (67K, program executable) - screenshot

Name: Tom's IRC Client
Started: July, 1998
Description: A graphical IRC (Internet Relay Chat) client. Capable of text-to-speech - requires some speech files. Supports multiple channel windows, DCC chat and file transfer. This was my first Windows program!
Status: Development abandoned - program is usable but somewhat buggy.
Download: ircspeech.exe (97K, program executable)
Speech files (required!)

DOS Programs:  (most are best run in DOSBox if using a modern PC)


Name: UMXRip
Started: May, 1998
Description: An Unreal music file (UMX) ripper for DOS.  Extracts MOD, S3M, XM, and IT modules from Unreal's UMX music file format.  Allows wildcards, so usage is simple:  umxrip *.umx  Supports future revisions of UMX, such as the one used by Unreal Tournament.  Version 2.0 was released in July of 1999.
Status: Completed, usable.
Download: umxrip.zip (24K, ZIP file containing program executable and C source code)

Name: Material Texture Map Creator (Stripes)
Started: June, 1997
Description: A texture map design tool for awning fabric solid and stripe patterns. Lets users recreate stripe patterns of awning fabric in digital form, saving output to a text-based description file as well as a BMP file for use as a texture map.  This program was used to create texture maps for over 1500 industry-standard solid and stripe patterns.
Status: Completed.  Ported to Win32 on 6/3/2001, which required two search/replace operations and the addition of a single line of code.
Download: No download available - screenshot

Name: Bapple 2
Started: January, 1997
Description: An action/real-time-strategy game for DOS. Supports client/server multiplayer under Win95 with UDP/IP. See the Bapple 2 web page for more details.
Status: Development abandoned - program is usable but unfinished. Source code is available - 500k of C source. Compiles with [DJGPP + Allegro] or [VC++ 5 + WinAllegro WIP 2 or higher].
Download: See http://www.grandgent.com/tom/projects/bapple2/ for binary and source downloads.

Name: DNA
Started: March, 1996
Description: A simple DNA 3D model generator/viewer for DOS. This was created as an extra-credit project for a biology class. It generates a visual representation of a small strand of DNA with valid codons. The double-helix is represented by a series of points and the bonds are colored lines connecting them. You can rotate the DNA with the mouse and change parameters of its construction (# of bonds, radius of double-helix, squishiness).
Status: Completed.
Download: dna.zip (26K, program files and source code) - screenshot 1, screenshot 2, screenshot 3, screenshot 4

Name: Highway
Started: July, 1995 (?)
Description: A vertical scrolling arcade-style shoot-em-up for DOS. Run this with the -nosound parameter. Once you're in the game, try pressing everything. In particular, hit G to get all of the guns, which looks neat.
Status: Development abandoned - it's kind of playable though.
Download: highway.zip (155K, program files) - screenshot - download currently unavailable
highway-src.zip (685K, program source code)

Name: WizIntro
Started: April, 1995 (?)
Description: A graphical demonstration and advertisement for a local BBS.  Contains several effects including fading, plasma, 3D object scaling and rotation, wave patterns, palette cycling, column mosaic transition, and a short looping soundtrack sure to drive you mad after the first loop or two.  Supports Sound Blaster and Gravis Ultrasound.  This program runs beautifully using DOSBox.
Status: Completed.  Made its way to Channel 1, where it resides to this day.
Download: wizintro.zip (105K, program files)

Name: Bapple
Started: February, 1995 (?)
Description: A real-time strategy game for DOS. This was inspired by Warcraft, Dune 2, and Ultima 6. It's a strange top-down view tile-based real-time strategy game. You can control units and order them to move around and attack other units or buildings. If you run the program, be sure to hit D to display the map. Try selecting the buildings towards the center of the map and creating some units.
Status: Development abandoned - you can do a few things with it though.
Download: bapple.zip (838K, program files) - download currently unavailable

Name: NewFrac
Started: January, 1995 (?)
Description: A Mandelbrot/Julia fractal renderer for DOS. This program evolved to become interactive. The basic Mandelbrot or Julia set is rendered, then you can select a region with the mouse to zoom in on. 256-color Mode-X and SVGA video modes up to 1024x768 are supported. Palette rotation allows animation of the fractal's colors and a wide variety of color maps are included. Upon finding a scene that you like, you can save a "fractal snapshot" (scene description in text format) to snapshot.txt by hitting S. Then you can edit the file and change parameters (like rendering resolution). Rendering zooming animations is also possible. A clone of TurboVision (Borland's text-mode GUI) was constructed to make the program a bit easier to run. Through analysis of the iterative fractal algorithm, I made the program faster by having it start with low-detail (low # of max iterations) rendering and move up until it detected that not too many pixels were being added anymore. This resulted in very little time being wasted on those evil black pixels. The implementation of this was pretty cool and it made my program faster than most of the other fractal programs I had seen at the time (but it doesn't compare to anything serious like Xaos, heh).

If you run the program, I suggest using the default Mode-X resolution of 360x360 - just hit Alt-F, right-arrow key, and hit Enter to choose Render. Then use the mouse to pick a region to zoom in on. Left-click zooms in, right-drag resizes the zoom window. R picks a random color map. Look at render.log afterwards for some interesting data. Also, if you run the program with a filename as its argument, it will process that file. Depending on the file it could render an image to the screen and let you play with it, render a still image to disk (as a PCX file), render a series of PCX files that animate from one scene to another, or display a saved PCX file in a screen-saver mode. The program supports wildcards, so you could run it like this: newfrac *.ff

Status: Completed, usable but no documentation. (I thought I'd written some but I can't find it!) The GUI is somewhat unstable and the SVGA support has not aged well.
Download: newfrac.zip (178K, program files)

Name: TomMUD
Started: January, 1994
Description: A single-player MUD simulation, or mini-MUD, for DOS. This project was much larger than anything I had ever done before: 55K of C source code, and I worked on it off-and-on over the course of a year or so. If you're not familiar with MUDs, think of them as online multiplayer text adventure games. This program recreates most of the city of Midgaard from JediMUD and lets you walk around. Features include a working inventory system, equippable items, a few mobs (NPCs) that wander around, room data stored in text files, a help system (haha), ANSI color, and a bunch of misc MUD commands.
Status: Development abandoned - you can walk around and explore the city, but that's about it.
Download: tommud.zip (75K, program files and source code)

Name: Bouncer
Started: Sometime in 1990
Description: A colorful graphics display for DOS. This is one of my oldest programs and was pretty cool for its time. Expanding and contracting circles bounce around the screen leaving colorful paths behind. Runs in 640x350x16-color EGA, though you can choose the background color from a palette of 64 colors. The program still runs perfectly (just a bit fast) after 10 years, even under Windows NT and 2000!  It might crash on Windows XP, however...
Status: Completed.
Download: bouncer.exe (31K, program executable) - screenshot

Language/Compiler/Platform History:


Back to Tom's Home Page