Home page


Email me

Free software by me

Unless otherwise noted, this software runs on Acorns only, but should run on Acorn Risc OS 3.1, 3.5, 3.6, and 3.7. Most have been tested with StrongARM, but do get in touch if you think you've found an incompatibility. None has been tested on Risc OS 2, but some might work. The software is all held as Spark archives (check out this page at Imperial College, or get ArcFS off any Acorn User cover disk, if you don't already have a de-archiver).
AADraw 1.02, a tool to make sprites from Draw files (but InterGif can now do this too)
Automaton Wars 3.80, a computer board game
Benchmarks, some performance tests (probably compiles on anything)
CheckWeb, a simple consistency checker
Chorale, a suite of UPnP software for Unix and Windows, is hosted at Sourceforge, not here.
Enla 1.1, a tool to report on unused routines in large C programs
ExtrasLib 0.1, some extra code for users of DeskLib
InterGif 6.15, a tool to make GIFs, even interlaced ones, and even animated ones (available for NT, Win95, and Unix as well as Risc OS)
JTL (Just The Linux) 1.2, a minimalist Linux distro built entirely from sources
ManyFonts 3.0, a font manager (requires RiscOS 3.10 or later)
Sort Your MP3s Out 1.1, an ID3-tag editor for Unix only.

If you're in the medium memory model, the implicit casting of (void __near*)NULL to a __far* appends the data segment register to it, so the routine you're passing it to gets something which isn't (void __far*)NULL. Sorry if you already knew this, or if you don't have a clue what I'm talking about, but I've just cured a bug caused by this and I think it's foul.

Copying things

As far as I'm concerned, working as a computer programmer is a bit like prostitution: those who do it do so because they don't think there's much else they can do which people would pay them for -- they'd much rather be doing it for free for the sheer love of it.
Thusly, you are welcome to copy any of these programs -- in fact, the more widely they're spread, the bigger buzz I get off it. These programs (and these Web pages) are NOT COPYRIGHTED and are NOT distributed under the GNU General Public Licence.
I do this because when I write a piece of code, I want it to STAY WRITTEN. That's to say, I write a routine only when I can't find an existing one that does the job; and once I've written it I don't want ANYONE, ANYWHERE, EVER to have to write it again. For further information see The Manifesto of the Futurist Programmers ("A Farmer's Tractor: Is it object-oriented? Is it extensible?") or consult your pineal gland.
If you run an archive site, by all means stick this stuff on it. If you run a PD/freeware disk library, or organise magazine cover disks, by all means stick this stuff on your disks. Just make sure you've got the latest versions. I know of one freeware library whose books include both Critical Mass (Automaton Wars 1.00) and Automaton Wars 2.40. That's just carelessness. Besides, the current version is 3.80 and earlier ones were just bobbins. Never mind Risc OS 3.7 -- I don't think Critical Mass worked on Risc OS 2, it was Arthur-only!

Changing things

In addition to this, I'd like to request that anyone who changes any of the source code in order to make a bug-fix or enhancement to a program (as opposed to including bits of it in a new program doing something substantially different) sends me the changes they have made so that I can keep the distributions here as up-to-date and definitive as is possible.

The same thing again in legalese

Everyone who has a copy of one of these programs, including ones downloaded from this site, is the owner of their copy of it, not a 'licensee'. In other words, infinite extension of rights is possessed by all who have, by any manner, acquired a copy of one of these programs: this includes unlimited rights for use, copying, modification, redistribution, resale, or any combination thereof, and excludes only the arrogation of claim of authorship.
struct{int i;char s[16];int j;}main={0xEF000001,"Hello world\n",0xE1B0F00E};

DEF FNzero_terminate( a% ) : LOCAL a$ : SYS "XOS_GenerateError",a% TO a$ : = a$

<html>Your browser is <! -- >not <! -->Fresco<! -- >, but <! --><!-- -- >is SGML compliant<!-- --><!-- ->MSIE 3<!-- --><!-- >Netscape 3<!-- -></html>

(K) All Rites Reversed -- Copy What You Like