[ software | on-the-way ]

This page contains lots of little programs that you can download for linux. All of them have been written by me and, where possible, I'll give you the source code to play with. Unless otherwise specified, all software is covered under the GNU General Public License.



auto-question is a basic multiple-choice question and answer program. It takes questions and a quiz configuration in XML, then presents the quiz to the user on a VT220/ANSI capable terminal. The program uses libreadline for its input handling, libexpat for reading XML files.

download/aquest-0.2.0.tar.gz (157.0k)

download/aquest-0.2.4.tar.gz (174.5k)


asmframe is a simple C wrapper for small assembly programs. It's main use is for playing around with assembly language programs on Linux/i386. It provides basic input and output routines. I have plans to make it do more in the future though.

download/asmframe-0.1.tar.gz (5k)

download/asmframe-0.1.README (1.4k)


asmprofile is a simple assembler profiler. It looks assembler source files and generates instruction counts. The instructions it knows about are hard-coded, but easily modified. The next version will generate some more useful information, like instruction grouping info.

The bulk of this program was created by autoproject, which is suprisingly useful.

download/asmprofile-0.1.tar.gz (124k)


avrasm is an assembler for the Atmel AVR series of processors. It's still fairly early days (haven't really touched it much since 1999), but it works enough for me to use it with my AT90S1200.

Updated 22/07/2002. Here's a slightly happier version. 0.5.0 had some instruction encoding errors, plus other bugs. 0.5.1 is currently generating code which runs on the AT90S1200, AT90S2313 and AT90S8515.

Updated 27/03/2004. Added a tarball that contains fairly standard assembler include files for the AT90S1200, AT90S2313 and AT90S8515.

download/avrasm-0.5.0.tar.gz (68.6k)

download/avrasm-0.5.1.tar.gz (73.1k)

download/avrasmincludes-0.5.1.tar.gz (0.7k)


avrprog is a serial-programmer via the PC's parallel port. Currently, I've only had success in programming the AT90S8515 using this, but other chips with the SPI logic in them should work too. Never managed to get it to program the AT90S1200.. The programmer hardware is trivial, just straight-through connections:

parport (pin)AT90S8515 (pin)
nStrobe (1)SCK/PB7 (8)
PE (12)MISO/PB6 (7)
nSelect (17)MOSI/PB5 (6)
ground (25)ground (20)

The current state of things requires manual intervention on the AVR's reset line, as such the program must always be run with the `--nrc' option. I've also done a little diagram of the programmer. I'm powering this off an external 5v supply (old AT PSU).

download/avrprog-0.1.0.tar.gz (55.1k)

download/avrprog-0.1.1.tar.gz (83.1k)


bintohex is a program which converts between various number formats. It currently supports binary, octal, decimal and hexidecimal. The default output format is specified on the command line, defaulting to decimal if not specified. The -s flag can be given to caused signed decimal output, input can either be signed or unsigned.

download/bintohex-0.1.tar.gz (124k)

download/bintohex-0.1.1.tar.gz (97k)


cdtool is the upgrade for chcd. It's still not very clever, but it's a bit nicer. It'll change CDs on a juke-box, and eject discs. Edit the Makefile to set stuff specific to your system.

download/cdtool-0.1.tar.gz (2.5k)


datefix turns dates from dd/mm/yyyy format into RFC-822 compliant dates. Very simple, but does the job. Used in various scripts that need to produce RFC-822 style date outputs from simple input (e.g. changelogs).

download/datefix-0.0.1.tar.gz (84.9k)


em is a simple script to allow the editing of MH mail messages. It can be run on it's own, em, or in the usual MH style, em +inbox 1000.

download/em (2.2k)


fakerup, a simple program to generate fake ruptime information. To get other hosts to respond successfully, you'll need to run this as root and provide the option "-s 513" so that remote (rwhod) servers allow the packet.

download/fakerup-0.9.0.tar.gz (58k)


fbounce is a very simple port redirector. I wrote it in about 4 hours so don't expect too much! It redirects ports quite nicely.

Updated 11/12/2002, now autoconf'd / automake'd and tidied up the option processing. Got versionified, now 1.0.1.

download/fbounce-1.0.1.tar.gz (81k)

download/fbounce.tar.gz (4k)


findleaks is a collection of functions that wrap over malloc(), calloc(), realloc() and free(). When a program has finished you can read the log to view what activity happened, and any leaks, if they occured. Look at the readme file herein for more.

download/findleaks.tar.gz (2.2k)


These are my stock "support" functions for C. "dmem" is a dynamic memory allocator, loosely based on Brinch Hansen's parallel allocator with address-mapping for blocks smaller than 24k. The memory pools are arranged in "half-powers" of two, starting at 32 bytes, e.g.: 32, 48, 64, 96, 128, ... up to 32 megs. Where possible it will use anonymous memory mapping to get memory; the system malloc otherwise. The "" file provided shows what sort of thing is needed to auto-guess the settings. The tests will not scan for a suitable memory-base, but chooses 0x40000000 on solaris and cygwin, 0x80000000 on Linux and *BSD.

The other stuff in "support" provides dynamic arrays and string-based hash tables.

download/fsupport-0.1.tar.gz (99.7k)


During the 1997 summer hols, I thought it would be a cool idea to try and write a game in X. I toyed with some ideas for a while, and came up with 'game_test'. It's an executable called 'igame' which is rather like Dune-II, but with about 90% functionality removed. Since it was only really to improve my X-Lib and C skills, I never did any more to it.

To run it, extract the files from the archive, cd to the directory 'game_test', type 'make' and off it should go quite happily. When it's finished, you'll have an executable called 'igame', which you can then run and play with. Press 'Q' while the pointer is on the 'Arena' to exit the game.

download/game_test.tar.gz (32k)


l337 is a program which l337ifies text (turns it into the gibberish used by crackers and the like). There could be quite a lot more in this program, and there are probably others out there, but it's a bit of amusement. For example, the text:

There's a one-eyed yellow idol
To the north of Kathmandu;

ends up as:

7h3r3'5 4 0n3-3y3d y3ll0w 1d0l
70 7h3 n0r7h 0f K47hm4ndu;
download/l337-0.1.0.tar.gz (57k)


The lambda computer is a simple simulator for computing in the untyped lambda calculus. Go look at the lambda page for more information!

download/lambda-0.1.tar.gz (14.1k)


Limitshell is a wrapper for the standard shells (+other programs). It changes the process limits before executing the real command, so that the user is limited in the amount of resources they can consume. Restrictions can be placed on CPU time, number of processes, number of open files, core file size, max file-size and max memory size (various settings).

I'm using it on my machine, and as far as I can see, it works. Read the Install file in the tar.gz archive on how to set it up. An example limits file is included.

download/limitshell-0.1.tar.gz (4.2k)


mailinfo is a client program to interact with a mailinfo server, which reports on the state of a user's mailbox (last access, empty/non-empty). The client program will interact with the UKC mailinfo server (as well as the in.mailinfod here). This client doesn't understand the -C (change mail host) option, and neither does the server. This might change at some point, but it's fraught with security hazards (and probably very site specific).

The client part (mailinfo) will look for the name of a mailinfo server in /etc/mailinfohost and /etc/mail/mailinfohost. Failing that, it'll use the name `mailinfo' assuming you put it in /etc/hosts, CNAME it, or whatever. It'll also accept it on the command-line in the form `mailinfo'.

the server (in.mailinfod) should be run from inetd (as any user which can stat maildrops successfully). An example `mailinfo.inf' file is provided, which should be edited and placed in /etc, /etc/mail, or /usr/local/etc. Simple format, looks like:

# user:name:sys-id:maildrop:alias,alias,...
root:root user:sys000:/var/spool/mail/root:w00t

no manpage or any other useful documentation yet. Use the `--help' option to show the various options and command-line syntax. Although the mailinfo.inf file supports re-directing queries to other hosts (with a string like, in.mailinfod doesn't (yet). I'll get around to finishing it off sometime...

Updated 17/09/2013: there's a new version, 0.9.4, which fixes a couple of bugs that had been found along the way (acks to Matthew Slowe and Tim Bishop for uncovering).

download/mailinfo-0.9.4.tar.gz (105k)

download/mailinfo-0.9.1.tar.gz (62k)

download/mailinfo-0.9.0.tar.gz (62k)

download/in.mailinfod-0.9.0.tar.gz (61k)


Menutool generates simple curses-based menus. Data is supplied in a label:result format; result is printed on standard error. These lists can be specified on the command line, be piped in, or be read from a file.

Version 0.1.1 contains a re-write of the menu drawing code, and handles page up/down correctly. I've also debianized this one, sort of. There's no manual page, but it's not a very complicated application.. The MD5-sum for the .deb is ``a0c328205491b0a72a56e87d40b5bf2c menutool_0.1.1-1_i386.deb''.

download/menutool-0.1.1.tar.gz (10.6k)

download/menutool.gz (5.0k)

download/menutool_0.1.1-1.dsc (0.7k)

download/menutool_0.1.1-1_i386.deb (7.0k)


mhtidy is used for handling silly MIME types. It's not very complicated; allows you to save or less attachments. You still have to put the relevant mhn line in your ~/.mh_profile.

download/mhtidy-0.1.tar.gz (9k)


Quick MoinMoin Wiki hack, turns a simple line-by-line text file formatted as 'date login description' into a nicely formatted list. Drop the script as '' in your MoinMoin parser directory (usually hiding under /usr/local/lib/pythonX.Y/site-packages/MoinMoin/parser/ or similar).

download/ (1.5k)


Nuked is a simple server that sits on port 139. When somebody tries to send OOB data at the port, ie, a nuke attempt, it nukes them back. If they're running Windows, it may crash their machine, if their running UNIX, nuked will attempt an IDENT lookup on the user.

The source is gzipped and there is no Makefile. Typing "gcc -O -o nuked nuked.c" will do the job nicely.

download/nuked.c.gz (7.2k)


oat, the Obscure Administration Tool, is the client side of oatd, the server. Requests are made to the server in the form oat server:file. The server responds with the correct file (based on the client's IP address), which the client spits out.

download/oat-0.9.tar.gz (124k)


oatd, the Obscure Administration Tool Daemon, is the server for oat. Usually, this will be launched from inetd with a line such as:

    oat  stream  tcp  nowait  root  /usr/local/sbin/oatd -v /etc/oat

Where the oat port number is defined in /etc/services as 942/tcp. If a client machine with IP address requests a file with something like: oat, the server would respond with the file /etc/oat/foo. (if the file exists). If the file does not exist, the server simply disconnects the client without reporting an error.

download/oatd-0.9.tar.gz (124k)


This is an occam syntax-highlighting definition for the elvis vi clone. It makes occam look pretty. You may want the occam system to go with it.

I've done a vim syntax file now as well. It's functional, but not perfect. There's also a bit of a filetype.vim file. I poked around with folding a bit, and have these bits in my .vimrc (binds {,shift} F2/F3 to {,recursively} close/open folds, F4/F5 to open-all/close-all folds) and makes the fold highlighting a bit prettier (imo).

highlight Folded ctermbg=NONE ctermfg=LightBlue
highlight FoldColumn ctermbg=NONE ctermfg=LightRed

set foldmethod=marker
set fillchars= 

map <F2> zc
map <S-F2> zC
map <F3> zo
map <S-F3> zO
map <F4> zM
map <F5> zR
download/occam-syn-elvis (0.5k)

download/occam.vim (2.1k)

download/filetype.vim (0.2k)


openupsd is a daemon for Belkin UPS's that speak the "regulator pro smart protocol" over a serial-port. It's on the openupsd page really!

download/openupsd-0.2.0.tar.gz (111k)


pmerge is a utility which merges the contents of files (sorting them as it does), in such a way that the ordering of files on the command line determines what happens when the same key is duplicated. In some ways, it behaves a bit like the join/sort utilities. There ain't much documentation at the moment, but `--help' produces something useful.

For example, to merge 2 password files on UID, with users info in then 2nd file replacing the same user info in the 1st file (based on UID match), I would write:

  pmerge -n -f 2 -s : passwd.first passwd.second
download/pmerge-0.1.tar.gz (51k)


pollins is a utility that inserts pre-emption statements into C and C++ code. The package contains two additional utilties and some extra code. `pcc' is a gcc wrapper that feeds files appropriately to `pollins'. `fudgedata' is used to fix timing data. For the purposes of investigation, `pollins' can be made to generate analytical poll calls (this is the default). This allows you to see the distribution of poll calls in time, then adjust the pollins parameters, then loop.

Documentation can be found in the enclosed `' file. This can also be downloaded from the publications page.

download/pollins-0.1.0.tar.gz (287k)


A simple utility to turn raw binary files into Intel Hex format files (necessary for UISP), but which may have other uses. Doesn't try and do anything too fancy or clever. Compile with the usual "gcc -o rawtohex rawtohex.c".

download/rawtohex.c (3.4k)


readline is a simple program which uses the GNU readline and history libraries to read a line of text from the user, with an optional history file. Its intended use if for shell scripts and the like. It's another autoproject, so the documentation isn't exactly correct. (--help gives the right stuff tho).

download/readline-0.1.0.tar.gz (117k)


rmsem is a simple program which removes sysv semaphore identifiers. Without any arguments, it will attempt to remove all semaphore identifiers, or you can pass semaphore ids on the command-line and it will remove those ones. Be careful about running it when other programs are using semaphores...

A C source-file is provided. To compile it, do something like:

    gcc -O3 -Wall -o ./rmsem ./rmsem.c
download/rmsem.c (2.1k)


rmshm is a simple program which removes sysv shared memory segments. Without any arguments, it will attempt to remove all SHM segments (probably not what you want!), or you can pass it segment identifiers on the command-line. Be careful about running it when other programs are using shared-memory segments (check the size field of IDs in /proc/sysvipc/shm)...

A C source-file is provided. To compile it, do something like:

    gcc -O3 -Wall -o ./rmshm ./rmshm.c
download/rmshm.c (1.8k)


runas is a simple program that invokes another program (without arguments) under a different name. I wrote it because I needed to be able to launch bash as a login-session from a machine which only had csh/tcsh.

Here's the line I had in my .tcshrc file:

/home/frmb/bin/runas /bin/bash -bash && logout
download/runas-0.1.tar.gz (1k)


s3m2xm is a utility to convert .s3m (scream-tracker 3) module files into .xm (sound-tracker/fast-tracker) files. It doesn't manage a perfect conversion, but what comes out can be tweaked by hand. A large number of s3m effects are unsupported and some may get converted incorrectly (portamento slides don't seem too happy).

Usual autoconf/automake package with a sparse README file.

download/s3m2xm-0.2.0.tar.gz (60.9k)

download/s3m2xm-0.2.0.tar.bz2 (55.5k)


s3minfo is a simple program that prints the contents of an s3m (scream-tracker) file. It'll display the header information, samples, orders and patterns from the file. The play-sample option doesn't work yet.

The sources are tar'ed/gzip'ed, and there is no Makefile. Type "gcc -O -o s3minfo s3minfo.c" will compile it nicely. There's also a nice gzip'ed static binary, should compilation fail horribly.

Finally got found to doing some more on this. Added a sample-ripper thing (to S3M samplefile format or just the raw (unsigned) data). Also autoconf'd and automake'd it.

download/s3minfo-0.1.tar.gz (4.8k)

download/s3minfo-0.1.static.gz (66.2k)

download/s3minfo-0.1.1.tar.gz (61.8k)


sermon2 (and associated client programs) are used to interface with the RS422 devices dotted around the house/office.

download/sermon2-0.1.1.tar.gz (139.9k)

download/sermon2-0.1.4.tar.gz (296.2k)


These patches provide some additional features for SMP linux kernels. Three additional system-calls are provided:

int smp_processor( void ) returns the processor the current process is running on
int smp_lockto( int proc_id ) locks the current process to the specified processor
int smp_num_cpus( void ) returns the number of available CPUs

These are some patches for the 2.0.37, 2.2.10 and 2.2.14 linux kernels. It's unlikely that I'll do any more patches on this, as I'm looking at Tim Hockin's sysmp() patch, which is a bit more standard, and can be found here.

Update: there are some patches for RedHat kernels here as well now, for 2.2.12-20 and 2.2.16-3.

download/smp-2.0.37.tar.gz (1.7k)

download/smp-2.2.10.tar.gz (2.5k)

download/smp-locking-2.2.12-20.patch (5.4k)

download/smp-locking-2.2.14.patch (5.2k)

download/smp-locking-2.2.16-3.patch (5.7k)

download/smpstuff.h (0.8k)


srec2bin is a simple converter for turning Motorola S-record files into binary images. It appears to work for 16-bit S-record addresses, and should handle 24-bit and 32-bit, but I've not tried these.

download/srec2bin-0.1.0.tar.gz (184k)


Stat is a similar program to stat on solaris. You pass it file-names and it tells you a bit about the file.

download/stat-0.2.tar.gz (2.2k)


ubounce is a port redirector which tunnels UDP over TCP. It is fairly static in nature, designed for single point-to-point connections. An arbitrary number of UDP ports may be tunnelled.

The TCP connection doesn't use encryption or anything like that. If you want to do that, feed ubounce through an ssh tunnel or something. The source archive is autoconf/automake, so just ./configure then make.

download/ubounce-0.1.0.tar.gz (83k)


xdmchoose is a replacement chooser for XDM. but it's really on the xdmchoose page!

download/xdmchoose-1.2.1.tar.gz (181)

download/xdmchoose-1.1.3.tar.gz (163k)

download/xdmchoose-1.1.2.tar.gz (143k)

download/xdmchoose-1.1.2.tar.bz2 (125k)


Xloadapp is a little program which creates a window on your display (48x48). The idea is that you run afterstep, and swallow this into the Wharf. The window is filled with memory usage, the three uptime values (1 min, 5 mins and 15 mins) plus the current time.

download/xloadapp.tar.gz (5.4k)


xsel2sel is a program that will run on one machine, connecting to many X-servers. The purpose is to allow the transfer of selection data between servers. It's only really useful if you've got two X-servers on your desk, or if you want to be able to send selections to friends. The README file explains how to use it. The asthetics are a bit poor at the moment but I'm planning on fluffing it up.

You really need a 3 button mouse to use all the nice features (look in README).

download/xsel2sel.tar.gz (8.3k)


xtree is a program which allows you to manipulate windows on an X server's display. The main purpose is to allow window operations to be performed, without having a graphical interface. It also facilitates the abuse of unprotected X-servers.

download/xtree-0.1.tar.gz (125k)

Future releases

Here are some bits of software in the pipeline...

Last modified: 2013-09-17 18:54:36.000000000 +0100 by Fred Barnes.