0.43
	* Busybox can now work perfectly when /proc is disabled, thereby 
	    saving a bunch of memory (kernel /proc support is not thin).  This
	    is done by making use of some nice kernel patches I wrote up to
	    support the features that busybox requires and that /proc usually
	    provides.  To enable this, turn on BB_FEATURE_USE_DEVPS_PATCH and
	    patch your kernel with the devps patch in the kernel-patches/
	    directory. 
	* Wrote basename, killall, and uptime.
	* Added freeramdisk, which will free up all memory associated
	    with a ram disk.  Contributed by Emanuele Caratti <wiz@iol.it>
	    and then adjusted a bit by me.
	* Added tr and dirname from John Lombardo <john@deltanet.com> 
	* tar wouldn't create directory entries that don't end in '/',
	    now it does (thanks to Avery Pennarun <apenwarr@worldvisions.ca>)
	* Several fixes from Pavel Roskin <pavel_roskin@geocities.com>:
	    -  When `tail' fails to open a file it now exits.
	    - When `syslogd' is given the `-n' option it should still use 
		fork() for running klogd.
	* nslookup types are now changed to u_int32_t (instead of uint32_t)
	    changed per a patch from Pascal Bellard <pascal.bellard@ascend.com>
	* Fixed "du" so it gives the same answers as GNU "du" (busybox du used 
	    to count hard-linked files more then once).  Many thanks to 
	    Friedrich Vedder <fwv@myrtle.lahn.de> for the fix.
	* Removed /proc dependancies for init and free (while maintaining 
	    exactly the same functionality).  /proc takes up 90k of kernel 
	    space, so it is nice to avoid using it at all costs.
	* init no longer tries to mount /proc (unless there is less the 1 meg 
	    free).  Use of /proc (or not) is policy that should be set up in 
	    /etc/fstab (or in hardcoded scripts), not in init.
	* Fixed rebooting when init runs as an initrd.
	* Fixes and updates from Karl M. Hegbloom  <karlheg@debian.org>
	    - update.c rewritten to look more like update-2.11
	    - moveed the inode hash out of du.c and into utility.c to make 
		it a common resource that can be used by other apps.
	    - cp_mv.c now checks inodes to see if a source and dest are
		the same, and prints an error (instead of endlessly looping).
	    - mv now attempts to do a rename, and will fall back to doing
		a copy only if the rename fails.
	* Several fixes from Pavel Roskin <pavel_roskin@geocities.com>:
	    - Fixes to sort.  Removed "-g", fixed and added "-r"
	    - Fixes to the makefile for handling "strip"
	* An initial telnet implementation was added by 
	    Randolph Chung <tausq@debian.org>.
	* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
	* ps now supports BB_FEATURE_AUTOWIDTH, and can adjust its width
	    to match the terminal (defaults to width=79 when this is off).


	-Erik Andersen


0.42

        * Fairly massive restructuring of umount.c to deal with remounting 
	  busy devices read-only. Adds a -r option to control that; it is 
	  optionally compiled in with BB_FEATURE_REMOUNT
	* Added a bunch of functions to mtab.c to interact with the
	  {get,set,end}mntent interface; as it turns out, those functions do
	  not appear to be re-entrant, and that causes a lot of problems with
	  the way umount was originally written.
	* Makes init send TERM and KILL (instead of HUP and KILL) on reboot
	  to be more consistent with sysvinit
	* Changes to init.c to use the new -r option to umount. Also increased
	  the sleep time between the time the TERM and KILL signals are sent

        - Randolph Chung


	* cp.c, mv.c: removed, replaced by cp_mv.c which has been
	    extensively rewritten from the original cp.c.
	* Fixed cp and mv so if the source and destination are a the
	    same directory it will print an error and continue.
	* Also added a warning message to the `mv' usage string saying that
	    this is not GNU mv, and it will break hard links. cp also breaks
	    hard links.
	* ln.c: implemented `-n' switch, no-deref symlinks.
	* include<sys/param.h>: and use PATH_MAX everywhere.  busybox: File
	* name buffer overrun guards to prevent future crashes.
	    - Always check exit status.
	    - Purge all use of `creat()', replace with `open()'.
	* utility.c 
	    - recursiveAction was overriding the value of followLinks thus
	      ignoring it.
	    - isDirectory now takes a followLinks boolean, updated all callers
	    - copyFile had the followLinks logic reversed.
	* messages.c: New file. Put common error message strings all in
	    one place in an attempt to shrink the binary a little.

	-Karl M. Hegbloom


	* changed fsck_minix.c to reduce its .bss size significantly
	  -beppu -piptigger
	* Made tar creation support in busybox tar optional.  You no longer
	* _have_ to put a "-" in front of tar options.  Tar could inadvertently
	* change permissions and ownership on
	    certain directories pointed to by symlinks.
	* Made grep and grep -h do the right thing wrt printing
	    the file name (it failed to print files names in many cases).
	* Fix a namespace aliasing problem wereby if du was built in, the 
	    symlink for both du and dutmp would be installed, or then rm was
	    built in, the symlinks for both rm and rmmod would be installed.
	* Added a closelog() to init.c after loging -- fix thanks to 
	    Taketoshi Sano <kgh12351@nifty.ne.jp>
	* Rewrote and simplified logger.  Added the "-t" option, and made it
	    behave itself a bit better.
	* Optional support contributed by Ben Collins <bcollins@debian.org> 
	    for the kernel init chroot patch by Werner Almesberger, which
	    allows init to chroot to a new device, and umount the old one.
	* Fixed bug that wouldn't let one chown a symlink -- it would
	    always dereference before.  -beppu
	* Fixed a bug where init could have reference already freed memory.
	    Found and fixed by Taketoshi Sano <kgh12351@nifty.ne.jp>
	* Several contributions from Friedrich Vedder <fwv@myrtle.lahn.de>
	* Added (and documented) "-n" option for head
	* Cleanup for a number of usage messages -- also 
	    contributed Friedrich Vedder <fwv@myrtle.lahn.de>
	* Cosmetic fix to busybox.c (Don't print a comma at the
	    end of line if there are no more application names).
	* Fixed a stupid bug in "head" option handling ("head -n" 
	    would segfault).
	* Moved commonly used functions "xmalloc()" and "exit()"
	    to utility.c (with proper #ifdef's).
	* Created a tiny tail implementation, removing -c, -q, -v, and making
	    tail -f work only with a single file.  This reduced tail from 6k to
	    2.4k.  The bigger/more featured tail can still be had by disabling
	    BB_FEATURE_SIMPLE_TAIL in busybox.defs.h
	* Ping now falls back to doing the right thing if /etc/protocols
	    turns up missing.
	* Fixed mount and umount.  Previously they could leak loop device 
	    allocations, causing the system to quickly run out.  Fix for umount
	    by Ben Collins <bcollins@debian.org>, and mount was fixed by me.
	* ls formatting on eight charactor user names fixed by 
	    Randolph Chung <tausq@debian.org>.
	* cp could, when copying symlinks, change permissions of the
	    files pointed to by the symlinks.
	* Several fixes from Pavel Roskin <pavel_roskin@geocities.com>:
	    - `chown' with 1 argument displayed the error incorrectly
	    - `fdflush', `length' and `printf' crashed if run without arguments
	    - `fdflush' tried to flush itself using *argv
	    - added "skip" and "seek" to dd.
	    - ls no longer messus up output when combining files and
	      directories on the command line 
	* swapoff -a was not working.  Now it is.  
	* init did not cleanly unmount filesystems on reboot.  Now it does.  
	* "sed -ne s/foo/bar/" worked but "sed -n -e s/foo/bar/" didn't.
	    Now both work.
	* Some architectures (PowerPc) assume chars are unsigned, so they could
	    not distinguish between EOF and '\0xFF' in sed.  Sed now uses ints.
	* Began converting error handling to use some common routines
	    in utility.c
	* syslogd now has better message handling and ignores SIGHUP.
	* install.sh had a bug preventing installation to the specified
	    target directory.  Fix from Gilbert Coville <gilbert@mvista.com>
	* You can now spefify alternative strip commands -- change 
	    also from Gilbert Coville.


	-Erik Andersen

0.41
	* New Apps: wc, hostid, logname, tty, whoami, yes -- all contributed 
	    by Edward Betts <edward@debian.org>
	* Fixed a bug in both cp and mv preventing 'cp foo/README bar'
	    type commands (file in a directory to another directory) from
	    working.
	* Fixed a logger bug that caused garbage to be written to the syslog 
	    (unless you used busybox syslog, which hid the bug).  Thanks to
	    Alex Holden <alex@linuxhacker.org> for the fix.
	* /bin/true and /bin/false were echoing a blank line when run.  
	    Now fixed.
	* mkdir -p would print an error when asked to mkdir an existing dir
	    with no interveining subdirectories.
	* Fixed "syslogd -O" so that it works.  Added -o loop option for mount,
	* and support in umount for loop
	  devices. Support is toggled by MOUNT_LOOP feature -- Ben Collins
	  <bcollins@debian.org>
	* Several fixes from Marco Pantaleoni <panta@prosa.it> compile in
	* fullWrite() not only if BB_TAR is defined, but also
		if BB_CP or BB_MV are (fullWrite() is referenced by copyFile())
	    * add some compiler optimizations to further reduce executable size
		(as a side note, on my machines the largest code is generated
		by gcc 2.95.2 with -Os ! The smallest by plain gcc 2.7.2.3 with
		-O2 -m386 ...)
	    * Compile now won't fail if busybox.def.h defines 
		BB_FEATURE_LINUXRC but not BB_INIT.  (init_main used to be
		referenced, but not compiled)
	* Fixed a bug in setting TERM for serial console support.  TERM now
	    defaults to "ansi" for serial consoles.
	* Fixed a bug in handling the CONSOLE env. variable for serial
	* consoles.

	-Erik Andersen, Jan 15, 2000

0.40
	* New Apps: sort, uniq. -beppu New Apps: lsmod, rmmod -erik New Apps:
	* fbset contributed by Randolph Chung <tausq@debian.org>.  New App::
	* loadacm contributed by Peter Novodvorsky <petya@logic.ru>
	    for loading application character maps for Unicode fonts.
	* Major init re-work.  init now supports inittab (slightly different
	    but similar to sysvinit), allowing me to get all the policy out of
	    init and into the conf file.  It works just fine without inittab
	    being present, but if you dont like the defautl behavior you can
	    now do something about it.  Init is much cleaner as a result.
	* Fixed an bug in syslogd causing it to stop after 20 minutes. -erik
	* Fixed an embarrasing segfault in head	-beppu Fixed the embarrasing
	* failure of 'logger -p'. -erik Added the -s option to du -beppu
	* Re-worked the source tree a bit so it will compile under glibc 2.0.7 
	    with the 2.0.x Linux kernel.
	* Added 'grep -q' thanks to a patch from "Konstantin Boldyshev" 
	    <konst@voshod.com>.
	* Grep -i previously failed on UPPER CASE patterns due to a silly 
	    regexp implementation bug that is now fixed.
	* Fixed a bug where tar would set, and then clear SGID and SUID bits.
	* Fixed a bug where tar would not set the user and group on device
	    special files.
	* Fixed a bug where tar would not restore the time to files.  Fixed a
	* major security problem with tar -- it changed ownership 
	    of any file pointed to by a symlink to 777 (like say libc....)
	    Ouch!!!
	* cp and mv were very broken when moving directories.  I have rewritten 
	    them so they should now work as expected. 
	* sed now supports addresses (numeric or regexp, with negation) and 
	    has an append command, thanks to Marco Pantaleoni <panta@prosa.it>
	* Fixed dmesg.  It wasn't parsing its options (-n or -s) properly.
	* Some cosmetic fixes to ls output formatting to make it behave more
	    like GNU ls.
	* Fixed a stupid segfault in kill.  Several fixes from Friedrich Vedder
	* <fwv@myrtle.lahn.de>:
	    - Added gunzip -t, removed gunzip.c dead code,
	    - fixed several typos
	    - Glibc 2.0.7 and libc5 compile fixes
	* Fixed a bug where 'mknod --help' would segfault.
	    

	-Erik Andersen, Jan 07, 2000

0.39 
	* New Apps: ping, hostname, and mkfifo contributed by Randolph Chung
	    <tausq@debian.org>.  3 items off the TODO list!
	* I wrote free (just calls "cat /proc/meminfo").  Added tail, based on
	* tail from GNU textutils-1.19, but adjusted
	    to suit my evil purposes.  Costs 6k.  I'll make it smaller
	    sometime.
	* on reboot, init called 'umount -a -n', which caused errors
	    when BB_MTAB was not enabled.  Changed to 'umount -a', which does
	    the right thing.
	* init will now try to run /sbin/getty if it is present (for easy
	    integration with the about-to-be-released tinylogin.)
	* kill now behaves itself properly, added 'kill -l' to list signals 'ls
	* -l' was failing on long directories, since my_getid was leaking 
	    one file descriptor per file.  Oops.
	* Fixed rebooting from init.  I'd accidently left some debugging code
	* in
	    which blocked reboots.
	* Fixed reboot, halt (and added poweroff) such that they handle it when
	    init is not at PID 1 (like when running in an initrd).
	* Added a prelinary du implementation.  Some parameter parsing
	    stuff still needs to be added. -beppu (John Beppu
	    <beppu@lineo.com>)
	* Implemented tee.  -beppu Implemented head. -beppu

	-Erik Andersen, Dec 10, 1999

0.38
	* Fixed a segfault in 'umount -a' when a badly formed /etc/fstab
	    file existed.
	* df will not exit on error, but will stat all mounted filesystems.
	* Fixed tar so uid/gid/permissions on extracted tarballs will be 
	    correct.
	* Fixed find -name so it properly uses shell wildcard patterns 
	    (i.e. `*', `?', and `[]') instead of regular expressions, which
	    was causing some confusing and unexpected behavior.
	* Added klogd to syslogd, so now the log will contain both system and
	    kernel messages.
	* syslogd now creates the /dev/log socket to make sure it is there, and
	    is actually a socket with the right permissions.
	* I've taken a first step to making busybox not need the /proc 
	    filesystem.  Most apps don't need it.  Those that _require_ it, 
	    will complain if you enable them when you disable 
	    BB_FEATURE_USE_PROCFS.
	   
	-Erik Andersen, Dec 5, 1999

0.37
	* Wrote a micro syslogd, and a logger util (to log things to the syslog
	    from the command line or scripts)  With both compiled in, costs 4k.
	* Fixed 'make install' so symlinks are installed in their proper
	* locations.  Changed the build system slightly so that features can
	* now be enabled
	    or disabled from the busybox.defs.h header file, without trying to
	    compile in a source file named after that featue (unless that file
	    exists).
	* Several options are now moved into busybox.defs.h Now 'rm -R' and 'rm
	* -r' both work.  dd now properly handles input beyond 1 block from
	* stdin.  Fixed a bug where tar unpacked everything a directories.
	* Moved some code 
	    from createPath into mkdir where it belonged, thereby making tar
	    work properly.
	* Fixed an off-by-one bug in cat.  Given a list of file it wouldn't cat
	* out the
	    last file in the list.
	* Fixed 'ls -ln' so numeric group/uid are presented properly, and fixed
	* 'ls -l' 
	    so when uid/gid is not in /etc/{passwd,group} the numeric group/uid
	    are presented properly.  
	* Also added a TODO.


	-Erik Andersen, Nov 25, 1999

0.36
	* fixed dd so it properly defaults to stdin and stdout when no 
	    if= and of= are set (fix thanks to Eric Delaunay).
	* Don't try to close the file descriptor of a pipein tar. (fix also
	* from
	    Eric Delaunay).
	* Made createPath be quiet (again thanks to Eric Delaunay).  If
	* BB_CONSOLE_CMD_IF_RC_SCRIPT_EXITS is defined, then whatever
	    command you define it as will be run if the init script exits.
	* Updated install.sh to make it more robust (thanks to Adam Di Carlo)
	* NFS support added to mount by Eric Delaunay.  It costs 10k when
	* compiled
	    in, but that is still a big win for those that use NFS.
	* Made 'rm -f' be silent for non-existant files (thanks to Eric
	* Delaunay).  changed zcat.c to gunzip.c.  It now obeys the principle
	* of least surprise 
	    and acts as god intended gunzip and zcat to act.  They answer
	    --help and obey the '-c' flag.
	* Fixed a bug in mv which caused it to not move files when the
	* destination
	    was a directory.
	* Fixed a decimal-instead-of-octal bug causing mkdir to make
	* directories
	    with very wrong permissions.
	* chmod would overwrite file permissions instead of modifying them.
	    Now it properly modifies permissions.
	* Init now sends warnings destined for the console to /dev/console to
	* ensure
	    they show up on whatever the active console it.  Otherwise
	    important messages (for example that the system is rebooting) were
	    not seen when switched to a different VT.

	-Erik Andersen, Nov 17, 1999
	
0.35
	* gzip now obeys the principle of least surprise and acts like god
	* intended 
	    (i.e. it accepts a file name, answers --help, and obeys the '-c'
	    flag and only then outputs to stdout).
	* Fixed more.c to compile autowidth on sparc and set initial winsize 
	    to 0,0 in case the TIOCGWINSZ ioctl fails.  Fix thanks to Eric
	    Delaunay.
	* Fixed tar so it now works as expected (it had TRUE/FALSE backwards)
	* tar now accepts --help chmod, chown, and chgrp usage now works
	* General usage (i.e. --help) cleanups for most apps umount now parses
	* options correctly tar can now unpack tarballs containing device
	* special files, 
	    sockets, and fifos (though it can't pack them up) thanks to Matt
	    Porter.  Creating archives containing these is still left to the
	    interested student.
	* fixed up the license in more.c to properly point to Bruce Perens.

	-Erik Andersen, Nov  11, 1999

0.34
	* ls -l now displays link names outside the current directory,
	    Patch thanks to Eric Delaunay
	* init now properly handles sparc serial consoles and does a
	    better job of finding the real console device rather than using
	    /dev/console which doesn't support job control. Patch also thanks
	    to Eric Delaunay.
	* more started to read from stdin after the last file was finished, and 
	    options were not parsed correctly (fix thanks to Eric Delaunay).
	* more will now use the terminal size if BB_FEATURE_AUTOWIDTH is on.
	* rm wouldn't remove a symlink unless the symlink was valid.  This was
	    a side effect of the busybox 0.32 recursiveAction() fix.  Things
	    should now work correctly.
	* grep wouldn't grep stdin.  Now it does.  sed wouldn't sed stdin.  Now
	* it does.  sed was appending a \n to the end of lines with
	* replacements.
	    Now it doesn't do that.
	* ls -l now bypasses libc6 nss when displaying user/group names.
	    Now uses my_getpwuid and my_getgrgid.

	 -Erik Andersen, Nov  8, 1999

0.33
	* Fixed a bug where init could hang instead of rebooting.
	* Removed some debugging noise from init.c
	* Fixed ln so it works now (it was very broken).
	* Fixed df so it won't segfault when there is no /etc/fstab,
	* If BB_MTAB is not defined, df and mount will whine if /etc/fstab
	    is not installed (since they cannot fixup "/dev/root" to 
	    state the real root device name)
	* merged some redundant code from mtab.c/df.c into utility.c

	 -Erik Andersen, Nov  5, 1999

0.32
	* More changes -- many thanks to Lineo for paying me to work on
	    busybox.  If you have any problems please let me know ASAP at
	    andersen@lineo.com or andersee@debian.org
	* usage() now prints the BusyBox version.  This will help folks
	    realize that they are not in Kansas anymore.
	* Fixed mkdir -m option so that it works.  kill segfaulted w/o any
	* arguments.  Now it doesn't do that.  kill wasn't properly accepting
	* signal names.  It does now.  Added new apps chvt and deallocvt (I
	* should probably add open) Major rewrite of init.c.  Code is now
	* readable by mere mortals IMHO.  Wrote sed -- weighs only 1.8k (5.8k
	* with full regular expressions!).  Fixed a stupid seg-fault in sync
	* Fixed mount -- mount -a failed to parse and apply mount options Fixed
	* umount -n (patch thanks to Matthew Grant <grantma@anathoth.gen.nz>)
	* umount -a no longer umounts /proc Added BB_MTAB, allowing (at the
	* cost of ~1.5k and the need for a rw /etc)
	    folks to use a real /etc/mtab file instead of a symlink to
	    /proc/mounts.  mount, and umount will add/remove entries and df
	    will now use /etc/mtab if BB_MTAB is defined. 
	* Fixed a nice bug in recursiveAction() which caused it to infinitely
	    hunt through /proc/../fd/* creating new file descriptors if it
	    followed the /dev/fd link over to /proc.  recursiveAction() now
	    lstat's the file when followLinks==FALSE so it won't follow links
	    as the name suggests.  Fix thanks to Matt Porter
	    <porter@debian.org>.


	 -Erik Andersen, Nov  4, 1999

0.31
	* I added a changelog for version 0.30.  adjusted find internals to
	* make it smaller, and removed 
	    some redundancy.
	* Fixed a segfault in ps when /etc/passwd or /etc/group 
	    are absent.  Now will warn you and carry on.
	* Added in optional _real_ regular expression support (to be
	    the basis for a future sed utility).  When compiled in it adds
	    3.9k, but makes grep much more capable.
	* Checked out using nftw(3) for recursive stuff, but unfortunatly
	    it wasn't supported before GNU libc 2.1, and some folks use glibc
	    2.0.7 since it is much smaller than that latest and greatest.

	 -Erik Andersen, Oct 21, 1999

0.30
	Major changes -- lots of stuff rewritten. Many thanks to Lineo for
	paying me to make these updates. If you have any problems with busybox, 
	or notice any bugs -- please let me know so I can fix it.  These 
	changes include:

	Core Changes:
	    * busybox can now invoke apps in two ways: via symlinks to the
		busybox binary, and as 'busybox [function] [arguments]...'
	    * When invoked as busybox, the list of currently compiled in 
		functions is printed out (no this is not bloat -- the list has
		to be there anyway to map invocation name to function).
	    * busybox no longer parses command lines for apps or displays their
		usage info.  Each app gets to handle (or not handle) this for
		itself.
	    * Eliminated monadic, dyadic, descend, block_device, and 
		postprocess.  It was cumbersome to have so many programs
		cobbled together in this way.  Without them, the app is much
		more granular.
	    * All shared code now lives in utility.c, and is properly
		ifdef'ed to be only included for those apps requiring it.
	    * Eliminated struct FileInfo (the basis of monadic, dyadic, etc)
		so now each app has the function prototype of (da-dum): extern
		int foo_main(int argc, char** argv); which speeds integration
		of new apps.
	    * Adjusted the Makefile to make it easier to 
		{en|dis}able debugging.
	    * Changed default compiler optimization to -Os 
		(optimize for smaller binaries).

	App Changes:
	    * To cope with the new app function prototype and the removal of
		monadic, dyadic, etc, the following apps were re-written:
		    * cat - Works same as always.  chgrp, chmod, chown -
		    * rewrite.  Combined into a single 
			source file.  Absorbed patches from Enrique Zanardi
			<ezanard@debian.org> that removes the dependency on
			libc6 libnss* libraries.
		    * cp - Can now do 'cp -a' can can copy devices,
			pipes, symlinks, as well as recursive or non-recursive
			dir copies.
		    * fdflush - adjusted to remove dependancy on struct
		    * FileInfo.  find - Now includes some basic regexp matching 
			which will be the basic of a future mini-sed.
		    * ln - Same functionality.  mkdir - Added -p flag to
		    * feature set.  mv - rewrite.  rm - Added -f flag to
		    * feature set.  rmdir - Same functionality.  swapon,
		    * swapoff - Combined into a single binary. No longer
			uses /etc/swaps.  swap{on|off} -a uses /etc/fstab
			instead.
		    * touch - Same functionality.  date - adjusted with a patch
		    * from Matthew Grant <grantma@anathoth.gen.nz>
		to accomodate glibc timezone support.  I then ripped out GNU
		getopt.
	    * mkswap -- new version merged from util-linux.  Can now make
	    * >128Meg swaps.  Replaced the old and star, unstar, and tarcat
	    * with the tar 
		implementation from sash.   Now tar behaves as god intended it
		to (i.e. tar -xvf <file> and tar -cf <file> <dir> work).
	    * dd -- rewritten.  Can with with files, stdin, stdout.  Added the
	    * following new apps: loadfont -- added from debian boot floppies
	    * chroot -- added based on a patch from Paolo Molaro
	    * <lupus@lettere.unipd.it> grep -- I just wrote it.  Only matches
	    * simple strings ps -- I just wrote it.  Has _no_ options at all,
	    * but works.  fsck_minix, mkfs_minix -- added from util-linux, but
	    * I ripped out
			internationalization and such to make them smaller.
		    * sfdisk -- Added from util-linux (minus
		    * internationalization and such).  Probably some other
		    * changes that I forgot to document...

	 -Erik Andersen, Oct 20, 1999

0.29	
	This version was a messy pre-alpha.  stay away or it will bite you.
	 -Erik Andersen, Sep 24, 1999
	
0.28	
	mini-netcat (mnc) rewritten.
	
0.27
	Mount now supports -a, and -t auto.
	Mount now updates mtab correctly for 'ro'.
	More checks screen rows size, outputs bytes percentage.
	Printf added as module.
0.26
	Touch now creates files. -c option for no create.
	
