Martin Neitzel's Public Software

I am moving all my software into the our public CVS servers. Unless otherwise specified, this means you'll have to go to the repository
:pserver:anoncvs@cvs.gaertner.de:/usr/local/cvs

The password is cvs. After logging in, cvs co -c and cvs co -s should give you a good index for all available modules and direct access to the parts.

The following list summarizes a good deal of the public software which I have written myself completely or at least significantly co-authored.

Not yet included in this list is any J stuff I did. Check out the juggle server for any J oddities, in particular the contrib section of the J repository. Major items are:

mod2oku and patzcal (1988 - 1993)
My master thesis work (a Modula2 interpreter) morphed into an abortive Ph.D. work (as an Pascal interpreter). Both interpreters are systems for educational purposes, so they include both compile time and run time visulization facilities. The source is written in very portable C. Different front-end modes exist: cmd-line, curses, plain X11, tcl/tk. The languages are implement with a very close eye to the reference documents (in both cases those by N. Wirth). The Modula-2 implementation in particular works according to the book, even where book has very, very perverse requirements if read closely. Most M2 compilers checked take invalid shortcuts or require unecessary pre-declarations or fail to spot certain illegal source code. (Some of the analysis of the M2 report went later into the VDM-based M2 ISO standard. Not that *that* made things simpler by any means.)

The gzipped tar file contains this double including the entire RCS history, which is:

  1. modula2 in a directory hierarchy
  2. modula2 in a single dir
  3. pascal in a single dir
The checked-out sources will build the Pascal system. You'll have to check out an earlier revision from the included RCS files to build the Modula2 system. Keep prodding me to convert the RCS stuff into the CVS archive where both language versions could live side-by-side on their branches.

acquire (1985)
My multi-player computer version of Sid Sackson's famous board game. I loved the board game (now marketed by Hasbro) which is a real classic among all serious gamblers. However, I always thought that waiting for one's turn wasn't The Real Thing, so the games allows everybody to act simultaneously. It is essentially a stock market simulation. This was very likely the first socket-based program ever written in Brauschweig. It started out with Unix domain sockets, then moved to TCP/IP. The code is really ugly beginner's code, and it shows that I was a beginners w.r.t. network programming at that time, too. The program should be rewritten from scratch. But I'm saying that since 1987, so don't hold your breath.

Anything else to say? Yes. It's a load of fun to play. Different player skills can be compensated for by adjustable time limits. (Just like handicaps in go.)

gin-mode.el (1989)
The "auto guess indent" minor mode for emacs. This mode automatically recognizes indents, hanging indents, and consistent prefix to keep (such as comment prefixes or mail quote prefixes). It is controllable by two or three regexp variables. I gave the copyleft to the FSF. They used the copyleft to re-implement the code at elisp-code at the C level. You can find the pathetic remains as the indented-text-mode and its associated flag variable adaptive-fill-mode. They botched my gin-mode idea so completely, that I would rather have retracted my copyleft assignment. By all means, get this original minor mode and be happy ever after. gin-mode.el is what makes some people here stick to emacs even though would like go back to vi otherwise.

mail-yank.el (1989)
This one is historic and very likely not of value anymore. (I haven't tracked emacs happenigs after version 18.59 anymore.)

The gin-mode.el above was mainly written to reformat emails containing quoted material nicely and without fuss. In particular, it will make it easy to use MN> unnested quotes instead of the complex >>> nested quotes, which I introduced in the late 80's. They became eventually used world-wide, perhaps because we (= Ashwin Ram, Kyle Jones, Barry Warsaw, and me) provided so good support for them in emacs. Actually, Barry's extensive work on supercite (or, at that time, "superyank") was a kind of back-firing experience for me. The lesson was: stupid people will still do stupid things with smart software, just faster.

Anyway, here is the olde mail-yank.el, the minimalistic version which sticks to the quoting protocol which we developed and which soon became official for gnu emacs. (So you very likely do not need mail-yank.el at all. Unlike the mega-wonder "supercite", it offers not a single tuning knob and no glitz. It just works, together with gin-mode.el from above.

pwgen (1995)
A password generator (or random strings in general). We need such a beast because customers are usually incapable to decide on a good password when we ask them for one on the phone. Those who are able to make their choice within five minutes of most strenuous deliberation invariably end up with "susan". Then they enter "Helen" the very next day. Now we inflict simply strings like, wait, --- h43gf5sm56vh5g dznpwbt288mu3h 583x6gzpfggd7k x262rg54hpu7b6 g55btwreuetrnr m9z82vyftt93wu qqewh9ysm5wvz6 upon them.

There are probably dozens of "pwgen" implementations out there. This one doesn't produce pronouncable passwords, but it offers several predefined character sets to choose from, one of them avoiding characters which can easily create trouble, in particular when faxed (digit 1 vs. letter l vs capital I).

alfazulu (1997)
Spell text using the international ("NATO") alpabet. I wrote this after several dealings with NSI over domains. Funny how Americans fail to spell "gaertner" correctly without this aid. Now we say it loud and clear: % alfazulu gaertner Golf Alpha Echo Romeo Tango November Echo Romeo ^D % DOT WHATEVER, guys.

cpr (1998)
The cpr filter copies stdin to stdout, stripped down to only those lines which are either a conditional preprocessor directive or a global definition (a line starting with a letter in column one). Lines are indented according to their conditional nesting level. The purpose of the tool is to provide a quick overview for complex source modules.

globnix (1999)
This is a stress-testing kit providing lots of hideous, nasty, and unexpected filenames of various flavours. I compiled this kit after one of my CGI /bin/sh scripts failed miserably twice in a row. If your program still run OK in the presence of these files, you are a good mile closer towards robustness and security.

imerge (1987)
The main goal of the program is to allow interactive merges of concurrently developed versions of any text file. I routinely use it to consolidate two versions of a text document where there preferred choice falls both ways from place to place.

Imerge is nothing else than the program idiff ("interactive diff") from Kernighan & Pike's book "The Unix Programming Environment". There are two tiny enhancements: it will use your $VISUAL or $EDITOR, not just ed; and you can select the name of the merged file; and it has a man page.

mailwatch (1998)
We are (among other things) an ISP, and this tool monitors the mail boxes of our customers. It checks for apparantly orphaned mail boxes and obscenely large ones. We run it weekly.

urlxxcode
En- and decoding of URLs according to RFC 1866. I happen to write CGI programs with the good ol' /bin/sh and these two programs come handy. It is really trivial. it probably is also useless to the rest of the world (which prefers humongous perl libs to clunky unix processes).

Software by me you probably already have
Just as an aside, odds or high that you already run some teeny tiny code from me:

Whenever you run gcc, you run two or three lines of code written be me which make sure the group ownership and permissions of the .o files are not trashed. (1987?)

GNU Emacs comes with asm-mode.el originally written by me and then hacked by the Hacker's Dictionary compiler, Eric S. Raymond. How bazarre! It still has my cool asm-comment function which is useful for other languages using EOL-comments, too ( "//" in C++, "NB." in J). Successive hits of M-; will re-align a new comment to any of these styles:

foo++ NB. bar NB. bar foo++ NB. bar foo++
With the exception of "gin-mode.el" which is copylefted, everything is by intention BSD-style copyrighted. I would be emphatically thrilled by getting a postcard from users. Those who are filthy rich and absolutely insisting to donate something to me can make me happy with any item from my Amazon Wishlist.