Frank's Software Vault

This page contains all software that I have written over the years. It's rather astonishing how that has added up. You write some code here, a little tool there, and by doing so for long enough time, you get a collection of rather useful software.

I have put the software into different sections so that they are easier to browse.


Password Gorilla
The Password Gorilla is a password database manager. It stores your password, along with login information and other notes, in an encrypted file. A single "master password" is used to protect the file. This way, you only need to remember the master password, instead of the many login information and passwords that you may use.

UUDeview is a very smart decoder for binary attachments from newsgroups or e-mail. It supports MIME, some of its variants, and is in general much more effective decoding attachments than the usual mail software or news readers. If you ever get an email with a lot of garbled characters that are supposed to be an attached file, take a look at UUDeview. It is still very popular, e.g. it is part of most Linux distributions.

MICO (short for Mico Is Corba) is a very popular Object Request Broker (ORB), adhering to the CORBA standard. An ORB is so-called middleware, because it exists between your application and the network. Using MICO, you can easily write distributed applications that communicate over the Internet (or any other network). I am one of the principal authors of MICO, having contributed some major pieces like the POA, OBV and CCM and numerous small bits all over the place.

A program to train you for the theoretical Private Pilot License Exam in Germany. There is an official catalogue of multiple choice questions that I typed in and wrote a nice frontend for.

This is a converter that reads the Prescribe printing language (the native language of most Kyocera printers) and converts it to the somewhat more popular Postscript. It is very useful if you have legacy software that dumps Prescribe, because with P2P, you can convert it to Postscript and print it on more modern printers, or preview it with a Postscript viewer like Ghostscript.


dbf2ascii is a converter that reads old dBase database files (.dbf) and dumps their contents as ASCII text. You can then take the ASCII data and look at it, or import it into another database. It comes as source code with a man page. A Windows binary is available upon request.

A nice graphical program that lets you select any file, which is then displayed using an appropriate viewer. For that, it looks at the file type as determined by the file program, at your ~/.mime.types and your ~/.mailcap file.

As fallout from a one-semester course on telematics, I've written a slim but pretty well featured Web server. It is optionally multithreaded, supports CGI scripts and can understand an extensive configuration file. Alas, no documentation exists for it. But if you're interested, you can download source code for the Server and for the telelib library it uses.

From my fun pages: a program that prints googolplex, complete with proof that the program is useless.

A memory leak checker for C and C++. It records all memory allocations and deallocatios and reports all mismatches.

fsplit is a shell script that splits an input file into multiple chunks of a fixed size, for example in order to spread a big file onto different floppy disks. I wrote it because many Unixes don't come with such a utility by default. My implementation is just a shell script that works with standard command-line tools (such as dd), so there's no need to compile anything.

A program that verifies whether login and password information, which is read from standard input, is valid. Both /etc/passwd and /etc/shadow are supported, but not PAM. Has been written on Linux.

A tiny utility that uses the stat() system call and displays the information found within it. Nothing fancy, but useful sometimes.

An implementation of the Sieve of Erastothenes. 'Nuff said.

CGI Programming

This is a simple C function library to help you access parameters for CGI scripts, for use within a C or C++ program.

If you prefer /bin/sh over C or Perl for CGI scripting, you should take a look at this tool. It is a C program that reads CGI form data and produces shell variables that you can then examine from within a script. It's amazing how easy CGI scripting can be using /bin/sh. It's quite enough for small CGI hacks.

Finally, there's another incarnation of CGI data processing using Tcl, if you want to program CGI scripts in the Tcl language, as I often do.

Just for fun, I also tried to implement a CGI data processor using /bin/sh alone (with its usual supplements, such as echo, cut and dd). Surprisingly, this works very well, and you don't have to compile anything.

This is an authentification module written for Apache 1.2.4 (might work with other versions) that authenticates users by passing login and password to an external program. It was designed to be used together with the checkpw utility above, which verifies a user's system login and password. By combining the two, you can grant access to pages to users based on the usual system login and password.

A shell script to format and crosslink RFC documents on-line. It supports fulltext search using glimpse. This ran for quite some time on our institute's web server. You may have to tweak it before you can run it on yours.


Combat is the implementation of a Tcl language mapping for CORBA which allows you to easily access and implement CORBA objects in the Tcl language. It is great for writing test scripts, but equally wonderful for writing graphical user interfaces for your CORBA servers.

Yeti is short for Yet anothEr Tcl Interpreter. It does about the same job for Tcl that yacc or bison do for C, namely generating parsers. You can specify a grammar in BNF and execute Tcl code for every rule that is matched.

A simple extension that provides a cross-platform "kill" command, to terminate background processes that were started with the "exec" command.

A nice graphical program that lets you select any file, which is then displayed using an appropriate viewer. For that, it looks at the file type as determined by the file program, at your ~/.mime.types and your ~/.mailcap file.

Another incarnation of CGI data processing, if you want to program CGI scripts in Tcl, as I often do.

C++ Loadable Modules
This text explains how to make C++ Loadable Modules in Tcl work. Tcl has an interface that allows you to easily plug in new commands written in C. This is supposed to work just the same in C++, but you sometimes run into difficulties caused by loading C++ code into a C executable.

Historic Software

These are my retired packages that may have been useful during their lifetime, but which have lost their purpose over the years. They are here for your entertainment; don't take them too seriously.

Short for WWW Online Statistics, written in 1994-1995. It was a nifty statistics generator that read a Web server's log file and displayed hit statistics in various forms. An interesting feature was the "online" part; all items in a statistics page were crosslinked back to the program, which acted as a CGI script. By clicking on a link, you could "zoom into" your statistics. For example, you could see statistics for all your Web pages, and by clicking on a single item (a Web page), you would get statistics for that Web page only, i.e. who has been visiting that page.

Unfortunately, the "online" part soon became a problem with growing log files, because on each mouse click, it would go through the logs all over again. It didn't scale very well.

It also failed to produce graphics, and people soon wanted statistics with a lot of bar graphs and pie charts that W3Olista could not deliver.

I had some business interest in the program back then and offered registered copies for US$50 apiece. I never sold a single copy. Maybe it was too cheap. The footer of the license reads, "the concept of shareware depends on the honesty of shareware users. If the software does not generate any income, future development is unlikely." How true. Still, W3Olista was indeed being used on some sites, which I found out about when their users started complaining to me.

For curiosity, take a look at example statistics. (one), (two) (three)

This package provides access to C++ classes and to operate C++ objects within the Tcl interpreter. It allows the developer to easily hook up C++ objects within Tcl by the way of only a few helper methods within them. This project has been abandoned in 1997. It is now obsolete, surpassed by the much more feature-loaded SWIG.

This is from 1996, when I wrote a program using Tk 4.1. I wanted the program not to have any external dependencies. Therefore, I wanted to be able to read images from inline strings, not from external files. This was not possible, however, because image data normally has embedded null characters, and Tcl did not like them. So I wrote a little extension that supported my own GFP data format, and I defined GFP to be GIF, but with "escaped" null characters.

This is obsolete, because Tk 8.x finally offers to read inline images from Base 64 encoded data.

Resource is from 1993-1995. It is a text-base "forms" library that allows you to describe forms using plain text "resource" files. The library will then display these forms and handle user input. It is based on the curses library. It was originally written on SCO Unix, and this is the only platform where colors work. It was later ported to HP/UX and Linux, but I only managed to get it running in black and white.

I wrote some applications using it back then, but these days, I prefer Tk to program graphical frontends.

Short for Frank Pilhofer's Backup and Restore. Shell scripts to help backing up and restoring files selectively. Unfortunately, they depend on an obscure option on your tar program (-F for file lists); this option is available on SCO Unix's tar, but not on GNU tar.

Frank Pilhofer <fp -AT-> Back to the Homepage
Last modified: Sun Dec 5 16:52:02 2004