This file lists software packages, with brief descriptions. The format is one line giving the package name, with additional lines giving path to the package directory (with a trailing slash) or the path(s) to the files (for things not sequestered in directories by themselves), with more lines, indented, describing it. All paths are relative to the directory this file is in. It's possible I've missed, or misdescribed, something here. If you have reason to think so, do please let me know. Programs in local-src/ have at least a minimal manpage; in most cases, it's even fairly useful. Other programs have varying degrees of documentation, usually in the form of a big comment at the beginning of the source. BOOTSTRAP local-src/BOOTSTRAP A shell script I use to help me bootstrap /local on a new system. Host-Name hacks/Host-Name.c Prints the machine's hostname, per gethostname(2), but (a) with the domain (all but the first component) stripped off and (b) with each sequence of alphanumerics lowercased except for the first character, which, if alphabetic, is uppercased. I use this for generating shell prompts. WHERE_I_CAME_FROM local-src/WHERE_I_CAME_FROM A template from which WHERE_I_CAME_FROM files for new packages can be created. X11 local-src/X11/ This is the X I use for client use, and server use on machines which aren't saddled with the disaster that is peecee video hell. It's stock X11R6.4p3 with some hacks; see the patches/ subdir for details. This includes my servers for the cg14 and s24 Sun framebuffers and for NetBSD/next68k on 2bpp "black" hardware as well as a bunch of fixes elsewhere. ab hacks/ab.c hacks/ab.doc A program for looking domains up in the abuse.net database. It uses the DNS interface and provides its own cache for use when abuse.net is inaccessible. (It warns if it has to rely on the cache, and warns separately if the cached info is old.) The .doc file sketches the format of the file in which the cache is kept. addr hacks/addr.c A program which takes a FQDN and prints out its addresses, if any. Prints nothing for nonexistent names or names which have no addresses. adjtime local-src/adjtime/ This is basically a command-line interface to adjtime(2). It's been a long time since I used it for much - these days, most of my time syncing is done with NTP - so it may have bitrotted. adt hacks/adt Takes timestamps in seven-letter base-26 form and prints them out per date(1), including support for +.... formats. (I have some software that records timestamps in this format.) Depends on cvtbase (qv) to do the conversion from base 26 to base 10. andsharp hacks/andsharp.c Decodes the &#nnnn; notation in wide use on the Web. Designed primarily to decode lightly obfuscated spammer URLs such as http://example.net. arc4crypt local-src/arc4crypt/ A command-line arcfour encryption program. Uses libarc4. argv0 hacks/argv0.c Runs a program with a given list of arguments. Useful largely because the list of arguments explicitly includes argv[0] as distinct from any part of the executable pathname. bgp-recv hacks/bgp-recv.c A rudimentary BGP listener. Work in progress. bigclk hacks/bigclk.c Draws an HH:MM:SS clock on an 80x24 (or 80x25) display using ASCII-graphics seven-stroke digits. Written to provide a digital clock that can be read from across the room on a text-only laptop console display. Goes to some minor trouble to ensure that it ticks exactly on second boundaries according to the local clock (useful on NTP-synced machines). bigprime local-src/bigprime/ Generates large primes. (Of course, the primality testing is only statistical, though pragmatic evidence suggests that it is stronger in practice than it is in theory.) binhex hacks/binhex.c Picks apart binhexed files. (Binhex is a binary-to-text encoding heavily used in the Macintosh world.) bitrev hacks/bitrev Copies input to output, reversing the order of the bits in each byte. Just a script providing suitable arguments to tr(1). blt hacks/blt.c A program a bit like dd, in that it copies blocks of data from input to output, but designed for greater speed. In particular, dd is single-threaded and does not overlap reads and writes. blt does. It works best when using large block sizes; my commonest use of it is reading disks. bps hacks/bps.c Copies input to output, slowly. Designed to view VT100 animated graphics on a VT100 emulator without needing to shove the data over a real serial line to slow it down enough to see what's happening. Takes a -bps argument, which it then divides by 10 and uses as a bytes-per-second value (10 since most serial line work uses 10 bits per character - one start, eight data, one stop). bsdlabel hacks/bsdlabel.c A program for manipulating NetBSD disklabels on disk, or disk images (or portions thereof) stored in files. The interface is so much more pleasant than disklabel's that I not infrequently use this instead of disklabel to repartition on non-Suns. (See sunlabel for Suns.) btoa local-src/btoa/ btoa and atob, binary-to-ASCII and ASCII-to-binary filters. buffer hacks/buffer.c A program to copy stdin to stdout, but with lots of buffering (effectively unlimited, through use of files, if not limited by the command-line options). c-publish local-src/c-publish/ This program handles maintenance of the symlink farms that are central to the local software paradigm I use. calc hacks/calc.src/ A calculator program that supports (a) very high precision (as high as 1023 digits), (b) floating point, and (c) bases from 2 to 255, all simultaneously. catblock local-src/catblock/ A program that copies stdin to stdout, like cat, but ensures the output is reblocked with a blocking factor specified on the command line. This is useful when writing to devices which aren't strictly stream-of-bytes devices. It was designed for use with tapes, but is also useful with things like disks. ccwrapper local-src/ccwrapper/ A wrapper program for cc which provides options to make it automatically find other localisms and the like. cg6 hacks/cg6 A few programs for talking directly to Sun framebuffers, mostly for the cg6, and some notes I've taken when experimenting. charcode local-src/charcode/ Contains two programs: char-to-code, which reads input characters and prints their codes, and code-to-char, which goes the other way. These turn out to be surprisingly useful. cidr hacks/cidr.c Takes IPv4 addresses and ranges on stdin and collapses them to a minimal set of CIDR blocks covering the same addresses, which it prints when it gets EOF. cmpstream hacks/cmpstream.c A program designed to compare data streams coming in on different file descriptors (instead of data streams stored in files). Of comparatively little use on systems with /dev/fd/. compare local-src/compare/ A program for comparing multiple directory trees, possibly on remote machines, optionally updating them. consoled local-src/consoled/ One of my attempts to handle serial-line consoles. Superseded in practice by serialconsole (qv) these days; I really ought to remove consoled entirely. copytape local-src/copytape/ A program for copying tapes to data files and back again, preserving blocking and tape-mark information. copytolog local-src/copytolog/ Copies its standard input to a file named on the command line, except it closes the file when no more input is forthcoming and re-opens it when more arrives. This is intended to write to logfiles, so they can be rotated away easily, and has a few options designed for such use. count local-src/count/ A program which counts. Has many options, such as padding and use of different bases. Useful to provide input to processing with programs such as sed or awk. I also find it useful to provide timing in some cases, as in to do something every fifteen seconds: count delay 15 | while read x; do ...; done crc hacks/crc.c Computes CRC (cyclic redundancy check) checksums, such as are used in various communication protocols and file formats to detect accidental corruption. (CRCs are cryptographically worthless; against deliberate corruption you need something more like SHA-*. The main advantage of CRCs is speed; they are far faster than anything crytographically strong, and good enough for most cases of accidental corruption.) crypt hacks/crypt.c A command-line interface to crypt(3). Cf pw. csplit hacks/csplit.c Somewhat like split(1) -b, but slightly more flexible. (It was written before I started using OSes which had split -b.) cvtbase hacks/cvtbase.c Converts between various bases. Supports very large numbers (hundreds or even thousands of digits) and any base from 2 through, I think, 255 - with that limit only because digits are single characters. darp hacks/darp.c A program for manipulating ARP tables. I'm not sure exactly what it does; I didn't add comments, I have forgetten what prompted it, and the purpose is not obvious on a 15-second skim of the code. Very similar to dparp (qv). descrypt local-src/descrypt/ Command-line DES/3DES encryption program. Uses libdes. distmult hacks/distmult.c A program designed to use multiple machines as a compute farm to run many commands (though it can be used for other purposes; see the comment header). dparp hacks/dparp.c A program for manipulating ARP tables. I'm not sure exactly what it does; I didn't add comments, I have forgetten what prompted it, and the purpose is not obvious on a 15-second skim of the code. Very similar to darp (qv). dtr hacks/dtr.c Command-line utility for manipulating the DTR line on serial interfaces. ether-unpack local-src/ether-unpack/ Postprocesses Ethernet captures which include packet data so as to pick the packets apart. Originally written for use with SunOS etherfind, it also understands BSD tcpdump format, and can also handle raw hexadecimal packet content dumps. fblt hacks/fblt.c "fblt A B C D E" copies E bytes from file A offset B to file C offset D. B and D are handled as off_t and thus can be greater than 2^32. (E too, though the utility of that is questionable.) filetimes hacks/filetimes.c A program for fiddling with file times. Its writing was prompted by a desire to do some interesting things with /usr/src timestamps - read the comment header for its capabilities. filter-enscript hacks/filter-enscript.c Takes text input and produces PostScript output. The interface to this program is a historical artifact; it is mostly through environment variables. findproc local-src/findproc Yet another "ps | grep" program, with a few frills (it always filters out the ps and findproc processes, searches only the COMMAND field, and has options to send signals or just print PIDs and the like). flock local-src/flock A command-line interface to flock(2), designed for reliable locking in shell scripts. fsm local-src/fsm/ A program for `compiling' parsers (written in a language based on ancient VMS's LIB$TPARSE facility) to C code. fullcontent hacks/fullcontent.c Takes fetched-from-the-Web files, with their HTTP response headers, and tells you which contain their full content per their Content-Length: headers. gh hacks/gh.c A small "grappling hook" program. This is one of the very first programs I use when setting up my software on a new machine. It's basically a very stripped-down netcat, supporting data transfer in only one direction (network to stdout) and numeric IPs only. git local-src/git/ This is the git version I use. It's based on git 1.6.4.1, but I've added various patches; see the various patch directories for details. gnumake local-src/gnumake/ This is the GNU make I use when I run into something (perhaps most notably git, qv) whose makefiles assume GNU make. halign local-src/halign/ A program designed to align columns in text. (The name is a deliberate allusion to TeX's \halign primitive, and the functionality is recognizably related.) ideacrypt local-src/ideacrypt/ A command-line IDEA encryption program. Uses libidea. identd local-src/identd/ This is the stock identd from the NetBSD 1.4T source tree I use, with hacks to support returning encrypted tokens rather than usernames or numbers (and picking apart such tokens, of course, without which they're not much use). iptunnel local-src/iptunnel/ A program for tunneling IP over UDP or TCP, for creating rudimentary VPNs. ktrmerge local-src/ktrmerge/ Merges multiple ktrace(1) output files, collating the trace records in chronological order according to their internal timestamps. This is useful to look at trace results from multiple separately-traced programs correctly interleaved in a single kdump run. lcs-cvt local-src/lcs-cvt/ A processor to run between the preprocessor and the compiler proper to support labeled control structure. For me, this is a feature I've added to gcc; this program is for people who want to compile my code but don't want to either use my hacked gcc or hack the version of gcc they're using. libCtree local-src/libCtree/ A tool designed for building command-line style interactive user interfaces. Supports tree-structured command sets with autocompletion and parameter provision and suchlike. I don't use it much any longer, and, indeed, it is fundamentally broken on some architectures I use. libarc4 local-src/libarc4/ An arcfour encryption library. libbase64 local-src/libbase64/ An base-64 encoding/decoding library. libblowfish local-src/libblowfish/ A Blowfish encryption library. libdes local-src/libdes/ A DES and triple-DES encryption library. libdsa local-src/libdsa/ A DSA and DSS library. libgmp local-src/libgmp/ The GNU multiprecision arithemtic package I use (which is version 2.0.2). There are a few patches, but they're mostly just mechanical ease-of-building patches. libidea local-src/libidea/ An IDEA encryption library. liblinuxcompat local-src/liblinuxcompat/ A library to provide Linux compatability in the face of some incompatabilities. At present, this means just what BSD calls funopen() and frieds and Linux calls fopencookie(). (I don't know who invented the functionality and who reinvented it rather than using the other API, so I don't know whom to blame for the NIH here, but it doesn't much matter.) libmd5 local-src/libmd5/ An MD5 hashing library. libparsedate local-src/libparsedate/ A library for comprehending date specs. Understands a relatively wide variety of input formats. libpng local-src/libpng/ Stock libpng. Doesn't even have any patches (as of this writing, at least). librijndael local-src/librijndael/ A Rijndael library; when used with suitable arguments, can be used for doing AES. librop local-src/librop/ An attempt to provide a rasterop package, suitable for use with in-memory images and framebuffers that provide such an interface. This is a work in progress; it is not ready for prime time, and may not even be in buildable shape. libsearchstr local-src/libsearchstr/ Fast string searching, the guts of mcgrep (qv). This is basically Boyer-Moore string searching. libsha local-src/libsha/ A SHA* (SHA, SHA-1, SHA-256, etc) hashing library. linktarget hacks/linktarget.c Takes the name of a symlink and prints out just the link-to string for it. Convenience for shell-scripts, better than ls -l "$@" | sed -e 's/.* -> //' on both efficiency and correctness grounds. This is basically what NetBSD 3.1 and newer (and possibly older) call readlink(1), though without having the generality of stat(1) available. livebackup local-src/livebackup/ My live backup software - basically, disk mirroring over the net used as a disaster-recovery mechanism, as I talked about at BSDCan in May 2005. (It's evolved a bit since then.) loginshell hacks/loginshell.c Simply runs its arguments, but bashes the first character of argv[0] to a -, which many shells interpret to mean that the shell is a login shell. lseek local-src/lseek/ A command-line interface to lseek(2). Occasionally useful in shell scripts. (I don't want this often, but, when I do, not much else will do.) mailshim hacks/mailshim/ Source to an email shim program. See its README for more. makefiles local-src/makefiles/ This "package" exports only one thing, an includable makefile designed to make building and installing programs easy. This is the which is ".include"d from the Makefiles for most of the other programs. makewrapper local-src/makewrapper/ This is a make(1) wrapper which runs the underlying make(1) with a suitable -m option to allow make to find the provided by the makefiles package. mcgrep local-src/mcgrep/ A string search program. When applicable, it is almost always the fastest program; in most normal uses, it examines only about 1/Nth of the bytes in the file, where N is the length of the string searched for. Uses libsearchstr. mcsh local-src/mcsh/ My shell. It's a NetBSD csh with command-line editing added. Rather severely under-documented. :( mcsh-linux local-src/mcsh-linux/ Linux csh with the command-line editing from mcsh added to it. This is basically the same thing as mcsh, except that I started with a Linux csh and re-merged my stuff. md5 local-src/md5/ A command-line MD5 checksummer. Uses libmd5. mfind local-src/mfind/ My find(1)-alike, with some extra features. mimeutils local-src/mimeutils/ Various small MIME-related utility programs. moussh local-src/moussh/ My ssh implementation. Uses a whole wack of libraries (libarc4, libblowfish, libdes, libdsa, libgmp, libidea, libmd5, librijndael, and libsha), all of which are also available here. Also can be built with its own large-number arithmetic, obviating the need for libgmp (but taking a performance hit). msh hacks/msh/ A shell I'm working on. Very much a work-in-progress. mtar local-src/mtar/ My tar(1)-alike, with some extra features. mua hacks/mua/ The mail user agent I use. Heavily designed around my use cases. Poorly documented. :( multi hacks/multi.c For piping a list of commands into; executes them, except that it executes multiple commands in parallel. (This speeds things up in many cases, such as fetching things from many different distant machines, though for some things, such as local-CPU-bound commands, it merely increases contention and thus makes things slower.) nc local-src/nc/ Yet Another netcat. This one is TCP-only (or more precisely stream-only; it has some support for AF_LOCAL sockets), but relatively featureful as far as TCP connections go. netpbm local-src/netpbm/ This is mostly stock netpbm, but with a bunch of patches. pdisk hacks/pdiskd.c hacks/pdiskf.c hacks/pdiski.c These work with my pseudo-disk driver. pdiskd and pdiski cooperate to provide a remote network disk facility; pdiskf provides more or less the same functionality the vnd driver does, except it does so through the pdisk driver instead (and thus, eg, works when the backing file has holes). pnmprogs local-src/pnmprogs Assorted programs to manipulate PNM files. See also netpbm. ppmplot local-src/ppmplot/ A plotting program somewhat akin to gnuplot, but less interactive and with finer control over the resulting plot. pppoe local-src/pppoe/ My PPPoE implementation. Runs mostly in userspace. probepartsize hacks/probepartsize.c Determines the size of something - by design, a disk partition - by reading blocks at various offsets, doing binary search to find the last readable point (or, more precisely, some point with a readable block before it and an unreadable block after it). pw hacks/pw.c A command-line interface to crypt(3). Cf crypt. pwdb local-src/pwdb/ Maintains a database of data blobs, together with access grants for various users to be able to see them. Originally designed for an ISP to handle things such as maintainer logins on co-lo machines. qsubst local-src/qsubst/ Query-replace, modeled loosely after the query-replace facility present in most versions of emacs, but better suited to mass changes across many files. Originally written to rename routines used in many files throughout a software project. rdiff hacks/rdiff.c diff(1) but accepts machine:filename syntax for files. Depends on diff(1) accepting /dev/fd/ "filename" arguments (and /dev/fd/ support, of course); also depends on being able to cat remote files, which assumes a few things about the remote machines and the shells and programs available on them. refold-for-make hacks/refold-for-make.c Noddy little utility for reformatting "VAR = val val val..." lists of files in Makefiles. renumber hacks/renumber.lex hacks/renumber.lex.c Replaces numbers in its input, so as to make them consecutive. I use this most for re-sequencing a string of #defines after insertions or deletions. rfprobe hacks/rfprobe.src/ Dumps out RAIDframe disk labels. Deals with numerous interface botches; see the internal comments for details. rip6adv local-src/rip6adv/ A small and simple utility to advertise RIP6 routes. Does not listen to anything; useful mostly for injecting routes into a RIP6-using cloud when the routes are present by a means not visible to the full-fledged RIP6 speakers in use. ripadv local-src/ripadv/ A small and simple utility to advertise RIP routes. Does not listen to anything; useful mostly for injecting routes into a RIP-using cloud when the routes are present by a means not visible to the full-fledged RIP speakers in use. rotatelog local-src/rotatelog/ Yet another logfile rotation script. Keeps old logfiles bzip2ed. rsync local-src/rsync/ Stock rsync, but with a handful of fixes. secretsplit local-src/secretsplit/ A secret-splitting program, using the "polynomial over Z_p" algorithm sketched in Schneier's _Applied Cryptogrraphy_. Also, of course, does secret recovery from the resulting shares. see local-src/see/ A program a bit like cat -v, but designed around use of the standout mode available in most terminals and terminal emulators. serialconsole local-src/serialconsole/ A program designed to manage serial-line connections, intended for use with serial console lines but actually usable for other serial-connection things. Designed around a client/server paradigm; in particular, supports multiple client connections to a single line via a single server. sha local-src/sha/ A command-line SHA* checksummer. Uses libsha. should-set-TERMCAP hacks/should-set-TERMCAP.c A program which decides whether I want to set $TERMCAP. Has a number of policy issues wired into the code; if you don't want $TERMCAP set based on the same rules I use, you want to either ignore this or hack on it. showargs hacks/showargs.c Simply prints its arguments. Useful when you're trying to find out what arguments program A is running program B with. skipcat local-src/skipcat/ Copies stdin to stdout, like cat, but can optionally skip some number of bytes and quit after copying some (other) number of bytes. smtpconvo hacks/smtpconvo.c Command-line utility for carrying out the client side of a normal mail-send attempt with more-or-less arbitrary parameters, such as envelope-from address, body data, etc. spam-a hacks/spam-a.c Performs rDNS mapping, including cross-checking the resulting name(s) against the fDNS. So named because the motivating (and still most common) use is while investigating spam. splitmerge local-src/splitmerge/ A utility for working with media such as tapes or floppies and files too large to fit on them. stripheader hacks/stripheader.c Takes fetched-from-the-Web files, with their HTTP response headers, and strips the header. (If the input doesn't begin with something recognizable as an HTTP header, degenerates to cat.) sunlabel hacks/sunlabel.c hacks/sunlabel.doc A program for manipulating Sun disklabels on disk, or disk images (or portions thereof) stored in files. The interface is very similar to bsdlabel (qv). Its major advantage over disklabel on Sun ports is the interface; on non-Sun ports, it provides a way to manipulate Sun-compatible labels even if the kernel doesn't know anything about them. trunc local-src/trunc/ A simple command-line interface to truncate(2). udpfx hacks/udpfx.c Transfers files over UDP. I wrote this for a case where TCP has a variety of problems - which shouldn't happen, but sometimes does. udpfx has unlimited patience and never sends packets larger than somewhere between 500 and 600 bytes. On the down side, it has no congestion control either. urlenc hacks/urlenc.c Decodes %xx escapes, designed to decode obfuscated spammer URLs such as http://e%78am%70%6ce%2enet/. wait-for local-src/wait-for/ Takes a list of PIDs on the command line and waits until they all exit. wav hacks/wav.c A utility for cracking/building WAV files. websend hacks/websend.c Generates an HTTP response header, followed by a file's contents. Designed to be used with nc's -cmd, -server1, or -server options as a kind of mini-webserver (see nc). wi hacks/wi.c An interface to whois that checks whois.iana.org for the TLD to figure out what whois server to use. (I deliberately don't try to do anything smart in the cases where whois.iana.org doesn't report anything; any TLD that can't be bothered to tell IANA where its whois server is is rogue enough already, to me.) winclk hacks/winclk.c Prints a clock which ticks once a second, printing \r but not \n between ticks. Designed to be put in a borderless one-line stay-in-front window when using window(1). wraphfile local-src/wraphfile/ Adds a #ifndef/#define/.../#endif wrapper to a .h file.