Here's stuff that I've written and made available as free software. It should all run on pretty much anything that'll provide a POSIXish environment; most of it was developed on Linux, AmigaOS (with ADE) or FreeBSD.
All files on these pages are signed with my GPG key, available from keyservers:
pub 1024D/B94D2E95 1999-11-14 Adam Sampson <email@example.com>
To fetch my key from your local keyserver and verify that a file has my intact signature on it:
gpg --recv-keys B94D2E95 gpgv something-1.0.tar.gz.asc something-1.0.tar.gz
For the projects that I maintain in CVS, snapshot tarballs are generated daily if changes have been made; they're available in my CVS snapshots directory.
Some of my projects have their own pages:
- GNU xhippo, a multi-format GTK-based music player.
- Potamus, xhippo's successor.
- freedt, a daemontools reimplementation.
- The GARStow software packaging system.
- rawdog, an RSS Aggregator Without Delusions Of Grandeur.
- onenetd, a single-server inetd replacement.
- cdsuite, a Python tool for converting audio CDs to collections of audio files.
- adfilter, a set of Apache rewrite rules to block banner adverts.
- My electricity usage monitor.
- The Occam Audio Kit.
- vdesk, a lightweight virtual desktop manager for X.
- gselt, a program that watches the X selection and displays a menu of things that can be done with the current selection.
- m25, a macro processor.
- misccode, a collection of my miscellaneous programs that haven't been packaged separately
Code in this section is generally finished and stable; if it doesn't work, I'd like to know about it.
A minimal replacement for syslogd and klogd that works with freedt.
A little tool that shows a window with a text field in, and matches lines entered into it against regular expressions in a file; you can use it to launch commands, start appropriate browsers for URLs, log into machines, check spelling, and so on. UKC users will recognise this as a modern take on the popular
xaliastool. (Development version available:
git clone http://offog.org/git/yalias.gitor Atom feed.)
A suite of small programs to convert HTML files to PalmOS-readable doc files. (My preferred reader is CSpotRun.) The convertor works well on most input files; Wired back-issues, for instance, convert very well indeed. Needs Python 1.5 or above.
A Markov chain conversational tool for the PalmPilot. (People who know me may have come across other implementations I've done of the same thing; my IRC bot uses the same system. The archive also includes a couple of tiny Perl implementations which the denizens of the FWP mailing list came up with.) A reasonable example of how to write a primarily-text-based application for PalmOS; also makes use of the Palm's database facilities to store the dictionary.
A shell script to create a service directory for daemontools. (This is included in freedt.)
A different solution to the problem that daemontools/freedt solve. batvise provides a set of simpler tools from which equivalents to supervise etc. can be built; manual pages are included. (You will probably still want to install freedt in order to get dumblog.) This is stable, but I'm unlikely to do further development on it, since I'm reasonably convinced that the freedt approach is better. (Development version available:
git clone http://offog.org/git/batvise.gitor Atom feed.)
A small program that's capable of following multiple logfiles. Handy if you're running a number of daemontools daemons (or even Apache and syslog) and want to keep an eye on their logs. If you're looking for a somewhat more graphical tool that does the same thing, have a look at Paul Mutton's JLogTailer.
A small tool for secondary-school chemists, which provides various information about elements in the Periodic Table. This was my first project under Linux, and therefore has great sentimental value to me.
A pair of tools which convert Protracker modules to and from a human-readable format. With this package, you can use Emacs as a tracker.
A patched version of the cpm-0.2 CP/M emulator for Linux (available on ibiblio). This version will build and work correctly on modern ELF systems, and also features a couple of fixes in the BDOS emulation. I was unable to contact either the original author or the author of cpm-0.21, another ELF-compatible version (which doesn't include the BDOS bugfixes); if you know where I might be able to contact them, please let me know. Most command-line CP/M programs will run happily on this emulator; for instance, I use it to run Hitec C for Zen development.
A generic emulator for the Z80 CPU; an extended version of that included in the CHAOS source code. It's easy to modify, being based on the xz80 emulator core, and supports abstract console, serial and disk emulation. It's currently the only platform upon which Zen can be used.
My (unsuccessful, and in retrospect doomed) entry for the International Obfuscated C Code Contest; a tool to perform matrix convolutions on PPM images. This does not represent my normal coding style.
A suite of tools to allow offline web browsing. Mail me if you need to know how to install it. Needs Python 1.5 or above. This isn't Jasper Jongmans' webget, nor is it derived from it (or vica versa), although it bears some remarkable similarities. I guess there are only so many things you can call a download manager.
A MOSIX load monitor applet for the ROX panel.
A tool to convert Amiga old-style icons and NewIcons to PPM or XPM format, preserving transparency and palette information. Handy if you like the old MagicWB or ICONZ.A icons and want to use them on your X desktop. If you're using Windows, Gary Harris' WinAmicon provides GUI and command-line versions of amicon for Win32.
An SDL-based executive toy which simulates a group of balls tied together with bungee cords.
A tool for packing files to a set of CDs, either in order, or in a reasonably space-efficient way. (Development version available:
git clone http://offog.org/git/packcd.gitor Atom feed.)
Scripts to generate the bandwidth pie charts on the fivegeeks home page. Some user customisation required, but should be usable on most Linux 2.4+ firewall systems.
A preloadable library to hide plugins from Mozilla. Useful if you're using someone else's Mozilla and they've got some plugins installed in a system location that you don't like.
Firmware to turn a Teensy++ development board into a USB MIDI interface. (Development version available:
git clone http://offog.org/git/avrmidi.gitor Atom feed.)
Warning: code in this section is likely to include little or no documentation, and will probably be difficult to compile.
A FORTH-like programming language designed for small systems and compilable with a Small C compiler.
A minimal operating system for Z80 computers. This package includes a cross-development suite that runs under Linux; you will need the "asl" cross-assembler to compile it (available from ibiblio or whatever sunsite.unc.edu is calling itself these days). The OS and filesystem will fit in 8K of battery-backed-up RAM.
A somewhat better Z80 operating system written in C, providing a small Unix-like filesystem and system calls which resemble the C standard library (fopen etc.). It runs under the z80em emulator; it hasn't yet been ported to any real hardware. It uses the Hitec C compiler running under the cpm CP/M emulator to compile. If you've got z80em installed, you should be able to use the OS image included in this archive to at least see what Zen looks like; recompiling it would probably be somewhat more complex.
An emulator (in C) and assembler (in Python) for a four-instruction virtual processor which I designed with a somewhat esoteric instruction set. Some example assembly code is included.
A FORTH-like calculator implemented in Z80 assembler, based on large chunks of the Small C+ maths library. I did at one point have a pocket Z80 machine successfully running this; it should be relatively straightforward to port to different hardware, as it already includes drivers for the pocket80 and z80em.
A GTK program which displays a penguin logo and some basic information about your machine under Linux.
An aborted attempt to rewrite xhippo in C++, supporting multiple interfaces. The code might be useful as an example of how to support GTK, Lesstif and text interfaces in one program, but it's not terribly useful as a music player.
A misnamed miniature IP stack that will speak SLIP and respond to ICMP ECHO REQUESTs. It doesn't yet do UDP or TCP.
An experimental terminal emulator written using Python and curses. Ended up being too slow to be of any use.
A port of the Linux kernel console code to userspace. It needs some work on cursor handling and scrolling to be useful.
My hacked-up MP3 streaming system (including a server, command-line and CGI control interfaces, distributed song collection, and an IRC bot). Read the README file, and preferably the code; it's not very well documented or engineered.
A class for Python, which implements most of the functionality you need to build an IRC bot. It also includes a couple of sample bots written using it.
A suite of tools to turn a PalmOS machine into a serial-controllable graphics display. (We planned to use an old Palm Pro as a clock for our kitchen, hence the name.)
An experiment in reading DVD subtitles through gocr. Doesn't currently detect subtitle lengths.
Software-defined radio frontend for SoftRock RXTX and similar receivers/transceivers. Mostly a thin wrapper around DttSP and JACK; however, it doesn't require an X display, and it can drive multiple devices with several listeners (tuned to different frequencies) attached to each one. (Development version available:
git clone http://offog.org/git/softrig.gitor Atom feed.)
I've written some scripts for the Greasemonkey extension to Firefox, mostly to attempt to fix or work around various kinds of stupid or broken HTML.
What have you done with...
If you're looking for tart, itsmailbox.py, carol.c, sallows.c, newsstats.py, list-people.py, Giggle.py, noptrace.c, advogatorss, yesnomaybe.bf, ICQ.py, classtricks.py, newsarchive.py, nibbles.sh or occlife.occ that used to be on this page, they're now all in the misccode collection.
Other projects I've contributed to
- aewm: MWM hints support, Xft font rendering, nested menu support (merged).
- dillo: "force my colours" (merged).
- uwm: initial 3D borders support (merged).
- gkrellm: MH folder checking (merged).
- XFCE: made the mail icon on the panel show whether you have mail or not (merged).
- XawTV: plaintext support for alevtd (merged).
- ogmtools: add a -c option to ogmsplit so that it can arbitrarily extract sections from an ogg stream (merged).
- ROX-Filer: hide column headers in the list view (merged).
- i-scream: the "statgrab" program (merged and actively maintained).
- rxvt-unicode: real bold support, a couple of miscellaneous fixes (merged).
- leafnode: "nopost" option to prevent posting to a particular server (diff against 1.9.18).
- rxvt: MWM borderless support, override-redirect support, arbitrary command on bell, fixed buffer overflow in command.c (from Debian patch) (diff against 2.7.8).
- clock: fix for reading insufficient data from the child, fix for not stripping the LF from the message (diff against current version).
- speckeysd: avoid collecting zombies (diff against current version).
- xcopilot: don't rely on Linux mmap semantics, and thus compile correctly under FreeBSD (diff against 0.6.6).
- LIRC: userspace I2C driver for BT848 remote control receivers (merged); cleaned up FTDI bitbang driver (merged).