Revision History:

   Version 2.0 was a major rewrite of fsanalyze that added the following new
   features:
       - The ability to analyze individual files
       - Display of the 10 most fragmented files in a file system
       - Enhanced error checking on the file system argument

   Version 2.01 contains a minor modification in which fsanalyze executes
   /etc/fsstat to determine the health of the file system before analyzing
   it.

   Version 2.02 contains a minor modification to print out a warning message
   if the file system being analyzed is currently mounted.

   Version 2.03 contains a fix for a minor bug in which the size of the
   volume data block size would be printed out incorrectly for large
   file systems.

   Version 2.04 incorporates the library function l3tol to access inode
   block numbers.  This is the first version that was posted to the net
   a few months back.

   Version 3.00 contains major revisions for porting to Xenix, System
   V Release 3, and the BSD fast file system, as well as fixing many
   bugs and improprieties.   Specific changes include:
	- Sparse files are now handled correctly.  Thanks to John Limpert
	  (johnl@gronk.uucp) for this one!
	- A bug in the way indirect blocks were factored into the
	  fragmentation analysis was corrected.
	- Fragmentation has been re-defined as cylinder-to-cylinder seeks.
	  Suboptimum placement within a cylinder is handled separately as
	  "rotational delay".  This resulted from the discovery by a number
	  of people (thanks esp. to Steve Paddock and Dave Olson
	  (olson@altos86.uucp)) that block interleaving wasn't handled
	  correctly.  After doing some experimenting with the System V mkfs,
	  I came to the conclusion that its algorithm for optimal record
	  placement is rather crude.  For example, it does not take number
	  of heads into account.  So rather than enforce an algorithm that I
	  couldn't duplicate very well anyway, I split it out as a separate
	  statistic.  This decision was confirmed when I ported fsanalyze to
	  BSD, since the fast file system also makes the distinction between
	  cylinder seeks and rotation delays.
        - new command-line arguments have been added to override file system
          block size, interleave factor, and number of sectors per cylinder.
          Normally, these numbers are derived from information in the super-
          block.  However, not all file systems may store the information
          in a way expected by fsanalyze.  Use these flags to override.
          Although all of the flags are supported for the BSD port, I doubt
          if they are useful.
	- Some function names and variables have been renamed to
	  ensure uniqueness within 7 characters.  Thanks to John
	  Limpert for catching this.
	- The IS_SPECIAL macro has been rewritten. Thanks to Larry
	  Cipriani and Dave Olson for catching the bugs here.
	- A number of new macros have been defined to make porting to
	  BSD file systems easier.  These are described in the new file
	  fsconfig.h.
        - The relative cost of fragmentation is now reported as the average
          distance of each seek (in number of cylinders).  This is reported
          as an average for the entire file system, as well as for each file.
        - Some files must span more than one cylinder simply because they are
          too large.  Single-cylinder seeks due to size are ignored in the
          fragmentation calculation.
        - A makefile has been created to enhance portability.  The
          makefile contains instructions for configuration of fsanalyze.

   Release 3.01 contains a few simple changes to enhance portability to
   XENIX/286, and adds the NUMOFFEND configuration parameter, which
   determines how many of the "top offender" (most fragmented) files
   are reported.

   Release 3.02 changes the rotation delay algorithm slightly to more closely
   reflect the BSD placement algorigthm.  I still don't trust the results,
   since they are non-intuitive, and always too high for what I would expect
   from BSD.  The other major change is the addition of a "wasted space"
   metric which reports unuseable space due to partial use of the last block
   of each file.

   Release 3.03 reports the total number of blocks used for indirection (and
   thus unavailable for data).  I also made more changes to the rotation
   delay algorithm, providing a formula for BSD Opt_interleave that makes
   more sense than previous versions.  The results still seem a bit too
   high, but they're more reasonable than before.  This version also
   includes a complete code re-organization which makes it easier to pack
   into shell archives, and some other general cleanup in preparation for
   posting to Usenet.

   Release 3.04 contains minor changes to avoid namespace conflicts in the
   FS_TYPE and OS_TYPE macros.  NFS support is also disassociated with the
   OS_TYPE.

   Release 4.1 contains no major changes from 3.04, but resulted from
   placing the code under SCCS.
