The versions of Nutbox are as follows:
Version 1.00 (2012.04.10)
- Fixed: Bumped the version number to v1.00 for no good reason (when Linux and Mozilla can do this, I guess I can do it too).
- Added:
build tool to replace the Nutmake tool. - Fixed: Renamed the
Nutbox.* namespace to Org.Nutbox.*.
Version 0.20 (2011.11.04)
- Added: The
--recurse (and -r) option to wc. - Added: The
-r (shorthand) option to fileedit. - Fixed: Misspelling of “COMPATiBILITY” in the
wc help.
Version 0.19 (2011.09.04)
- Fixed:
Nutbox.Platform.Disk.Normalize() did not work with paths of the form “dir/name”. This has now been fixed with one of those “wonderful” hacks that are so frequently needed on Windoze. - Added:
ext now supports the --recurse/-r option. - Added: Support for .NET v3.5+ and Mono v2.6+ (Nutbox probably still builds under v2.0, but I haven't tried recently).
Version 0.18 (2010.04.11)
- Fixed: Minor but annoying bug in
dircmp. dircmp failed to handle the case of renamed files such as “Foo Or Bar” being renamed to “Foo or Bar”.
Version 0.17 (2010.03.17)
- Fixed: SERIOUS bug in
dircmp: Empty directories were not created, messing up everything. This bug was introduced in a recent version, probably v0.16.
Version 0.16 (2010.03.15)
- Added: The
ask command, which is useful for asking the user questions interactively. - Added: The
message command, which makes it easy to notify the user and wait for interaction. - Added: The
filenameedit command, which makes it easy to replace strings in file names. - Fixed:
Nutmake parsed targets incorrectly; extraneous empty spaces in dependency lines were treated as targets. This was primarily a problem if an empty macro was used on the right hand side of a rule of the form target: dependency $(MACRO), in which case nutmake would report an error. - Fixed: Bogus behavior in
dircmp: If it removed a path, because it was outdated, and then needed to copy files into it, because they were added, it reported an error and exited.
Version 0.15 (2010.01.23)
- Fixed:
which: Runtime error if the environment variable --variable:x did not exist. - Fixed: Globally: Made the parsing of long options (
--name:data) more robust. - Added: A
ListOption() class to the option parser (Nutbox.Options) so that lists of strings can be specified using long and/or short options. This is used for the new dircmp --exclude option. - Added:
dircmp: Long awaited --exclude option (bye, bye, robocopy). - Fixed:
dircmp now handles more difficult cases (source=dir, target=file, and vice versa).
Version 0.14 (2010.01.18)
- Fixed: Serious bug:
dircmp interpreted “d:\” as “d:”. This bug has been around for half a year.
Version 0.13 (2010.01.16)
- Added: The
week command, which displays the number of the current week. - Fixed: The
dircmp command occasionally barfed on missing directories (that it had itself deleted). - Fixed: Bumped the copyright year range from 2009-2009 to 2009-2010 in all tools.
- Waited in vain for feedback, comments, critique, and enhancement requests for Nutbox v0.12.
Version 0.12 (2009.08.05)
- Added: The POSIX
yes command. yes is probably the most lame command in the known universe. - Added: The POSIX
ps command, which displays a list of the currently running processes. - Added: The POSIX
kill command, which kills (terminates) a specified process. - Added: The POSIX
pwd command, which prints the current working directory. - Added: The POSIX
echo command, which prints a string to the console (mostly GNU compatible). - Added: The POSIX
whoami command, which simply prints the current user’s user name. - Added: The
txt2c command, which converts a text file into C source. Useful for help texts. - Added: The
src/INTRO.txt document, which gives a rough introduction to the source code. If you need more information please tell me.
Version 0.11 (2009.08.03)
- Added: The POSIX
wc command. This is the only Nutbox command that is interface compatible with its GNU sibling. - Added: The POSIX
basename command. The existing filename command is much better, though. - Added: The POSIX dirname command. The existing
filename command is much better, though. - Added: The
extension subcommand to the filename command. It gives the extension… - Fixed: The
filefind command now takes short options too: -c(ase), -e(xact), -l(ines), etc. - Fixed: The
filefind command by default no longer prints the file name and line number when input is stdin or there is only a single input file. This is done to avoid the case of filefind adding multiple file names and line number when used multiple times in the same pipe: cat foo.txt | filefind –ce Error | filefind –ce : | more. - Fixed:
dircmp now works again if files need to be deleted from the target.
Version 0.10 (2009.08.01)
- Fixed: All commands now use the same command-line parser:
Nutbox.Options.Parser. This required altering all commands, but they should be overall interface compatible with previous releases. The new command-line parser correctly handles cases such as “rm –fr foo” (merged options), which the old method did not. The command-line parser was a pain to write, but finally it seems to work as expected. In return, it is much easier to define the command-line syntax for any Nutbox command. Try looking at nutmake’s Setup class for an advanced example of what it can do. Nutbox.Options is basically my bid for a C# alternative to GNU’s traumatic getopt module. - Fixed: All long options now support colon (:) as well as equal sign (=) as the delimiter between the option name and the option parameter.
- Fixed:
nutmake no longer accepts the --logo and --nologo options. - Fixed:
filename normalize now also works with root-relative paths (\xxx or /xxx). - Fixed: If help is requested, the program shows its help text and exits with an exit code of two. I needed this for the planned
autotest feature. - Fixed:
ext now terminates its output with a newline. This bug was annoying on *nix platforms. - Added: Parts of the long-planned
autotest (automatic test) feature. To use it, build the goal test. Note: This does not currently work on *nix due to Mono not propagating the exit code. - Added: Short options (one char options) to a number of tools, most noticeably the POSIX ones.
- Added:
showkey command. Useful for seeing what key names .NET uses for what keys. - Fixed: The *nix scripts so that
INSTALL.sh and make.sh both now work once again. - Fixed:
filefind no longer creates a RegEx instance when the --exact option is given. This means it won’t fail on perfectly legal patterns that happen to be invalid regular expressions.
Version 0.09 (2009.07.28)
- Fixed: All Nutbox commands now conform to the GNU convention of using two dashes before long options and one dash before short options. Only
nutmake accepts any short options, though, at this time, but I expect to fix this in the next release. Sorry for any inconvenience this may cause, but I eventually decided that GNU compatibility is desirable and wanted to make the change before Nutbox gets downloaded too many times. Furthermore, I think that adhering to the GNU convention of dash-dash (--) meaning “a long name” will increase the public interest in Nutbox. - Fixed: All Nutbox commands now accept long options of the form “
--name=value” and of the form “--name:value”. Nutbox is compatible with both the Microsoft convention and the GNU convention this way. Sorry for meddling with the option syntax, but better do it early than late… - Fixed: All Nutbox commands now conform to the standard console convention of displaying all error messages on the standard error device rather than on the standard output device (2011.11.08: I believe I removed this "fix" again as I loathe programs that use standard error; people should log everything not just error messages).
- Added: Separate help text file for each command: The {} command uses
clear.hlp as its help text, and so on. This step was required to facilitate the extended, exhaustive online documentation that I have in mind. Traditional commands require an external manual or an online help system. I plan all of the Nutbox commands to embed their down documentation so that there is no need for a manual: Anywhere you take Nutbox, you have got all the docs you need at hand. Without cumbersome installations and/or ports of POSIX man or GNU info. - Added: All commands got a large overhaul with respect to the help text. The current form is fairly final, except documentation of new bugs and features will be added as they pop up.
- Added: The
view command. This is a very rudimentary yet highly useful text file viewer. It runs really nifty under Fedora 11 x64 too, thanks to Novell for all their work on Mono. - Added:
sleep now accepts the parameter “forever”, which makes it sleep indefinitely. - Fixed:
txt2cs now satisfies FxCop v1.36 as much as it can (by sealing the class and creating a private constructor). This may annoy some. If so, let me know. - Fixed:
nutmake now correctly treats tabs inside lines as white-space. - Fixed:
txt2cs now automatically creates the output file name (instead of using stdout) if no target name is specified. The output name is identical to the input name, except the string “.cs” has been appended to it: “txt2cs Foo.Bar.Cheese myfile.hlp” yields “myfile.hlp.cs”. - Fixed:
txt2cs now defaults to creating strings instead of arrays. Silly mistake, but now corrected. - Added:
pathcheck, which makes various integrity checks on the PATH environment variable. This is very useful for automatically getting a report of potential problems with one’s path such as duplicate commands in the PATH and non-existent directories in it as well. - Fixed: All Nutbox commands now use the same generic command-line parameter parser. I’m pretty sure there’s some oddities in there yet, but the tools should be functional.
- Fixed: Removed the
–logo/-nologo option pair from ‘dircmp’. This was a historical remnant from back when ‘dircmp’ was a stand-alone utility that knew nothing about Nutbox (it was written in C++ back then). No other Nutbox command has this option pair, so no reason to keep them in ‘dircmp’. If you want to know the version of a Nutbox command, you can simply type: command –help | head --lines:2.
Version 0.08 (2009.07.25)
- Fixed:
strings now only accepts -width values greater than or equal to one. - Fixed:
strings now also accepts colon (:) and a few other characters in strings found in files. - Fixed: All Nutbox commands no longer uses “no parameters” as a request for help. Instead, the special options “
-help”, “-?” and “/?” are treated as being a request for help. If the user requests help, the command displays the help text and exits with an error code of 1. The error code of 1 is intentional, because we script writers would like to know if something bizarre happens – and it is bizarre to request help in a script (almost certainly an error). - Fixed: The
head and tail commands no longer accepts the “double-dash“ quirk, instead they run as expected when no parameters are given. - Fixed:
filename now converts the output disk name to uppercase so as to be consistent. - Added:
sort. It intentionally only handles files that are small enough to be processed in virtual memory. In effect, this means it can only handle files up to about two or eight gigabytes in size… After lots of twiddling and fiddling, I finally made it behave as expected by POSIX users (this command took almost as much time to write as nutmake!). - Added:
trim. Useful for getting rid of extraneous white-space at the end of lines and extra empty lines at the end of files. - Fixed:
showtime now displays the current time if no time is specified (instead of requiring the user to specify “now”). - Added: The
normalize subcommand to the filename command. This command normalizes the specified path, whose directory part must exist on disk, to whatever is actually stored on disk. For instance, if you have the directory “C:\Foo\Bar” and you ask filename to normalize the string “c:\foo\bar”, it prints “C:\Foo\Bar”. - Added:
uniq command. Very simple, yet highly useful for everyday use.
Version 0.07 (2009.07.23)
- Fixed: Some more FxCop warnings. It seems that a clean FxCop analysis is impossible because I insist on using C# in ways that I find natural and sensible, but which M$ rejects.
- Added: Several new options to
nutmake: -all, -continue, -directory:path, -ignore, and -test. Together these options almost make a real make tool out of nutmake. Now I only need to add concurrent compilation support. That should be easy enough, but I don’t need it at this time, so I’ll defer implementing this feature until I actually need it for something. - Fixed:
nutmake now searches for “Nutmakefile” by default rather than “Makefile”. This is to allow users of nutmake to have GNU Make files, etc., while transitioning to nutmake (or vice versa!). - Added:
mkdir command. Useful for creating directories from within makefiles (without –all failing). - Fixed:
rm now deletes read-only files and directories properly – even when nested. - Added:
dircmp now accepts a –force option that enables deletion of read-only files and dirs. Please be careful when using the –force option: You can easily trash all of your system in seconds, if you accidentally write “c:\” or “/” as the target and you specify the –force option. Remember that no Nutbox options asks for confirmation ever – so dircmp will happily erase all of your system partition if used incorrectly (this is in particular a problem under Windows XP and earlier versions of Windows; most other operating systems don’t suffer from this problem). - Fixed: Bogus help text in
dircmp; it seems I had too much fun searching and replacing in dircmp. - Added: The
strings command. It also handles Unicode strings if the –unicode option is specified. I’ve been missing the Unicode support for ages, but nobody seemed eager to add it to GNU strings (2011.11.08: Actually, I think recent versions of GNU strings have this feature). Using .NET, it was as simple as reading an extra byte every time a character is input from the source (because Unicode strings are always aligned on a two-byte boundary). - Added:
-exact option to filefind. This disables the regular pattern matching mechanism and uses a traditional exact match method instead. - Added:
touch command. Occasionally useful to create an empty file or update the file stamp of an existing file. - Added: The
diskfree command to the above list of commands in Nutbox (I had forgotten about it). - Fixed: The problem that the logo was output multiple times if the
–logo option was used. - Fixed: Removed extraneous quoting of single quotes in
txt2cs. They’re required in C/C++, not in C#. - Added: The
sleep command. Useful for testing and for synchronizing asynchronous scripts. - Added: The
diskfind command. Useful for locating a particular disk in a flexible manner.
Version 0.06 (2009.07.21)
- Fixed: Restructured the Nutbox assembly a bit (each
Platform class is now in its own source file). - Fixed: Added assembly attributes to all assemblies created by the Nutbox project.
- Fixed: Lots of warnings reported by FxCop v1.36 (still about 15 to go!).
- Fixed: Nutbox is now strongly signed (although the key is included in the source distribution ;-).
- Fixed: The command-line parsing system was changed to be simpler and more reliable. I am still looking for a good way to generically parse any set of parameters/options using C#, but have not yet reached any useful conclusion. I’d like it to be configurable so that the user could specify the environment variable NUTBOX_SYNTAX to be either “POSIX”, “GNU” or “Windows”. But then again, that’s probably way too much work to put into it.
- Fixed:
exectime –noquiet now displays the output while it is being made rather than after it has been made. This gives a more natural experience when lots of output is being made. - Fixed:
exectime now captures both of the standard output and standard error devices. The output to the standard error device is interleaved with the output of the standard output device in such a manner that it appears natural. - Hint: Check out
Nutbox\Platform.Process.Execute() for handy-dandy static methods to handle the process of invoking an external command and asynchronously capturing its output. - Added: Excruciatingly adoring and primitive make tool:
nutmake. In time, this might grow to become a really useful tool. Right now it pretty much only builds Nutbox itself. It took me some four or five hours, including testing and fixing errors, of coding to make the initial version of nutmake. Using nutmake, Nutbox can be built on all platforms using the same Makefile. - Nutbox now builds out-of-the-box on both Windows x64 and Fedora 11 x64.
- Fixed:
datecopy only worked if the source and target were the same kind of disk object: A file or a directory. - Fixed:
dirsize now reports the directory sizes in a culture invariant format (US English format). This is intentional, and was the original intent, as dirsize is intended to be usable from scripts etc.
Version 0.05 (2009.07.19)
- Fixed:
which now handles malformed paths with empty elements. - Added:
tee command. POSIX substitute – useful for displaying logs as they are being written. - Added:
txt2cs command. Useful for creating elaborate and very helpful help texts. - Added:
monowrap command. Useful for creating Linux shell wrapper scripts to launch Mono. - Added:
INSTALL.sh – useful for quickly installing Nutbox on a Linux host.
Version 0.04 (2009.07.18)
- Fixed:
filesplit now creates the output files in the current directory rather than in the directory that contains the source file. This is especially important if the source is located in a read-only directory, but is also much more intuitive and logical than the previous method. - Added:
head command. POSIX substitute – useful for getting the first few lines of a file. - Added:
tail command. POSIX substitute – useful for getting the last few lines of a file. - Added:
htm2html command – useful for making MS Word .HTM documents mostly HTML 4.01/Loose compliant. I use this all the time for my websites. htm2html is not perfect but quite often manages to patch up the worst things. If you don’t like it, simply don’t use it.
Version 0.03 (2009.07.18)
- Fixed: Renamed NetBox to Nutbox and acquired the domain www.nutbox.org.
- Added: The
filesplit command. Useful for splitting gigantic archives and files into smaller ones. - Fixed: Changed all occurrences of “Copyright ©” into “Copyleft (-)” making Nutbox Public Domain.
Version 0.02 (2009.07.18) (named NetBox):
- Added: The
exectime command. Useful for profiling large data sets.
Version 0.01 (2009.07.18) (named NetBox):
- Added: The
datecopy command. Useful for copying dates from files/dirs to other files/dirs. - Added: The
dircmp command. Useful for comparing and/or synchronizing directories. - Added: The
dirsize command. Useful for determining the size of a set of subdirectories. - Added: The
diskfill command. Useful for testing disk full conditions and for wiping empty space. - Added: The
ext command. Useful for getting a list of all extensions in one or more directories. - Added: The
fileedit command. Useful for replacing one or more strings in a set of text files. - Added: The
filefind command. Useful for matching a regular expression against a set of files. - Added: The
rm command. Modern replacement for the standard POSIX rm command. - Added: The
showtime command. Useful for generating file names with the current time in them. - Added: The
which command. Modern replacement for the standard POSIX which command.