0.51pre
	* Sterling Huxley -- contributed a new vi applet!  This is a very
	    functional vi implementation in Only 22k.
	* Erik Andersen -- added env applet
	* Erik Andersen -- Split utility.c into libbb
	* Andreas Neuhaus <andy@fasta.fh-dortmund.de> -- fix for merging
	    kernel command line environment variables into child environment
	    for init.c
	* Matt Kraai -- Added a new 'shutdown' action to busybox init.  Now
	    you can specify arbitrary behavior for 'ctrlaltdel' without that
	    behavior needing to be a reboot.


	 -Erik Andersen, not yet released


0.50
	* Erik Andersen -- added ifconfig interface status reporting 
	* Erik Andersen -- Debian packaging updates
	* Erik Andersen -- lash environment variable expansion rewritten,
	    with lots of help/fixes/testing from Larry Doolittle.
	* Erik Andersen -- Fix use of busybox with dmalloc debugging lib
	* Erik Andersen -- fixed ls behavior for broken or very narrow terminals.
	* Erik Andersen -- stub umount2 and pivot_root if they are not available.
	* Erik Andersen -- libc5 fixes
	* Erik Andersen -- make init work with devfsd
	* Erik Andersen -- fixed df for nfs and dos where blksize = 512
	* Erik Andersen -- Make sure libpwd.a is linked _last_ so it 
	    overrides the system pwd/grp 
	* Christophe Boyanique -- added an optional egrep alias for grep.
	* Christophe Boyanique -- added optional 'rm -i' support.
	* Kenneth Chalmers and Erik Andersen -- fixed ln so it
	    behaves when given no arguments (prints usage) and when
	    given just one arg (tries to make a link in the cwd).
	* Magnus Damm -- added a tftp applet  
	* Magnus Damm -- powerpc support for busybox insmod.
	* David Douthitt -- fixed a build error in df.c when 
	    BB_FEATURE_HUMAN_READABLE was disabled
	* John Beppu -- wrote autodocifier.pl, which will be used to auto-
	    generate the documentation from the source code, making life
	    much simpler for all.
	* Magnus Damm <damm@opensource.se> -- Fixed an 'inner scope var
	    masking outer scope var with same name' bug that prevented 
	    the loopback device from being unmounted if mount() failed.
	* Larry Doolittle -- rewrote ifconfig to make it smaller 
	* Larry Doolittle and Erik Andersen -- cleanups to pristine source
	* Larry Doolittle -- many bugfixes resulting from regression testing
	* Gennady Feldman -- split syslogd.c into syslogd and klogd
	* Gennady Feldman -- make syslogd single threaded -- no more forking
	* Jeff Garzik -- getopt-ified rmmod.
	* Jeff Garzik -- glibc 2.2 warning cleanups
	* Jeff Garzik -- namespace pollution cleanup (staticified variables).
	* Erik Gustavsson <cyrano@algonet.se> -- allow env variables set on the
	    kernel command line to be inherited into init and its children.
	* Erik Habbinga -- fixed an uninitialized substitution delimiter in sed.
	* Chris Jaeger -- Makefile cleanup to make option setting less error-prone
	* Chris Jaeger <cjaeger@ensim.com> -- Carefully check NFS_MOUNT_VERSION
	    depending on what kernel is being used.
	* Quinn Jensen <jensenq@lineo.com> -- MIPS support for busybox insmod.
	* Evin Robertson -- new pivot_root applet 
	* Kent Robotti -- usage message cleanups
	* Kent Robotti -- reworked dos2unix/unix2dos
	* Evin Robertson and Manuel Novoa III -- reworked how usage messages 
	    are stored to save several k of space.
	* Matt Kraai -- Keep trying if an NFS mount fails 
	* Matt Kraai -- fixed insmod so it won't try to insmod directories.
	* Matt Kraai -- added nc listening support
	* Matt Kraai and David Douthitt -- reworked fine to support -type, 
	    -perm, -mtime, and other improvements.
	* Matt Kraai -- added find_applet_by_name and saved some memory thereby
	* Matt Kraai -- added chomp to reduce redundant code elsewhere
	* Matt Kraai -- Removed trailing \n chars from error_msg{,_and_die} messages. 
	* John Lombardo -- fixed OOM in insmod.
	* Glenn McGrath -- bypass /proc in mount, now uses sysfs. 
	* Glenn McGrath -- several updates to dpkg and dpkg-deb. 
	* Manuel Novoa III -- several size optimizations: parse_mode, 
	    process_escape_sequence, format, and get_kernel_revision. 
	* Manuel Novoa III -- rewrote ifconfig again to make it smaller still 
	* Manuel Novoa III -- added ifconfig -a, updated interface reporting
	* Vladimir N. Oleynik -- Fixed a bug where init set PATH incorrectly 
	* Vladimir N. Oleynik -- cleanups to route, cmdedit, mkdir, 
	    mkfs_minix, mkswap, chmod_chown_chgrp and utility.c
	* Vladimir N. Oleynik -- many fixes to cmdedit. so tab completion
	    is now working and general editing is much improved, and to
	    improve complex prompt handling.
	* Vladimir N. Oleynik -- added route status reporting.
	* Vladimir N. Oleynik -- fixed wget to use xfopen
	* Vladimir N. Oleynik -- new stty applet 
	* Vladimir N. Oleynik -- fixed find, it used to stop on perm errors.
	* Vladimir N. Oleynik -- locale forced to posix for scripts 
	* Vladimir N. Oleynik -- saved 128 bytes by moving error checking 
	    for several my_* functions into utility.c
	* Bjorn Wesen -- new ifconfig and route applet (taken from 
	    work done by Axis Communications).
	* Mark Whitley -- Added a 'How to contribute to Busybox' doc
	    and updated the style guide.
	* Mark Whitley -- implemented grep -A, -B, and -C
	* Mark Whitley -- overhauled the test suite.


	 -Erik Andersen, 15 March 2001
	
0.49

	* Matt Kraai -- new sort.c
	* Matt Kraai -- new tail.c
	* Glenn McGrath -- new 'dpkg-deb' applet
	* Glenn McGrath -- new ar code
	* spoon -- new watchdog applet
	* Vladimir N. Oleynik <dzo@simtreas.ru> -- fixed cmdedit.c so now 
	    scrolling and tab completion in lash work properly.  Also several
	    byte saving optimizations.
	* Erik Andersen -- disabled many less commonly used applets by default
	* Mark Whitley -- more thrashing about to get clean perror_msg usage
	* Matt Kraai -- new command line munging
	* Larry Doolittle -- keep some locales from messing up busybox.sh
	* Matt Kraai -- cleaned up dd and tail with new parse_number routine
	* Mark Whitley -- remove debugging messages from deallocvt
	* Matt Kraai and Mark Whitley -- new document "How to Add a New Applet 
	    to BusyBox"
	* David Douthitt -- fixed "grep -qv" bug
	* Larry Doolittle -- fixed insmod bug with old kernels
	* Matt Kraai -- logger remixed to use getopt, selection of stdin made 
	    util-linux compatible
	* Erik Andersen -- many more internal symbols classified static to 
	    avoid namespace pollution
	* Matt Kraai -- nc listening support
	* Erik Andersen -- made sed understand arbitrary regexp delimiters
	* Matt Kraai et al. -- more tar improvements and bug fixes, now 
	    handles regexp file exclusion
	* Larry Doolittle -- new script (multibuild.pl) to automate build rule
	    checking
	* Matt Kraai -- update/cleanup of the docs on how to use init
	* Erik Andersen -- renamed all sh.c symbols per the style guide, 
	    better if-then-else-fi handling
	* Erik Andersen -- cleaner division of labor between cmdedit.c and sh.c
	* Larry Doolittle -- shell data structure cleanup, fixed buglets
	    in read, exec, and piped builtins
	* Erik Andersen -- md5sum was broken in 0.48.  Now fixed (and doesn't 
	    use getline, shrinking static compiles (since nothing else used it).
	* ?? -- squashed memory leak in shell prompt handling
	* Mark Whitley -- Updates to style guide
	* Mark Whitley -- Big cleanup in utility.c: style guide compliance,
	    de-macro-ifying some variables and functions
	* Erik Andersen -- ls now honors BB_FEATURE_AUTOWIDTH so it can find
	    the width and height of the console.
	* Erik Andersen -- insmod now ignores -L and accepts the -o option.
	* Erik Andersen -- updates so you can now select from the Makefile
	    whether or not to use the system's passwd and group functions.
	    Since most systems use GNU libc, this can save you from having to
	    install the /etc/nsswitch.conf configuration file and the required
	    libnss_* libraries.  Adds 1.5k.  You can now, also, disable this, 
	    causing busybox to use the system's pwd.h and grp.h functions.


	 -Erik Andersen, 27 January 2001

0.48

	* Glenn McGrath -- tar now supports uncompressing tar files,
	    define BB_FEATURE_TAR_GZIP to use the -z option.
	* Matt Kraai -- fix all usage of TRUE and FALSE so all apps now
	    return EXIT_SUCCESS or EXIT_FAILURE to the system.
	    Now TRUE and FALSE are set to the C standard where TRUE=1.
	* me -- Fixed uname problem causing the kernel version to be
	    mis-detected (causing problems with poweroff, init,
	    and other things).  
	* Alcove, Julien Gaulmin <julien.gaulmin@alcove.fr> and 
	    Nicolas Ferre <nicolas.ferre@alcove.fr> -- insmod support on ARM 
	    and StrongArm, and suport for lsmod on older 2.0.x kernels.
	* Kent Robotti -- Renamed unrpm to original rpmunpack, so you can use 
	    an included shell script called unrpm as a front end to it.  There's
	    also a shell script called undeb included for debian packages.  
	* Matt Kraai -- fix an infinite loop with ls -aR
	* Larry Doolittle -- Shaved off about 100 bytes and 200 bytes heap 
	    from date.c.  Also document the "-d" option in the usage message.
	* Gennady Feldman -- fixed dd to use blocksize when reading/writing, 
	    (it was reading the whole thing and then writing it out).  Also 
	    updated usage information (was missing conv=notrunc) and added 
	    conv=sync feature.
	* Larry Doolittle (in collaboration with Matt Kraai) -- allow for a 
	    pristine source directory -- where all the .o files and such are 
	    not placed into the source tree.  Thanks Larry!
	* Larry Doolittle -- use the applet definitions in applets.h 
	    to autogenerate the applet function and usage prototypes.
	* Sebastien Huet, Arne Bernin, and Kent Robotti -- Add in tar -X and
	    fixed a bug breaking tar --exclude.  
	* Jonas Holmberg -- echo option handling made GNU-echo compatible
	* Aleksey Demidov <asd@ixcelerator.com> -- date option handling made 
	    GNU-date compatible
	* me -- Progress meter (optional) in wget
	* Doolittle/me -- programs invoked by full path name take
	    precedence over applets unless BB_FEATURE_SH_BUILTINS_ALWAYS_WIN
	* Gaute B Strokkenes <gs234@cam.ac.uk> -- applets found using a
	    binary search instead of linear search.  Much faster!
	* new applets: cmp readlink
	* Mark Whitley -- Removed advertising clause of Berkeley license
	    according to decision by the Regents of the University of
	    California; included reference
	* tail's confusing special treatment of single digit options removed;
	    people should use -n instead
	* Larry Doolittle -- \r handled now in echo and tr
	* Matt Kraai -- rewrite of uniq
	* Mark Whitley -- remix of xargs
	* Jim Gleason <jimg@lineo.com> -- fixed tar so it no longer breaks 
	    hard links.
	* Matt Kraai -- logger now logs all arguments, not just the first
	* Gennady Feldman -- syslogd no longer logs to localhost if compiled
	    for remote logging...
	* Richard June <rjune@ims1.imagestream-is.com> -- support for 'gzip -d'
	* various artists -- Other good stuff that I forgot to document.


	 -Erik Andersen, 13 December 2000

0.47

	* A bug in syslogd was fixed that allowed it to potentially fork-bomb
	    your system.  Anyone using 0.46 syslogd should upgrade.
	* Renamed busybox.defs.h to the more sensible "Config.h"
	* Improved portability between different libcs.
	* Many apps ported to use getopt()
	* Common handling of '--help'
	* All usage messages centralized.
	* Added a bunch of new commands:
	    * 'rdate' contributed by Sterling Huxley <sterling@europa.com>
	    * 'wget' contributed by Chip Rosenthal <chip@unicom.com>, 
		    <crosenth@covad.com> and Covad Communications
	    * 'getopt' from "Alfred M. Szmidt" <ams@trillian.itslinux.org>
	    * dos2unix, unix2dos, reset, and unrpm.c (and lots of help
		debugging) thanks to Kent Robotti <robotti@metconnect.com>.
	    * 'renice' command, thanks to Dave Cinege <dcinege@psychosis.com>
	    * 'xargs' (written by me)
	    * 'expr' contributed by Edward Betts <edward@debian.org>, based
		on GNY expr
	* lsmod now uses the query_module syscall, rather then /proc (me)
	* syslogd can now log messages to remote hosts -- patch thanks
	    to Gyepi Sam <gyepi@praxis-sw.com>
	* chroot can now call the builtin shell - Pavel Roskin <proski@gnu.org>
	* 'make install' now creates relative symlinks, and added a new
	    'make install-hardlinks' target to (tada) install hardlinks.
	* Rewrite of 'tail' to make it simpler, smaller, and more robust.  
	    It now weighs only 2.25k (3k when full featured).  The code is
	    cleaner too, thanks to Allen Soard <esp-software@mail.hypermart.net>
	* Add optional ls file sorting, thanks to a patch from 
	    Sterling Huxley <sterling@europa.com>
	* Fixed chmod option parsing so things like 'chmod -r /tmp/file'
	    now work (previously it thought -r was an option).  Doh!
	* Fixed tar handling of stdin and stdout
	* Renamed "internal.h" to the more sensible "busybox.h"
	* Preliminary support for GNU HURD.
	* Updated my devps and devmtab kernel patches for the latest 2.2.x
	    kernel, for those wanting to go proc-less.
	* Tons of other bugfixes.


	 -Erik Andersen, 25 September 2000


0.46

	* Better portability.  Now should compile cleanly with libc5, 
	    GNU libc 2.0 and 2.1, and various Linux kernels including 
	    2.0.x, 2.2.x, and to 2.4.0-test*. (patch for 2.4.x kernels
	    to make /proc/mounts behave included in the kernel-patches dir). 
	* Fixed a _horrible_ bug where 'tar -tvf' could unlink
	    local files that matched tarball contents!!!  Fix thanks 
	    to Marius Groeger <mgroeger@sysgo.de>
	* Fixed a nasty bug in tar when could mess up saved symlinks.
	* Fixed tar creation support when reading from stdin ('tar -cf - . ') 
	    thanks to Daniel Quinlan <quinlan@transmeta.com>
	* Updates to handle Linux 2.4.0 kernels (kludged around the
	    "none" entries in /proc/mounts, added a hack to make sysinfo
	    work with both old and new kernels).
	* Fixed insmod module option parsing for options lacking an '='.
	    Fix thanks to Marc Nijdam <marc_nijdam@hp.com>
	* Fixed segfault with 'cut -f 1 -d:' and added 'cut -s' suport.
	    Fix thanks to Arne Bernin <arne@matrix.loopback.org>
	* Several fixes from Marius Groeger <mag@sysgo.de>
	    - Added support for "sh -c command args..."
	    - Fixed globbing, i.e. 'echo * *' and 'echo "******"' now work.
	    - Added shell environment variable substitution 
	    - Added the "read" shell builtin.
	* Fixed cursor editing in cmdedit.c. The following keyboard sequence 
	    used to create an infinite loop: ls, cursor up, left, down.
	* Added support for being a login shell, so things like
	    '-su' or '-sh' (stuff where argv[0][0]=='-') will now always 
	    invoke the shell.  Now you can use BusyBox as a login shell.
	* ls.c now ignores '-g', since some ftp clients like that sort 
	    of thing.  Patch thanks to David Vrabel <dvrabel@arcom.co.uk>
	* Fix to init.c from Stuart Menefy <Stuart.Menefy@st.com> so that
	    it always sets the controlling terminal before running any programs
	* Several fixes from Matt Kraai <kraai@alumni.carnegiemellon.edu>
	    - Fixed tr so it recognizes standard escape sequences.  
		Merged common escape seq. code from tr and echo into utility.c.
	    - Major work in updating/cleaning up the docs, and getting the
		new SGML based docs into shape.
	    - cleanup of ar.c
	    - BusyBox should now poweroff when asked to do so.
	    - Fixed 'ln -n' and 'ln -s' so they both work properly.
	* Reorganized signal names in kill.c for better architecture support 
	    -- patch thanks to simon wood <simon@mungewell.uklinux.net>
	* In 0.43, backspace and delete worked properly, but with 0.45, 
	    it just echoed a ^? for backspace, and ^H for control-h.  This
	    was due to a broken macro in init.c, that is now fixed.
	* Removed sfdisk from BusyBox.  It was buggy, fat, and we really
	    couldn't maintain it very well, so including it was not really
	    very appropriate.  Those wanting an fdisk are invited to
	    grab a copy from util-linux.
	* Added 'dumpkmap' to allow people to dump a binary keymap, which can 
	    then be loaded in by 'loadkmap' -- submitted by
	    Arne Bernin <arne@matrix.loopback.org>
	* Fixed NFS so it supports 2.4.x kernels and NFSv3.
	* Brand, new versions of grep and sed which use libc regex routines,
	    thanks to Mark Whitley <markw@lineo.com>.  The hand-tooled 
	    "regexp.[ch]" files have been removed. Much help on these from 
	    Matt Kraai as well.


	 -Erik Andersen, 11 July 2000


0.45
	* Now compiles vs libc5 (which can save lots of space for 
	    embedded systems).
	* Added BB_FEATURE_TRIVIAL_HELP which compiles out most all of the
	    help messages (i.e --help).  Saves 17k over a full compile.
	* Added cut and tr from minix, since due to the license change, 
	    we can now use minix code.  Minix tr saves 4k. 
	* insmod now works.  It costs 29k, but imagine an initrd with a 
	    staticly linked busybox containing only insmod and sh, a few /dev 
	    entries, and a kernel module or two...  It doesn't get smaller
	    then this folks (I pity the fool that writes insmod in asm ;-).
	    Many kudos go to Ron Alder <alder@lineo.com> for finishing this off!
	* Added a mini ar archive utility, especially written for BusyBox by 
	    Glenn McGrath <bug1@netconnect.com.au>
	* Added mktemp, contributed by Daniel Jacobowitz <dan@debian.org>
	* Added setkeycodes, for those that have wierd keyboard buttons.
	* Added md5sum, uuencode and uudecode -- thanks to Alfred M. Szmidt 
	    <ams@trillian.itslinux.org> for contributing these.
        * Added 'grep -v' option (inverted search) and updated 
	    docs accordingly.  -beppu
	* Wrote which
	* Replaced the telnet implementation with one written by 
	    Tomi Ollila <too@iki.fi> It works great and costs 3k.
	* BusyBox sh (lash) now supports being used as a standalone shell.  When
	    BB_FEATURE_SH_STANDALONE_SHELL is defined, all the busybox commands may
	    be invoked as shell internals.  Best used when compiling staticly 
	    (i.e. DOSTATIC=true)
	* BusyBox sh (lash) internals now behave as expected wrt pipes 
	    and redirects. 
	* Fixed ping warnings -- fix from Sascha Ziemann <szi@aibon.ping.de>
	* Fixed update segfault
	* Fixed mknod -- minor number was always 0
	* Fixed tar option parsing, so both "tar xvf foo.tar" and 
	    "tar -xvf foo.tar" now work (i.e. no "-" before options) 
	    (this was very broken in 0.43).
	* Several contributions from Randolph Chung <tausq@debian.org>.
	    * cp/mv now accepts the -f flag
	    * tail can now accept -<num> commands (e.g. -10) for better 
		compatibility with the standard tail command
	    * added a simple id implementation; doesn't support sup. groups yet
	* logname used getlogin(3) which uses utmp.  Now it doesn't. 
	* whoami used getpwuid(3) which uses libc NSS.  Now it behaves. 
	* Add support for "noatime" and "nodiratime" mount flags to mount.
	* Changed 'umount -f' to mean force, and actually use umount2.
	* Changed 'umount -l' to mean "Do not free loop device".
	* Fixed basename to support stripping of suffixes.  Patch thanks
	    to xiong jianxin <jxiong@uiuc.edu>
	* cp -fa now works as expected for symlinks (it didn't before)
	* zcat now works (wasn't working since option parsing was broken)
	* Renamed "mnc" to the more correct "nc" (for netcat).
	* Makefile intelligence updates
	* Changed the way init parses /etc/inittab entries to avoid problems
	    with commands that contain colons in them.  Fix thanks to 
	    Pavel Roskin <proski@gnu.org>
	* Fixed a warning in utility.c due to char being unsigned on Linux/PPC, 
	    Fix thanks to Pavel Roskin <proski@gnu.org>
	* Made "killall" complain (not error and exit) about processes that it 
	    cannot find by name -- Pavel Roskin <proski@gnu.org> 
	* Fixed more and ps to have sensible terminal width defaults, thanks 
	    to Pavel Roskin.
	* Fixed all fatalError() calls lacking a "\n", thanks to Pavel Roskin.
	* Fixed a segfault in yes when no args were given -- Pavel Roskin.
	* Simplified freeramdisk and added argument checking -- Pavel Roskin. 
	* Fixed segfault caused by "touch -c"
	* Fixed segfault caused by "rm -f"
	* Fixed segfault caused by "ln -s -s" and similar abuses. Further fixes
	    and "--" support from Pavel Roskin.
	* Fixed segfault caused by "cp -a -a" and similar abuses.
	* Implemented "rm -- <foo>". Implementation fixed by Pavel Roskin.
	* "which" rewritten to use stat(). Fixes to improve its compatability
	    with traditional implementations -- Pavel Roskin.
	* "mount" now reports errors from nfsmount() and assumes NFS mount
	    if ':' is present in the device name - Pavel Roskin
	* Fixed exit status for killall - Pavel Roskin
	* Fixed 'swapon -a' and 'swapoff -a', which were broken.
	* Fixed 'mount -a' so it works as expected.
	* Implemented 'ls -R' (enabled by enabling BB_FEATURE_LS_RECURSIVE)
	* Implemented "ping -s", fixed error messages and argument parsing -
	    Pavel Roskin
	* Syslogd will not go to background if "-n" is given. Better help
	    and argument checking -- Pavel Roskin
	* Fixed a small bug that could cause tar to emit warning messages
	    and not extract the first file in a directory in some cases
	    of nested directories.  Thanks to Kevin Traas <kevin@netmaster.com>
	    for helping track this one down.
	* More doc updates
	* Fixed grep "Line too long" problem -- John Beppu
	* Fixed 'grep -q -i B some_file' so it works
	* math takes input from stdin if no args are given.  -- John Beppu
	* math was renamed to dc.  Although it deviates from dc's behaviour,
	    this will probably be remedied in the future.  -- John Beppu


	 -Erik Andersen, June 21, 2000


0.44
	Previously, an erronous announcement of BusyBox 0.44 was made, so to 
	avoid possible confusion, we are skipping straight to 0.45, and calling
	it good.

	 -Erik Andersen


0.43
	* Major update to the provided documentation.
	* Busybox now includes a shell!  It currently costs 7.5 k (plus an
	    additional 2.5 k if you compile in command line editing).  Handles
	    job control, has the usual set of builtins, and does everything
	    except for handling programming statements (if, while, etc...)
	* 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, dirname, killall, and uptime.
	* tar has been completely rewritten by me.  Both tar creation and 
	    extraction are now well behaved.  Costs 7.6k with all optional
	    tar features enabled, and 5k for just tar extraction support. 
	* 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 from John Lombardo <john@deltanet.com> 
	* Added echo and test (from me).
	* Added usleep contributed by Nicolas Pitre <nico@cam.org>
	* BusyBox's bss size has been majorly reduced (was 384668, is now 28740).
	* Several fixes from Pavel Roskin <proski@gnu.org>:
	    - 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.
	    - Syslogd now supports multiple concurrent connections
	* Several fixes from Pavel Roskin <proski@gnu.org>:
	    - 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).
	* ps now accepts (and ignores) all options except for "--help" (which
		as would be expected displays help).
	* Fixed mount'ing loop devices when the filesystem type was not 
	    specified.  It used to revert to non-loop after the first try.
	* all mallocs now use xmalloc (and so are OOM error safe), and
	    the common error handling saves a few bytes.  Thanks to 
	    Bob Tinsley <bob@earthrise.demon.co.uk> for the patch.
	* Fix "+" parsing bug in date, from "Merle F. McClelland" <mfm@cts.com>.
	* Fix symlink following bug in chmod -R and friends.  
	* Now allows SYSV style 'chown foo:bar' in addition to 'chown foo.bar'
	* Fixed a bug in the busybox globbing routine such that 'find /dir -name [i]' 
	    no longer segfaults.


	-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 <proski@gnu.org>:
	    - `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 default 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.
	
