Roland's software page

programs, scripts, libraries etc.

That's me.

Location: homepage > software


Introduction

This page is about the free software I've written (or contributed to). I release all of my software under the BSD-style or GNU General Public License, or (where appropriate) the GNU Library General Public License. Some things in the miscellaneous category are not really software. So where appropriate, they are placed in the Public Domain.

some old packages on ftp sites might still contain my old e-mail address, rsmit06@ibm.net. This has been discontinued a long time ago. You can mail me at rsmith@xs4all.nl. Due to spam I am now filtering my mail. If your message does not reach me, check out my spam blocking page.

Software listed on this page:

security

Tampering with software distributions is one of the ways to compromise the security of a server/workstation, and destroy the trust upon which the free software community is built. Therefore it is vital to check the integrity of software that you download. Since most people are not able to audit every piece of software source that they download (let alone binary packages), we must find other ways to verify software integrity.

That is why you'll find a digital signature, generated by gnupg(1) with my secret key, with all these packages. By using my public key with gpg's --verify command you can check if the packet has been damaged or tampered with. If you get a "good signature" message, that means that you have the package you downloaded is identical to the one I put together [That does not mean that it does not have bugs. It just means nobody has been able to put in a backdoor or trojan].

you can ignore the warning messages concerning a "valid trust path" or the key not being certified with a trusted signature. It just means that my public key has not been countersigned by someone in your trust ring.

This website is often synchronised with the mother copy on my workstation, using rsync(1) over a ssh(1) connection. So any tampering would be fixed quickly. AFAIK the contents of my workstation are relatively secure, since it doesn't allow incoming connections, and it's kept under lock and key.

If checking gpg signature seems too much work, or if you don't have gpg installed, at the very least check the also provided checksum value, produced by the md5sum(1) program. By running md5sum or md5 on the package you downloaded, and comparing its output with the listed checksum value, you can check if the package is undamaged and hasn't been tampered with. If the generated checksum does not match the one given on this page, there is something wrong.

platform

I have developed this software on a PC running the Linux or FreeBSD operating systems. It should be usable on other UN*X-like platforms, unless otherwise stated.

Programs

generic installation instructions for programs

xnetload

This application, that runs under the X Window System, displays a count and a graph of the traffic over a specified network connection. I used it to monitor my PPP connection to the Internet. I've switched to conky. And since I'm not running Linux anymore the amount of maintenance I can do on it now is limited to bug-fixing.

xnetload The picture to the left shows the xnetload window. It shows the network connection that it is monitoring: ppp0. Next to that is the time elapsed since the program was started. The line below that displays the current packets/second average and maximum number of incoming packets. This is also depicted in the graph below it. Under that the same is showed for outgoing packets. The graphs are logarithmic. So 1 line = 10 packets/s, 2 lines = 100 packets/s etc.

It either displays bytes/second or packets/second, based on the capabilities of the kernel. On 2.1.x and later kernels (including the 2.2.x and 2.4.x series) it displays bytes/s. It requires the /proc file system, or rather /proc/net/dev which is only found in Linux. So AFAIK this program is Linux specific.

source archive: xnetload-1.11.3.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQA9nGsiEnfvsMMhpyURAq3/AJ99UDipCIIT7vcy/14mOnYvhA9w2wCeIqaH
UgxpIudPnOf7eWO2LnCKXYI=
=EMXr
-----END PGP SIGNATURE-----
MD5 checksum: 02903105de631ba1ac7c5eff9508869f
remarks: This release fixes a bug with the -update option; the refresh interval of the graph was not influenced by this option, and it should be. Upgrading from the previous version is not really necessary if you haven't encountered the bug.

The last version with ip-accounting support for 2.0.x kernels is also still available:

source archive: xnetload-1.6.1.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA7dqsQEnfvsMMhpyURAmAfAJ94CViTq211uXH3nzMEFg3s1QH9hQCfZ1ph
TKiQ4jsZxaPyARsJNF2PnNI=
=/p1r
-----END PGP SIGNATURE-----
            
MD5 checksum: 63a9b79a135c78a818fb191914bd7c16
remarks: The last version with ip-accounting support for 2.0.x kernels

xplanets

This program shows a simulation of a spacecraft flying through the solar system. With the controls next to the simulation screen you can control the simulation and steer the spacecraft's flight.

xplanets-screenshot

The picture to the left shows the xplanets window. In this picture the following planets are visible:

  • the Sun (yellow)
  • mercury (gray38)
  • venus (burlywood2)
  • earth (blue2)
  • mars (LightSalmon3)

The spaceship is also visible, centered in the picture.

Note that the sizes of the sun and planets are not to scale, though their distances are. Showing the planets to scale would mean that they wouldn't be visible. The solar system is rather big, after all. :)

The planet nearest to the spaceship is indicated with a red circle around it. It's relative speed and distance are shown in the data display.

The xplanets program uses the GTK+ toolkit. It has been built with version 2.2.1, so it should work with any version >2.0.0. It does not work with GTK+ 1.x anymore.

source archive: xplanets-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQA+5LUXEnfvsMMhpyURAo24AJ9lsbSUiiqTO0ACpKLTmVNfGfLXsACfT8kV
MHfLl9X8F6l9aDd17mtsvcU=
=cul5
-----END PGP SIGNATURE-----
            
MD5 checksum: dc16519c663e013eb430f478ff9fb4c5 xplanets-1.0.0.tar.gz

yamp

Yamp

"YAMP" is an abbreviation of "Yet Another Mixer Program". It is a program, running in an X window, to control your soundcard via the OSS kernel sound driver. This program is specific to Linux.

It queries the soundcard which variables can be influenced, and sets up a notebook control with a page for every variable. Usually you can set the volume of the speakers, bass and treble, volume of the CD player and other input sources. With the sliders on the page, you can set that particular variable for the left and right channel separately.

It uses version 2 of the GTK+ toolkit.

source archive: yamp-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQA9NWwQEnfvsMMhpyURAqvmAJ9Kec6Pzw4SwLOBJCEOvdwwWPBD6wCeJTVI
C+FyLXPVjFwBZ/jY1+eCGHo=
=93cR
-----END PGP SIGNATURE-----
            
MD5 checksum: e2c25ebf9bfdffd924169873ac434bf4
remarks: This version requires version 2 of the GTK+ toolkit. It will not work with version 1.x.

To build it, unpack the tar-file with "tar -xzf yamp-1.0.0.tar.gz". Enter the yamp-1.0.0 directory and give the "make" command. If that works, log in as root and give the command "make install".

lamprop

The purpose of this program is to calculate some properties of fiber-reinforced composite laminates. It calculates:

source archive: lamprop-1.3.2.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQBHsvxyEnfvsMMhpyURAorLAJ41dgIztK5ZuGwF5R0Tdi141DbnYQCfclXT
oF8YIkxF6TqCiFAGV2qW9XU=
=tt1V
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (lamprop-1.3.2.tar.gz) = 97b7297d09aeb0ab00e867f3b651e516
remarks: This program requires variable-length automatic arrays. These are supported in gcc since version 2.95 (at least, I do not have an earlier version at hand to check). They are also part of the C99 standard. HTML output is supported since version 1.0.0. Version 1.0.2 adds some small improvements to the LaTeX output. Version 1.1.0 adds partial output of engineering properties or matrices. Version 1.1.1 fixes the spacing in the displacement vector of the LaTeX output. Version 1.1.3 contains some fixes to the LaTeX output. Version 1.1.4 is compiled with improved matrix routines. Version 1.1.5 consists mainly of small code cleanups, and adds a Slackware package. Version 1.2.0 adds the printing out of additional data like area weight and resin consumption. Version 1.3.0 switches to a BSD-style license, and has some build and documentation improvements. Release 1.3.1 has some changes to make it compatible with the FreeBSD ports infrastructure. Release 1.3.2 has some manual page updates and a new formatting option for LaTeX output.

win32 binary (with source): lamprop-1.3.2.zip
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQBHsvv+EnfvsMMhpyURAqSOAJ9YcVLZVRBH7CJcaBERCEyGZOVH5ACgkrBR
1nj/eh31qZyKvUWTTSbtcRY=
=wJkX
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (lamprop-1.3.2.zip) = d4fa1a9a79b00b20100ca20200da4d1b
remarks: This is a win32 binary of version 1.3.2. It has compiled with a mingw32 cross-compiler.

cost

This program measures the cost (in clock cycles and nanoseconds) of fundamental operations in computer programs. The operations range from simple integer mathematics to C library functions. It is relatively simple to add new tests, even for programmers new to C.

It was inspired by §7.6 of The Practice of Programming (ISBN 0-201-61586-X), by Kernighan & Pike.

To build it, unpack the tar-file with "tar -xzf cost-1.0.2.tar.gz". Enter the cost directory and give the "make" command. If that works, give the command "./cost" to run the program.

source archive: cost-1.0.2.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA8NyDLEnfvsMMhpyURAooTAJ9GWnAHsXzUQs/CJEIhy7eso803jgCdH9pC
TgyZco1nqSrFBMKpRTHHolQ=
=e8cL
-----END PGP SIGNATURE-----
            
MD5 checksum: 7724ae6fb0f2a03405200b17cc0e325d
remarks: Requires a Pentium (or newer) x86 CPU for the timing functions. (An Athlon also works). Do not add optimizations to CFLAGS in the makefile; most tests will be optimized out that way.

onepad

This is a set of programs to encrypt files using one-time-pad encryption. This is an old but theoretically impossible to easily break way of encryption. I came across this method in Neal Stephenson's Cryptonomicon.

It works by XOR-ing every byte in the cleartext message with a byte in the key. As long as every key is only used once, and the key is random, this is supposed to be unbreakable.

However, you need a secure way to exchange keys with the intended recipient. If a third party intercepts the key, it can read the messages.

These programs work, but the genpad program relies on the /dev/random device to generate random keys. So the quality of the key and therefore the safety of this encryption method depends on the randomness of the /dev/random device on your system. So I cannot guarantee that the generated keys are totally random. Therefore, if you need really good encryption, use something like ccrypt or GNU Privacy Guard. These have been written, tested and pounded on by a lot of people, probably smarter than I am. :)

source archive: onepad-1.1.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (FreeBSD)

iD8DBQBCa1t8EnfvsMMhpyURAqcBAKCPCUBi4eak+szohhE7MHyVpjWD1ACeJIf6
CVD2fGQvi0Q6fiJv1Uhr1kM=
=1yz2
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (onepad-1.1.0.tar.gz) = a9e0430256c8c70cb7d0fdb99703821a
remarks:

The genpad program in this package requires the /dev/random device.

1.0.0: Changed the genpad program so that keys of any given length can be generated. The invocations of the programs have changed, so this release is not backwards compatible with version 0.2.1

1.1.0: Changed to a BSD-style license. Makefile changed to build with BSD or GNU make.

dosrestore

This program extracts the contents of backups made with the old DOS backup program.

I wrote it to save some files from a couple of old backups I had laying around. It has been tested to work correctly on those backups, which have been made with DOS 5 or thereabouts.

source archive: dosrestore-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQA+9YJ8EnfvsMMhpyURAoNaAJ4gFRF/zaNOSVt376Wl3susgzC2WwCgpvSo
EeLlzSTPplCRBXZTHZ83/Uw=
=sZsu
-----END PGP SIGNATURE-----
            
MD5 checksum: 84335189de7ae77b68d0cc40f3a6c8a3 dosrestore-1.0.0.tar.gz
remarks: It parses only the information which it needs from the backup files, i.e. file names and sizes. The backup control file contains extra info, probably file dates and times, but those are not parsed in this version.

gfontsel

This program is a simple wrapper around the GTK+ 2 font selection dialog. It allows you to select a font. The font name is written to the standard output in the GTK+ 2 font naming scheme.

source archive: gfontsel-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQA/gDNHEnfvsMMhpyURAmPpAKCs61r6S/HCYRu6QcmiTUKr80NwTQCeOxz3
DIN+4GTDszNGakFu2SWiwbQ=
=EIU9
-----END PGP SIGNATURE-----
              
MD5 checksum: d68c4d377a7dbb01243c6c53f33618e1 gfontsel-1.0.0.tar.gz

gcolorsel

This program is a simple wrapper around the GTK+ 2 color selection dialog. It allows you to select a color. The color is written to the standard output in hexadecimal RGB triplet, e.g. #FF8F00.

source archive: gcolorsel-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQA/gDLtEnfvsMMhpyURAiZaAJ4gMMXDvisoEDzw4tc9f71OytGoRACeMllp
a4uAGuWDROewLb4pU7tb/pw=
=CqIb
-----END PGP SIGNATURE-----
              
MD5 checksum: 65bf40a51feea56060492aaca81b9963 gcolorsel-1.0.0.tar.gz

stl2pov

The purpose of this program to generate a POVray mesh from a STL file.

source archive: stl2pov-2.4.3.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (FreeBSD)

iEYEABECAAYFAknN5rQACgkQEnfvsMMhpyU8uQCglycJHGlSEiQ1NyVkSdmgNjvM
5AEAoIF2dZ0nYw03/lwLR7wmVM7agp03
=C3N5
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (stl2pov-2.4.3.tar.gz) = 377c8aa80e16daf634fee62320f4b4bc
remarks: 2.4.3: Fix reading big binary files on windows. 2.4.2: Reduced some errors to warnings. Made the program somewhat more informative. 2.4.1: Add status reporting to monitor progress, especially on big files. 2.4.0: Add option to set allowed distance between vertexes that are assumed to be the same. 2.3.0: Follow the new syntax for povray: use 'triangle' instead of 'facet'. 2.2.0: Changed to BSD-style license. Makefile changed to build with BSD or GNU make. 2.2.1: small changes for building in FreeBSD ports tree. 2.3.0: Chase mesh syntax change in povray.

win32 binary (with source): stl2pov-2.4.3.zip
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (FreeBSD)

iEYEABECAAYFAknN5mkACgkQEnfvsMMhpyWx/QCfT/hCy5amhCR3zlGVnivnyt+T
fmEAoKUV/Zu7bEA4oYBI5l5gtOFdQ7il
=nDwP
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (stl2pov-2.4.3.zip) = f58401852ba49039522e5a23fe310dee
remarks: This is a win32 binary of version 2.4.3. It was compiled with a mingw32 cross-compiler. This version contains important windows-specific bugfixes. Please update!

rrm

The purpose of this program is to really remove files. It overwrites the file's contents with zeros, renames the file to a random name and unlinks the file.

Although claims have been made that overwritten (as opposed to deleted) files can be easily retrieved, based on Guttman's 1996 USENIX paper, that doesn't really hold true for modern drives. In an epilogue to his abovementioned paper Guttman states that:

Any modern drive will most likely be a hopeless task, what with ultra-high densities and use of perpendicular recording I don't see how MFM would even get a usable image, and then the use of EPRML will mean that even if you could magically transfer some sort of image into a file, the ability to decode that to recover the original data would be quite challenging.

Therefore I think that overwriting a file with zeroes will destroy it beyond practical retrieval.

I would like to point out that using on-disk encryption to protect your data would defeat the most advanced data retrieval procedures because even successfully retrieved encrypted data cannot be read without the encryption key. On FreeBSD I use geom_eli for disk encryption. Linux and windows users could try truecrypt.

source archive: rrm-1.0.2.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.10 (FreeBSD)

iEYEABECAAYFAklxvMYACgkQEnfvsMMhpyWS/gCgkiR3QIsozhH075Ky656GNT5L
N+wAn0p2hmgkxALcOZIZmAnYlgVHh9W1
=g/Eb
-----END PGP SIGNATURE-----
            
MD5 checksum: MD5 (rrm-1.0.2.tar.gz) = 0e06996b2aa41b976ac61895aa0b3fde
remarks: 1.0.2: Use srandomdev(3) to initialy random generator. Don't allow null characters in random generated filenames.
1.0.1: Fix BUGS section in manpage.
1.0.0: First public release. Added overwriting the filename with random characters.

Libraries

These libraries listed here are source distributions, which you'll have to compile yourself. This shouldn't be very difficult since every library comes with a Makefile. Note though, that you have to have your distribution's C development packages installed. Simply unpack the packages with "tar -xvzf filename.tar.gz". Change into the directory which is created by the unpacking process, read the README file and type "make". These libraries can be built as static or shared libraries. The Makefile can also install the libraries for you, if you invoke it as "make install".

liblauch

This simple library enables you you launch another program from within a program. It handles the intricacies of fork(2) and execve(2) for you. It returns a couple of pipes that are connected to the launched program's stdin and stdout. It also contains a function to terminate the launched program.

library: liblaunch-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA7dqrKEnfvsMMhpyURAoVEAJ4jc9Hwl6mpuDdjVp3nNt5HK2BnSgCdFxgC
O1f/z3xlnSeTgt9sGnkm/NA=
=ymHk
-----END PGP SIGNATURE-----
            
MD5 checksum: 531d52914f330e6acac46e737ac4a69c

libcomm

The purpose of this library is to facilitate handling structured messages between programs. The messages consist of three parts: a keyword, a body and a delimiter.

An example of the usage of this library might be to facilitate the communication between a GUI front end and a program doing calculations in the background (the "back end").

Since the messages are human-readable (as opposed to shared memory or binary messages), it would enable the back end to be tested separately from the front end, either by a human or by a testing script.

library: libcomm-1.0.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA7dqq2EnfvsMMhpyURAiLbAJwI7NmmDPa5ZsNpD2iBBxzE9eqhigCgiYdH
BKbZm6yyMWG94jmf6DuCD8I=
=16NY
-----END PGP SIGNATURE-----
            
MD5 checksum: c5edf11a6620538c3e68b57fa1fdd7fb

The following libraries contain implementations of generic data structures. They are small enough to link into your program.

libdlist

This library implements a generic double linked list. This is a flexible data structure for storing information of different sizes. Since it is possible to add to and remove from the list at both ends, it can also function as a stack or a queue.

source archive: libdlist-1.0.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA7dqq/EnfvsMMhpyURAmNFAJ96hm9C58dfY8x4exerzV+7PcKqaACgjrND
zbnXp3B7spZEmE49zMnWq0o=
=ElIZ
-----END PGP SIGNATURE-----
            
MD5 checksum: ca8843c594f85e674e36025831fd8e23

libar

This is a generic array implementation. It is suitable for storing different bits of information of the same size. It grows as necessary. The whole array is contained in a single memory block for easy access and efficient memory usage.

source archive: libar-0.2.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQA7dqqpEnfvsMMhpyURAphNAJ4t5twVMhBzFQ/dqF/6MqYfJPcMmACgisiy
SOT87zkUnnMeD1IFmzYj1Js=
=WohH
-----END PGP SIGNATURE-----
            
MD5 checksum: a1128eccb84dfb22a2ddc2f1bbf231db

Miscellaneous

This contains everything that does not fit into the other categories.

Symbols for labeling chemicals

This package contains Encapsulated PostScript versions of the symbols used to label chemicals, according to EU directive 67/548/EEC Annex II.

symbols for labeling chemicals

It also contains a LaTeX template for printing 8 105x74 mm stickers, suitable for labelling chemicals, on an A4.

I wrote these symbols because he wanted to print some labels for chemicals, and the GIF's I found on the Internet did not scale very well to the required size.

archive: chemlabels-20030208.tar.gz
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)

iD8DBQA+RS8uEnfvsMMhpyURArIgAJ45E2mDLjSIGwT5UP1ptS+fS8sTWgCgqGTR
fhg2XM1e/SKhI2yDch8dDo8=
=4m2G
-----END PGP SIGNATURE-----
            
MD5 checksum: 5c969f2be6ae3d4aff73880c25a94583 chemlabels-20030208.tar.gz
remarks: These files are placed in the Public Domain.

Lua definitions for listings.sty

The listings package is a macro package for the LaTeX document preparation system that makes it easy to include software listings in a LaTeX document. It comes with built-in definitions for a lot of languages, and I'm using it extensively to show and include programs in my documents.

One of the languages that version 1.3c does not handle by default is Lua, a great little programming language that I discovered because it was chosen to extend pdfTeX into LuaTeX. Since Lua is easy to learn and quite fast, I find myself using it more and more. And since I wanted to list Lua code in some of my LaTeX documents I wrote a language definition file for Lua and placed it in the public domain:

archive: lua.def
GPG signature:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (FreeBSD)

iEYEABECAAYFAklPpf8ACgkQEnfvsMMhpyXFOQCdEuDNeTVP/0OUT59QX9rU+olf
Dj8An0MGNbjYGHNlLTf7L8sJ4wEdV0Xe
=a/wB
-----END PGP SIGNATURE-----
            
MD5 checksum: c8e12754d1b04f26110f90d436220e6f
remarks: Language definition file for making listings of Lua programs with the listings.sty package.
This file is placed in the Public Domain.

I have submitted it to the maintainer and it will eventually be included in future versions. You will need to download it to use it with version 1.3c or older.

Back to my homepage