FreeBSD's implementation via Frank Denis, with various cleanups and tweaks by me. ok deraadt@, guenther@; discussions and tweaks from many others jmc@ promises to help me further with the man pages in tree