David Madore's programs



This page has been entirely rewritten (as of 1999/09/08). You can still have the old version if you are interested. However, it will no longer be maintained.

A little usage note: each program below (except the very simple ones in the miscellaneous section) have a “current version” (“latest as of writing”) link and a “latest version” link. The answer is, yes, they point to the same thing, but under different names. The point is that if you just download the program from this page you should use the numbered link so you will more easily remember which version it is; but if you want to keep the link so you can download the program later on, use the “latest” link which will always point to the latest version.

About my FTP site

All of my programs are available on my public FTP site, and this is the recommended way to get them. Some can also be obtained through HTTP (with URL's in this directory), but FTP is preferred: you get the correct timestamps, symlinks appear as symlinks, and recursive downloads are easier. HTTP is mainly provided for compatibility with the URL's I already gave out.

The machine quatramaran.ens.fr (on which the FTP site resides) is a Celeron 300 running RedHat Linux 6.1, and of which I am one of the sysadmins. (By contrast, this web site is on a Sparc server, clipper.ens.fr, of which I am a webmaster but not a sysadmin.) The FTP server we use is a home modified version of OpenBSD's ftpd.

Note that my FTP site contains more than my programs. It also holds a copy of my PGP public key (which should in principle be the same as the HTTP version of the same — otherwise one of them was pirated); it is that same key which is used to produce the various PGP signatures (the .asc files) of about everything on the site. The site also contains an archive of all my posts on Usenet.

quatramaran.ens.fr contains also some other people's FTP sites, notably that of Roger Espel Llima (aka “orabidoo”), home of the popular ytalk program.


Note (early 2001): I am no longer responsible for maintaining ftpd-BSD. As the following article from c.o.l.a explains, I have no longer the time to do the job seriously. Now W. L. Estes (wlestes@uncg.edu) has volunteered to take over: so please send all ftpd-BSD-related mail to him instead of me (though I wouldn't mind a Cc) — except, of course, if it concerns very specifically what happened before release 0.3.2.
The latest version of ftpd-BSD can be obtained from Will Estes in the FTP directory ftp://ftpd-bsd.psychasia.com/pub/ftpd-bsd/. I will try to keep a mirror available in /pub/madore/ftpd-BSD/contrib. So far the latest version is 0.3.3 (the latest version I published is 0.3.2).

Ob vulnerability in version 0.3.2: On 2000/12/18, OpenBSD published the following advisory concerning a one-byte buffer overrun in their FTP server, and a patch which solves the problem. This problem exists in the 0.3.2 version of the Linux port described here. However, it is believed that on the Intel architecture (at least), the Linux port is not vulnerable (because of alignment checks); furthermore, if you only provide read-only FTP access, you are also not vulnerable. Of course, the previous sentence does not constitute a warranty of any kind. If you feel uneasy, please use version 0.3.3, which you probably should be doing anyway (see above).

Platform: GNU/Linux.

This is a GNU/Linux port of the FTP server from OpenBSD.

My contribution in porting this program has been to provide a (quick'n'dirty) replacement for some BSD-specific library functions, and to make the demon PAM-aware. In version 0.2, I have also added support for on-the-fly uncompression of gzipped files. Version 0.2.1 has been sync'ed with the version from OpenBSD 2.5. Version 0.2.2 was a minor bugfix. Version 0.2.3 has been sync'ed with the version from OpenBSD 2.6. Version 0.3.0 is a “development” version in that I am not entirely certain that my port is correct (please read the README file for more information); its main improvement is IPv6 support. Version 0.3.1 was released after I got some confirmation that version 0.3.0 is, in fact, stable; moreover, it now supports the internal ls from the original. Version 0.3.2 is a bugfix version (mostly minor bugs: although a security hole was discovered in the original OpenBSD ftpd corresponding to version 0.3.1 of my port, the version in question is not affected because the GNU libc does not have the setproctitle() function; however, the fix is included anyway). Version 0.3.3 (published by Will Estes) corrects a one-byte buffer overrun found in 0.3.2 (see above).

Note: If you run an anonymous FTP site that has mirrors, and if you intend to move from a pre-0.3.1 version of ftpd-BSD to the latest version, please read this warning about GMT versus localtime display in the LIST and STAT commands.

Copying policy: I have retained the original BSD copyright.

Download: See Will Estes's ftp archive, or see this FTP directory. If you are looking for a pre-0.3.3 version, see this FTP directory instead.


Platform: Probably any platform with the X Window System.

X Labyrinth — the aMAZEment, is a labyrinth game for X Windows, that is played directly with the mouse pointer.

The current version is rather old, and has, if not bugs, at least unpleasant features. I have received various patches, and intend to apply them as soon as I have the time; my apologies to the people who sent me those patches for taking so long.

Copying policy: GNU General Public License.

Warning! The xlaby tarball expands in the current directory and does not create a special directory.


Platform: Probably any platform with the X Window System.

XLetters — catch falling words, is a game to practice your typing skill. The goal is to type the falling words before they reach the bottom.

The current version is rather old, and has, if not bugs, at least unpleasant features. I have received various patches, and intend to apply them as soon as I have the time; my apologies to the people who sent me those patches for taking so long. (I intend to simultaneously release new versions of xlaby and xletters and the first public version of xlevel sometime soon.)

Copying policy: GNU General Public License.

Warning! The xletters tarball expands in the current directory and does not create a special directory.

There is also a special “kids” modification of xletters on SEUL-EDU.


Platform: Unix with the X Window System.

XLevel is a game which consists simply of a huge maze to explore (264 by 264 squares, i.e. about 10 light-years across at a normal screen resolution).

For the moment, there is not much to do except explore the maze. Maybe some kind of goal will be introduced later. Any ideas on how to make the game more interesting are welcome. Consider this game to be pre-alpha for the moment.

Copying policy: GNU General Public License.


Platform: Any Unix (ports to other systems should be straightforward).

Simple Is a Macro Processing Language Element. Documentation is available on the SIMPLE Documentation Page.

If you're wondering where I got the name, you should read this page about the “lesser-known programming languages”.

Copying policy: GNU General Public License.


Platform: Varies according to the interpreter you want to install. At least one should work on nearly anything.

Unlambda is an obfuscating functional programming language. Documentation is available on the Unlambda page.

Copying policy: GNU General Public License. Some parts are available under less stringent licenses.


Legendes is a complicated story, which can be summarized as follows: stagnation, restart from scratch, one month's development, repeat ad lib.

The Legendes Page dates from the antepenultimate such development period, and it is thus no longer accurate. It does tell the beginning of the story, though.

Currently, Legendes is in the “stagnation” phase. Duration of this phase is unknown.

I can do no better than to point at the FTP directory and let you guess what is what (the dates should give a relatively good idea of the development phases).

A collection of quines

Platform: Many — mostly standard.

A quine (or self-rep program) is a program that prints its own listing. This is a collection of quines written in various programming languages. Most of them date 1999/06/08, but as of 1999/11/20-23, I have added a few to the collection (which are even more interesting than the others).

This page explains in details what quines are and how they work (and gives pointers to other similar pages). This article (in French) is the original posting I made (to some ENS local newsgroups) describing my collection of quines.

Various functional interpreters

Platform: Any where OCAML is installed.

I have been experimenting with functional language interpreters there, in a “variations on a theme” fashion.

This is not one program but a half a dozen of them. It starts with an interpreter, written in the INRIA's OCAML version of ML, for a simple functional programming language (something like a hybrid of ML and Scheme, but only with very basic features). Then I explore various variants on the basic interpreter: dynamic scoping, eager evaluation, mutable variables, first-class continuations, scheduling... All these variants are given as branches on a CVS tree that holds all the sources together. Each variant comes with a test suite that can also serve as examples, and with a README file describing the differences wrt the basic interpreter.

If you are interested in such subjects you might want to have a look at my call/cc page.

To install: You must have OCAML installed. The sources are given as a tarball of the CVS repository. Create a directory called cvsroot/ somewhere, and extract the tarball there (thus creating cvsroot/interp/). Run cvs -d cvsroot/ init (substitute the full path for cvsroot/), thus creating cvsroot/CVSROOT/. Then move to some other directory, say work/ and run cvs -d cvsroot/ checkout interp. Type make to build the basic interpreter, and make check to check that it works. See the README file for more details (and also, possibly, the CVS info documentation).

Copying policy: I haven't made up my mind yet. For the moment, you may redistribute this under the terms of the GNU General Public License, with a special addition permitting you to link with the OCAML libraries (even though OCAML is not really Free Software). I might actually put the interpreters in the public domain later on.

Null File System

Platform: Patch to Linux version 2.2.

This is a patch to the Linux kernel, version 2.2 (last tested on 2.2.10). It adds a filesystem type (nullfs) which is to filesystems what /dev/null is to devices. This is somewhat pointless, but it might serve as a template for futher filesystem development.

For more information, read the README file for this patch.

Copying policy: As far as I'm concerned, I claim no copyright on this. However, since the Linux kernel is GPL'ed and some parts of this patch are borrowed from it, the GPL applies.

MIDI Writing Library

Platform: Presumably standard C. The optional guile interface uses guile (of course).

This is a basic C library for writing MIDI files. Don't expect anything fancy, just the basic functions for writing a note and that sort of things. There is also a guile interface to the library functions, allowing to write simple Scheme programs that produce MIDI files (two examples are given, that produce the two Bach preludes listed on my MIDI page).

Sorry, I don't have a README or anything like that. You'll have to figure out how it works. That should be relatively obvious (there are only two files: a source file and a header file).

Copying policy: Public Domain.

Note: It seems that the guile interface will not work on the most recent versions of guile. It works with guile version 1.3 (which comes with RedHat-6.2), but it seems to break on guile version 1.3.4 because of a change in the way file ports are handled. I have not had the time to look further into this.

The Book of Infinity

Platform: Just About Anything.

This is the program used to generate the Book of Infinity, which you can find on http://www.eleves.ens.fr:8080/infinity/.

Copying policy: GNU General Public License, but with a special plea that the text of the Book not be modified.

Wisdom Of The Day

Platform: Just About Anything.

This program generates the Wisdom Of The Day. The Wisdom Of The Day is a profound-sounding sentence which is calculated in subtle and magical ways from the Julian Day number. For example, today (1999/11/19)'s Wisdom Of The Day is “To be honest, a sort of humanity won't lead to faithfulness.”

Copying policy: GNU General Public License.


David Madore
Last modified: $Date: 2003/08/30 13:38:12 $