Changes / new features in SNiF 1.34 (public release)

o New option: +o, -o.
  This option allows you to tell SNiF whether it should OR or AND all
  criteria in a list.

o Added the +m2 option: +m2 acts like +m1 though it also hides (sets Hidden
  attribute) all files in the advanced exception list. Useful for passing
  wildcarded parameters to other programs.

o Greatly optimized the grep-like (+g option) searching routine. It is now
  only marginally slower than Borlands GREP.COM utility.

o Optimized the string-substitution routine, it's also a lot faster now.

o Minor bugfixes.


Changes / new features in SNiF 1.33 (public release)

o New option: +kSTRING, -k
  This one allows you to specify a 'C-like' format-string for the logfile
  output. For each file sniffed this string will be logged, subject to the
  following substitutions:

     &f  full pathname (incl. filename) of the file sniffed
     &p  pathname only of file sniffed
     &n  filename only of file sniffed
     &m  currently active filemask
     &t  sniffed file's creation time
     &d  sniffed file's creation date
     &a  sniffed file's attributes
     &s  sniffed file's size in bytes

  It is also allowed to include hex-entries (\XX) in the format-string, like-
  wise to the +g option.
  The +k option is one of the more advanced features of SNiF... so for normal,
  standard logfile-info one might rather use the simpler +bINFO (or -bINFO)
  option! Option -k disables the format-string.
  Default: -k

o It is now possible to set up an environment variable called SNIF which
  contains SNiF options and/or filemasks. This environment variable is scanned
  *before* the command-line is scanned and thus can be used to issue (default)
  options automagically. For instance, if you wanted SNiF to default to
  sniffing the whole system (ie. all hard-drives) instead of the current drive
  only, you could set the SNIF environment variable to +wCZ (using:
  set snif=+wCZ). *Any* option/filemask that can be given at the command-line
  is legal in the SNIF environment variable... happy configuring! ;-)


Changes / new features in SNiF 1.31 (non-public release)

o Optimized behaviour of the relative time-criterion. It now 'properly' handles
  a file's creation-time and is no longer date-criterion dependent. In practice
  this means that when you want to snif for files maximum 5 mins old (+tY5), you
  will only get those files that _are_ actually maximum 5 mins old, and not
  those that were 5 mins old the same time yesterday, the day before yesterday,
  etc...


Changes / new features in SNiF 1.30 (non-public release)

o Extended the +u option to accept absolute dates in American format as well:
  SNiF looks at the date-separator character to determine which format is
  used, a '/' character specifies European format (ie. dd/mm/yy), a '-'
  character specifies American format (ie. mm-dd-yy). Eg: +uA09-22-91 and
  +uA22/09/91 both instruct SNiF to search files created after 22nd of
  September 1991.

o Slightly modified +b option: issuing +bINFO now causes the additional file-
  info to be printed in the logfile, SNiF no longer does this by default!!!
  Issuing +bNOINFO will turn this feature back off again. I made this
  modification so that SNiF's default log-output can be easily used as input
  for another program (eg a file transfer protocol).

o New option: +m, +m1, -m
  This option is an _extremely_ powerful one; it allows you to build advanced
  exceptions using any criteria that SNiF supports (ie. not only filemasks, as
  +n option). Advanced exceptions are built just as you would build a set of
  criteria for normal sniffing, ie. you just specify the criteria which make up
  the advanced exception using the normal options...
  To start building advanced exceptions, issue the +m command. Any criteria or
  filemasks following this +m will be added to the advanced exception list.
  When the advanced exception list is built, and you want to activate it, issue
  the +m1 command and subsequently specify the criteria and filemasks you wish
  to snif for.
  For example: we wish to snif all files on the current drive, except all
  hidden .SYS files. This could be done with something like:

    SNiF +m +aH *.sys +m1 -a *.*

  We first turn on advanced exception building with +m, then specify the
  criterion for hidden-attribute sniffing and the *.sys filemask. Note that
  after having turned off building of advanced exceptions with +m1 (thus also
  activating it!), we still need to specify -a because we want to snif every
  file on the drive, not only the hidden ones! It is important to note that a
  +m1 instance does NOT turn off any criteria activated for advanced
  exceptions, we must do so separately!
  To disable advanced exceptions, -m must be issued.
  Default: -m

o Added quick help on options available. SNiF -? gives this quick help.


Changes / new features in SNiF 1.28 (non-public release)

o Slightly changed use and behaviour of the +x (command execution) option.
  Option +x is now also a cumulative command like +n etc. This means you can
  set up multiple execution-commands with multiple instances of +x. Commands
  will be executed in the order they are given at the command-line (or in the
  .ctl file). Option -x clears ALL these commands.
  Eg: SNiF "+xtype &f" "+xdel &f" *.bak    will first type any *.bak file found
      and subsequently delete it.

o Same mods to the +g option: multiple search-strings may now be specified with
  multiple instances of +g. So, SNiF +ghello +gthere *.*   will only snif files
  that contain the strings "hello" and/or "there". Option -g clears ALL search-
  strings.
  Also added hex-entry support in +g strings: Any occurence of \XX (2 digit hex
  number) will be translated into the corresponding byte. To include a '\', you
  should specify \\ in the string. So, SNiF +gB\41LL *.txt   will snif all .txt
  files containing the case-insensitive string "ball".

o Fixed huge bug that crept into the control-file parser whilst modifying it to
  accept only one option per line!

o Fixed bug that caused SNiF (the whole system) to crash when the statistics
  mask-list became too long.


Changes / new features in SNiF 1.24 (non-public release)

o Again modified the +w option: SNiF now defaults to +w (ie. snif whole
  current drive) when NO paths are specified. Otherwise, it'll just snif the
  paths preceding the filemasks. With -w and no paths given, SNiF will start
  its search in the current dir. on the current drive.

o Big change to the control-file parser: it now only accepts one (1) option per
  line!!! The advantage of this is that you no longer need to use quotes ("")
  when option-parameters are strings containing spaces. Ie: "+xdel &f" becomes
  a plain +xdel &f.

o Fixed bug with +f skipping the current dir. if first file found is a file-
  mask exception.


Changes / new features in SNiF 1.23 (non-public release)

o SNiF now exits with errorlevel 0 if nothing was sniffed, and 1 if at least
  one file was sniffed.

o Little change to the behaviour of the +w (global system sniffing) command:
  Issueing just +w will cause SNiF to search the whole CURRENT DRIVE, not the
  whole system, as before. To invoke a whole system snif, you must explicitly
  provide the maximum drive-range with the +w option, like: +wCZ or +wAZ. A new
  drive-specifier is recognized: @ indicating the current drive, so +w@Z would
  start sniffing from the current drive up to drive Z:.

o New option: +gSTRING, -g
  This option acts like a little GREP: it allows you to snif files that contain
  the STRING sequence of characters. By default, the search is 
  case-insensitive, to make it case-sensitive, the first character of STRING
  must be an exclamation-mark: !. So, if the case-sensitive string you wish to
  search for should start with an !, eg !blabla, you would specify: +g!!blabla.
  Note that this option isn't at all meant to replace GREP, it isn't as fast
  and as versatile, but it's there if you need it. Option -g turns 
  GREP-searching off. Just specifying +g will cause SNiF to take the previous
  STRING value, if one has been used already!
  Default: -g

o New option: +tSTRING, -t
  Allows you to specify an indefinite number of file creation-time criteria.
  Like +n, multiple criteria may be specified with multiple instances of +t.
  SNiF can handle two types of time criteria: absolute and relative ones.
  Absolute criteria are of the form: Thh:mm:ss where T is either E (equal to),
  B (before) or A (after), and hh:mm:ss is a time in hours:minutes:seconds,
  two digits per time-element MUST be given. So, option +tA20:12:16 means only
  files created after 20:12:16 will be sniffed.
  Relative criteria are of the form: Tnnnnn where T is either X (exactly),
  O (older than) or Y (younger than), and nnnnn is a number of minutes in
  decimal. So +tX45 means only snif files that are exactly 45 mins old (only
  regarding time, not date!). Most of the time, +t will be used in conjunction
  with +u (see further).
  Default: -t

o New option: +uSTRING, -u
  Allows you to specify an indefinite number of file creation-date criteria.
  Like +n, multiple criteria may be specified with multiple instances of +u.
  SNiF can handle two types of date criteria: absolute and relative ones.
  Absolute criteria are of the form: Ddd/mm/yy where D is either E (equal to),
  B (before) or A (after), and dd/mm/yy is a date as day/month/year, two
  digits per date-element MUST be given. So, option +uB14/09/90 means only
  files created before 14th of september 1990 will be sniffed.
  Relative criteria are of the form: Dnnnn where D is either X (exactly),
  O (older than) or Y (younger than), and nnnn is a number of days in
  decimal. So +uO5 means only snif files that are (more than) 5 days old.
  Default: -u


Changes / new features in SNiF 1.20 (non-public release)

o SNiF now has some tighter memory checking. Previous versions didn't complain
  when memory allocations failed, which could have disastrous consequences when
  deleting sniffed files with filemask exceptions.

o New option: +aHSRA, -a
  Allows you to specify an attribute mask. Only files that have these attrs
  will be sniffed. Option -a disables attribute sniffing, it has the same
  effect as +aHSRA (ie. all attrs on).
  
            H  Hidden attribute
            S  System attribute
            R  Read-only attribute
            A  Archive attribute

  Default: -a

o New option: +bSTRING, -b
  This option is only useful when using a logfile. It allows you to put in a
  commentline with the value of STRING. Note that when the +b option is set,
  all pathnames of files sniffed will be indented by 3 spaces, giving a neater
  layout. Option -b disables this indentation.
  Default: -b

o New option: +zSTRING, -z
  This option allows you to set a filesize criterion. An unlimited number of
  filesize criteria may be set (memory-permitting, of course) by specifying
  multiple instances of the +z option (analogous to +n option). Only files
  whose filesize conforms to at least one of the criteria are sniffed.
  The value of STRING must be of the form:

            Onnnnnnn

  where O is either E (equal to), L (less than) or G (greater than).
  where nnnnnnn is the number of bytes to compare the filesize with (decimal).
  Default: -z


                                                            Carl Declerck.

