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.
	* 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.
	
