JkDefrag v3.34 (February 1, 2008)
Changes:
- Re-fixed the "DisableDefaults" bug.
- Partial undo of the change that uses the mountpoint of a volume. It was causing
  problems during the automatic scanning for disks to be defragmented.
- Pushed the "Zone calculation" messages down to debug level 4.
- Fixed the VisualC example project.


JkDefrag v3.33 (December 23, 2007)
Changes:
- Fixed a bug in the Windows version that for some users caused the display of
  the diskmap to get stuck.
- Fixed a bug in the forced-fill optimization that caused the program to skip
  fragments that were left by filling a gap with a part of the fragment.
- If the volumename of a disk cannot be determined then the program will now 
  fallback to using the mountpoint of a volume to open a handle.
- If the user specifies a short input mask without a wildcard, for example "C:" 
  or "C:\", then the input mask is rewritten as "C:\*".
- Fixed a bug where the special "DisableDefaults" spacehogs mask only disabled
  the masks, but not the "Files bigger than 50 megabytes"" and "Files not 
  accessed in the last month" criteria.
- Bundled some language-specific SpaceHogs masks into 
  "?:\\*\\Installshield Installation Information\\*".
- Moved the "Volume ID" message for FAT disks from debug level zero to 6.


JkDefrag v3.32 (December 3, 2007)
Changes:
- Fixed a bug in the FAT scanner that caused the program to crash on volume
  names shorter than 9 characters.
- Simplified the rules that automatically change the mask that selects which
  disk/folders/files must be processed. It now simple prepends and appends an
  asterisk if there is no asterisk yet.
- Some small changes in the graphics code.
- Fixed a bug in the commandline version that showed zone numbers 0...2, 
  instead of 1...3.


JkDefrag v3.31 (December 2, 2007)
Changes:
- Fixed a problem in the Windows version, it now redraws the diskmap when the 
  user changes the size of the window.
- Added special cases to the exclude masks to recognise a drive letter 
  without an asterisk, for example "c", "c:", or "c:\".


JkDefrag v3.30 (November 30, 2007)
Changes:
- FAT disks are now analysed by directly reading the FAT from disk. This is a lot
  faster, and finds more system files.
- Changes to the graphics routines in the Windows and screensaver versions. 
  The screen is now updated faster and more efficiently.
- Added the "average begin-end distance" statistic to the report.
- The commandline is now scanned for the "-l" logfile option before anything
  is written to the logfile.
- Changed the progress counter for the Fixup phase.
- Added a second fixup phase after optimizing "-a 3" to catch files that could not
  be moved the first time.
- Bugfix for automatic processing of volumes that are mounted on a directory
  instead of a drive letter.


JkDefrag v3.29 (November 16, 2007)
Changes:
- Total rewrite of the "-a 7"..."-a 11" sorted optimizations.
- Total rewrite of the code that calculates the begin of the zones.
- Excluded files are no longer listed in the "These items could not be moved" 
  report.
- Bugfix in the Windows version for very long filenames.
- Added exception to ignore the Symantec GoBack configuration files.
- Added protection against defragging hybernated disks.
- Added to the list of build-in spacehogs:
  ?:\\windows.old\\*
  *.dvr-ms
  *.wmv


JkDefrag v3.28 (November 2, 2007)
Changes:
- Restored the manifest file. I did not notice that the compiler had overwritten
  the manifest file, causing JkDefrag not to start on Windows XP.


JkDefrag v3.27 (November 1, 2007)
Changes:
- Changed action "-a 2" into defragment only (no fixup), and moved the "fixup" 
  for "-a 3" to phase 3.
- If the program detects that directories cannot be moved (on FAT disks) then
  messages about unmovable directories are suppressed in the status report.
- Added code to the screensaver that instructs Windows not to go into power
  saver mode while the program is running.
- Changed the percentage progress counter for "fixup".
- The program will now always exit with return code zero (success), instead of
  1 (error).
- Bugfix for infinite loop in the "-a 5" action (force together).
- Removed the extraneous "already has a list of fragments" error message in
  the logfile.
- Added the special exception to ignore the DriveCrypt "?:\\BootAuth?.sys"
  files to the NTFS scanner.
- Bugfix for a memory leak in the NTFS scanner.
- Bugfix in the status report for the number of fragmented files.


JkDefrag v3.26 (September 19, 2007)
Changes:
- Undo of one of the changes from v3.25 in the graphics code, screensaver only.
  The changes worked fine for the Windows version, but showed a completely black
  screen in the screensaver....


JkDefrag v3.25 (September 16, 2007)
Changes:
- Fix for reading the "$MFT::$BITMAP". In some very special cases the bitmap
  would only be partially read, causing files on disk to be ignored.
- Fix for the "::$SECURITY_DESCRIPTOR" problem. Directories with a special
  security attribute would get this string appended to their name, making them
  unmovable.
- Reorganised the code for the out-of-sequence fix (see previous releases).
- Two fixes in the graphics subroutines. Some users reported that the display
  sometimes froze during normal operation.
- Excluded items are no longer listed in the "These items could not be moved"
  and "These items are still fragmented" reports.
- The error message "Cannot find volume name for mountpoint: %s" was changed
  into "Ignoring volume '%s' because it is not a harddisk.".
- Added "?:\WINDOWS\system32\dllcache\*" to the default list of SpaceHogs.
For programmers:
- Addedd message 57 to the messages.


JkDefrag v3.24 (September 3, 2007)
Changes:
- A final fix for the out-of-sequence problem. Beta tests by users show that the
  problem is now finally fixed.
- Bugfix for missing parameter in status message that caused JkDefrag to crash
  when it wanted to display the "Cannot find volume name for mountpoint" message.
  This message can happen when scanning the system for disks and a special volume
  is encountered such as a "subst" volume.
- The "25 largest items on disk" list in the statusreport is now sorted by (used)
  clusters instead of by (allocated) bytes.
- Fixed the progress percentage during analysis of NTFS volumes. It was counting
  too fast and reached 100% before analysis was complete.
- The "unmovable", "still fragmented", and "largest 25" lists in the report are now
  suppressed if empty.
- Directories on FAT disks cannot be moved, this is a known limitation of the
  Microsoft defragmentation API and not a bug in JkDefrag. To speed up things the
  program will now count the number of failed tries to move directories, and when
  it reaches 20 will ignore all directories.


JkDefrag v3.23 (August 31, 2007)
Changes:
- Sigh. Yet another fix of the out-of-sequence problem that keeps plaguing a small
  set of users. I have deleted the previous fixes and added code that will delay the
  processing of the AttributeList in the MFT until the Data attribute has been
  processed.
- Fixed the test for the NtfsDisableLastAccessUpdate registry key (see v3.19). If
  the key is not available the program defaulted to ignoring the LastAccessTime.


JkDefrag v3.22 (August 30, 2007)
Changes:
- Yet another fix of the fix. The out-of-sequence rundata on these a-typical disks
  caused yet another error. If have now made a special exception for the MFT to
  accept even out-of-sequence rundata.


JkDefrag v3.21 (August 30, 2007)
Changes:
- Fixed the fix in v3.20 for the problem that caused the NTFS analysis code to
  malfunction on a-typical NTFS disks. The fix only worked on disks with a cluster
  size of 4096 bytes, it now works on all disks.


JkDefrag v3.20 (August 29, 2007)
Changes:
- The NTFS analysis code now also interprets Inodes 12 to 23.
- Fixed a problem that caused the NTFS analysis code to malfunction on a-typical
  NTFS disks.
- The icon now also shows in the taskbar and the upper-left-hand corner of
  JkDefrag's window.
- Softened the messages generated by the NTFS analysis code.


JkDefrag v3.19 (August 27, 2007)
Changes:
- Fixed a bug that caused the program to crash at various places during execution,
  mostly on Windows XP.
- If the NtfsDisableLastAccessUpdate registry key is set then the program will
  not look at the LastAccessTime when testing if a file is a SpaceHog.
- Added to the default list of spacehogs:
  ?:\I386\*
  *.old
  *.bak


JkDefrag v3.18 (August 26, 2007)
Changes:
- The icon now has a transparant background.
- Icon added to the X64 JkDefrag and JkDefragCmd binaries.
- Bugfix in the calculation of the begin of the zone's. The old method did not
  take excluded files into account.
- Changed two buffers from being allocated with "new" into "malloc". I hope this
  fixes the weird "ModName: ntdll.dll ModVer: 5.1.2600.2180" crash that some users
  are experiencing on XP.


JkDefrag v3.17 (August 24, 2007)
Changes:
- NTFS disks are now analysed by directly reading the MFT from disk. This is a lot
  faster, and finds more system files.
- NTFS streams are now supported and will be defragged and optimized.
- Added an icon.
- Added a version info resource to the executables.
- Added a manifest so Vista will always run JkDefrag with administrator privileges.
- Added support for short filenames. The masks now also work for short names, for
  example "PROGRA~1" (instead of "Program Files").
- Spacehogs are now shown in dark-green, regular files in light-green. Allocated
  space is now shown in grey, instead of black.
- Bugfix in redrawing the diskmap, to properly handle redraw-requests while
  redrawing.
- Files larger than 1 gigabyte are now closed and re-opened at 1 gigabyte intervals.
- Change in the fast optimize algorithm. When a gap cannot be perfectly filled
  the program now takes the highest file on disk that will fit, instead of the
  largest file. This reduces the amount of data moved and optimization will finish
  quicker.
- Added a special exception for the "?:\\BootAuth?.sys" files used by DriveCrypt.
- Added a few extra lines to the status report.
- The logfile now shows which command line options were used.
- Added to the default list of spacehogs:
  ?:\RECYCLED\*                 (FAT on 2K/XP)
  ?:\$RECYCLE.BIN\*             (Vista)
  ?:\WINDOWS\Ehome\*
  ?:\WINDOWS\Fonts\*
  ?:\WINDOWS\Help\*
  ?:\WINDOWS\IME\*
  ?:\WINDOWS\Speech\*
  ?:\WINDOWS\Symbols\*
  *.chm
  *.mp3
  *.pdf
  *.bup
  *.ifo
  *.vob
  *.avi
  *.log
For programmers:
- All instances of CHAR changed into WCHAR. This has widespread implications in
  many locations. I am hoping the change will fix the problem that some users
  have reported on weird filenames.
- Renamed "JkDefrag.cpp" into "JkDefragLib.cpp"
- Renamed "JkDefrag.h" into "JkDefragLib.h"
- Renamed "JkDefragWindows.cpp" into "JkDefrag.cpp"
- Added "ScanNtfs.cpp" and "ScanNtfs.h"
- Several changes in the DefragDataStruct.
- Several changes in the "Makefile" to facilitate debugging.


JkDefrag v3.16 (June 22, 2007)
Changes:
- Changed the message in the docs about the screensaver under Vista, it works if
  User Account Control is turned off.
- Bugfix in "-a 3" (fast optimize). It would not use Perfect Fit for gaps that were
  larger than all the data already processed.
- Bugfix in "-a 6" (move to end of disk). Files in zone 1 would not be moved.
- Added some translations of "Program Files" to the build-in list of SpaceHogs:
  Archivos de programa   Spanish
  Arquivos de programas  Brazilian Portuguese
  Ohjelmatiedostot       Finnish
  Program Files          All others
  Program                Swedish
  Programas              Portuguese
  ProgramFiler           Norwegian
  Programme              German
  Programmer             Danish
  Programmes             French
  Programmi              Italian
- Fixed a typo in the "System Volume Information" string in the SpaceHogs.
- Fixed the displaying of the zone number, should have been + 1.
For programmers:
- Changed the "makefile.bat" script, "JkDefrag.exe" does not need to be linked
  with "JkDefragScreenSaver.res".


JkDefrag v3.15 (June 14, 2007)
Changes:
- Added extra breakpoints so the program will quit faster.
- Added special exception for Acronis OS Selector files.
- Changes to facilitate Delphi programmers. All callbacks are now CDECL.
- Added a Pascal example program.


JkDefrag v3.14 (June 9, 2007)
Changes:
- Bugfix for the "-u" commandline option. All the "-u" masks were accidentally
  also processed as "items".
- Files are now classed as a SpaceHog when their last access time is more than
  30 days ago.
- Deleted the "full" optimization ("-a 4"). For backward compatibility the
  program still accepts the option, but does exactly the same as for "-a 3".
- The screensaver will now not start if it detects that the computer is running
  on battery power.
- Deleted the code that disables the Windows display idle timer (screen saver) and
  system idle timer (power saver) in the commandline and screensaver versions.
For programmers:
- Deleted message 57 from the message array.
- Changed the meaning of the "Data->Phase" variable used by the ShowStatus()
  callback.
- The ShowStatus() callback is now executed once for every zone in the "-a 3"
  and "-a 7"..."-a 11" optimizations.


JkDefrag v3.13
- Version number skipped for superstitious reasons.


JkDefrag v3.12 (June 6, 2007)
Changes:
- Bugfix for the X64 versions.


JkDefrag v3.11 (June 5, 2007)
Changes:
- Fixed a bug that caused files to be classified in the wrong zone, causing
  several problems.
- Fixed a bug where the list of files was not cleared between disks.
- Re-applied "The versions now also detect if another version is running"
  change from v3.9 that was accidentaly deleted in version 3.10.
- Reduced the size where huge files are treated in segments to 1Gb, in a further
  attempt to work around a suspected bug in the Microsoft defragmentation api.
For programmers:
- Added strings 48...57 to the array of textstrings.


JkDefrag v3.10 (June 4, 2007)
Changes:
- Bugfix for infinite loop in "Phase 2: Fixup"


JkDefrag v3.9 (May 30, 2007)
Changes:
- Added optimization methods for sorting files on disk by name, size, last
  access, last change, and creation time.
- Reduced the number of steps from 6 to 3.
- Added zoning to the Fast and Full optimization methods. Files are now placed
  in 3 zones with a free space between: directories, regular files, and space hogs.
- Added "-u" commandline option to add custom masks to the list of build-in
  SpaceHogs masks.
- Added a top-25 of largest files to the status report.
- Huge files (>4Gb) are now treated in segments.
- The versions now also detect if another version is running (windows,
  command line, screen saver).
- The Windows display idle timer (screen saver) and system idle timer (power saver)
  are disabled while JkDefrag is running.
For programmers:
- Many changes in the sources.
- Added an example Visual project.
- Library sources are now compatible with the UNICODE compiler setting.
- Changes to facilitate multithreading.
- Renamed the sources. There is now a JkDefrag.cpp and JkDefrag.h file for easy
  inclusion into a project.
- Integrated the DefragInitialize function into the RunDefrag function.
- Changed the StopProcessing subroutine, it now accepts a timeout.


JkDefrag v3.8 (April 20, 2007)
Changes:
- Fix for the "infinite worm" problem in the full optimization.
- Added "-q" commandline option to the Windows version to exit the program when
  it has finished.
- Changed the "-e" exclude option to support multiple wildcards. Previously
  a matching subdirectory would be skipped, now all files in those directories
  will be scanned.
- Changed the "-e" exclude option to support the excluding of complete disks.
- Fixed a problem in the screensaver that prevented it from finding alternate
  screensavers in the Windows directory.
- Added special exception for the "bcldr.bin" file used by the BestCrypt software
  by "http://www.jetico.com/".
- Fixed a buffer size calculation in the AnalyzeVolume subroutine. It allocated
  too much memory.
- Enlarged a buffer for writing to the logfile. Very long filenames could result
  in an empty message.
- For library developers: added error message 47.


JkDefrag v3.7 (Feb 24, 2007)
Changes:
- Commandline options are now accepted with and without a space between the
  option and the value, for example "-a3" and "-a 3".
- New "-e" commandline option to exclude files/directories.
- New "-f" commandline option to specify a size for the free area.
- New optimization method 6: Analyze, defragment, and move to end of disk.
- New setting in the screensaver for the status bar not to display filenames
  or not to display the status bar altogether.
- The logfile now shows a list of files in the status report that could not be
  moved, and a list of files that are (still) fragmented.
- The logfile now shows the date only once at the top of the file, no loner on
  every line.
- Fixed a bug for the "-l" commandline option that specifies a different location
  for the logfile, where the Windows version of the program would create a
  logfile at the default location containing only 1 line with "Starting, please
  wait...".
- Changed the screensaver's "Do not defrag if last run was less than" radio
  buttons into a pull-down list.
- Fixed a bug in the screensaver wrapper that made the preview window very slow.
- Fixed a bug in the screensaver wrapper that prevented screensaver with a space
  in their filename to run.
- Added code to the screensaver to prevent multiple copies running simultaneously.
- Added more code to the screensaver so it will not include itself in the list
  of alternate screensavers.
- Fixed a bug that would display the wrong name for screensavers that do not
  have a name.
- Removed the "2003" check when listing screensavers, the wrapper makes it
  possible to use non-standard screensavers.
- Added a test to quickly stop optimizing when there is nothing more to do.
- Enlarged a buffer to speed up the fragment analyzation.
- Small change in the code that reduces the number of fragments in huge files
  that cannot be fully defragmented.
- Changed the debug level of the "FSCTL_GET_RETRIEVAL_POINTERS error: Infinite
  loop" from zero to 2, so it won't always be displayed.
- Changed the debug level of the "Skipping gap, cannot fill: %I64d[%I64d]"
  from 3 to 5.
Changes in the DLL library:
- 2 extra parameters in the RunDefrag() call.


JkDefrag v3.6 (Jan 20, 2007)
Changes:
- Added a wrapper program to the screensaver. The alternate screensaver would not start for some users and this will hopefully fix the problem.
- Action 5 "Force together" added. This mode will move all files to the beginning of the disk, even if it means fragmenting them. It fills all the gaps with fragments taken from the highest files.
- A change in the code that determines if a file is fragmented, to reduce the number of files that are uneccesarily moved.
- Debug mode 5 has been split into mode 5 "Detailed gap-filling messages" and mode 6 "Detailed gap-finding messages".
- Fixed a bug that caused a logfile to be created with a single line of text (the version info) when the "-l" commandline option was used.

JkDefrag v3.5 (Jan 07, 2007)
Changes:
- Different method of starting the alternate screensaver, in the hope it will work for more users.
- Added the "%SystemRoot%" folder to scan for screensavers.
- Added a "2003" test to filter out non-standard screensavers.
- Added zero to the choices in the "do not defrag if last run was less than ... hours ago" in the screensaver configuration window.
- Bugfix: if more than one disk was specified on the commandline, and the program was stopped by the user during any but the last disk, then the program would close the window, finish the current file, and start processing the next disk in the background. It will now close the window and finish the current file.
- Different method for determining the LCN of a file, in the hope it will fix a looping problem with compressed files during optimization.
- Made a change in the method used to defragment huge files to reduce the number of midway fails, and make it faster.
- Added debug level 6 for detailed gap-finding messages.
- The "Analyzing disk", "Starting defragmenter for", and "Finished" messages are now written to the logfile.
- For DLL users: Added a parameter to the ShowMove() callback.
- For DLL users: extra message 46.

JkDefrag v3.4 (Dec 25, 2006)
Changes:
- The screensaver now has several settings. You can specify commandline options just like with the other versions, so you can control which disks will be defragged; you can specify another screensaver to run when JkDefrag has finished; and you can select a number of hours to wait before running again.
- The screensaver now writes all the messages to a logfile, just like the other versions.
- Added a bit of code that will find fragmented files at the end of a gap. It's not really necessary but makes certain warnings a bit less confusing.

JkDefrag v3.3 (Dec 15, 2006)
Changes:
- Bugfix for the X64 versions. The program ran but couldn't find any files and therefore didn't do any work. I wish I had an X64 system to test new versions on! Anyone care to donate a computer?
- Added a couple more files to the internal dollar-list of special system files.

JkDefrag v3.2 (Dec 13, 2006)
Changes:
- Fixed a bug in the DLL that caused the name of the RunDefrag() subroutine to be mangled.
- The distributions now include a 'doc' directory with a copy of the JkDefrag homepage.
- Moved the .bat file to compile the X64 version to the main directory.
- Small change in the code that rewrites input paths.
- Suppressed "could not get volume bitmap" message at the end of the optimization phase.

JkDefrag v3.1 (Dec 08, 2006)
when running the program, "3.0" still appears at the top of the window.
Only the version string was incorrect.

JkDefrag v3.1 (Dec 07, 2006)
Changes:
- Managed to compile the screensaver and the DLL for X64.
- Fixed a divide-by-zero error when the window is minimized.
- Added a bit of code to get backup permissions, to gain access to special system files and folders such as the "System Volume Information" folder.
- Added a maximum-loop counter to the code that finds out the size and location of file fragments, as a preventative measure for a suspected bug in the Windows defragmentation API.
- The dollar special system files (such as "$Mft") are no longer analysed when the user has specified a file or a folder on the commandline, but only for full disks.

JkDefrag v3.0 (Dec 03, 2006)
Changes between version 2.27a and version 3.0:
- I've changed the name from plain old "defrag" into "JkDefrag". The old name was really no name at all and made talking about it a little bit awkward. The "jk" are my initials. The change in name is reflected in the names of the executables and the sources, for example "windefrag.exe" is now "JkDefrag.exe".
- The program and it's sources are now released under the GNU General Public License, and the DLL library under the GNU Lesser general public license. Previously the program was copyrighted freeware with published sources.
- New to this release is the screen saver. You can use it just like any other screensaver, go to lunch and come back to a fully optimized harddisk.
- Big changes in the DLL to give programmers access to a lot more data and to make the library completely thread-safe. The new library is not downwards compatible, although the structure and calls resemble the old library.
Changes in the Windows version:
- Name changed from "windefrag.exe" into "JkDefrag.exe".
- Starts in a resizable window instead of full screen.
- Shows a percentage counter of how much is left to do.
Changes in the commandline version:
- Name changed from "defrag.exe" into "JkDefragCmd.exe".
- Prints a small report with some numbers when it has finished processing a disk. The windows version saves the report in the logfile, but does not show the numbers on the screen.
- Options are now processed before processing items.
- Ultra long paths are now supported. Previously the program was limited to a maximum pathlength of 259 characters, as advised by Microsoft, but there are cases where pathnames can grow longer than that. Most Microsoft programs cannot handle ultra long paths.
- Switched to Unicode wide-character strings and system calls for filenames and paths, instead of 8-bit ANSI.
- Replaced the commandline options "o", "o1", and "o2" with the "a" options. It is now possible to run the defragger in analyze-only mode.
- It is now possible to specify individual files on the commandline.
- It is now possible to defragment/optimize unmounted volumes by specifying them explicitly on the commandline.
- Changed the way invisible system files are colorized.
- Invisible system files can now be defragged/optimized when the utility is started from a read-only medium such as cd-rom.
- Fixed a bug that could cause the program to loop when moving files using strategy 2.
- Moved the already-running test from the library to the individual programs, so that the library can now process multiple disks simultaneaously.

Defrag version 2.27 (Nov 16, 2006)
Changes:
- I have upgraded from "Microsoft Visual C++ Toolkit 2003" to "Visual C++ 2005 Express Edition", and from "Microsoft Platform SDK for Windows Server 2003 SP1" to "Microsoft Platform SDK for Windows Server 2003 R2". It required some minor changes in the sources.
- I've included a small "make.bat" in the sources to compile the defragger, and a "x64/make.bat" to compile the x64 versions.

Defrag version 2.27b (Nov 22, 2006)
This is an in-between maintenance release to fix a compilation bug in the X64 executables.
No changes in the regular Windows binaries, and 1 character changed in the sources.

Defrag version 2.26 (Nov 07, 2006)
Changes:
- The defragger can now partially defragment. When it encounters a huge file for which there is no gap big enough, then it will defragment as much of the file as it can. Previously it would just skip the file.
- Added a commandline option "-s" to slow down the defragger.
- The program will now refuse to start if another instance is already running.

Defrag version 2.25 (Oct 23, 2006)
Changes:
- Rewritten the code that draws (colorizes) files on the screen.
- Reorganised the debug messages.
- Fixed a bug that could cause the program to hang on startup.
- Changes that prepare for future partial defrag of huge files.
- Different strategy to retry moving a file.
- Went back to freespace and MFT optimization of version 2.23.

Defrag version 2.24 (Oct 13, 2006)
Changes:
- Further improvements in the algorithms to optimize the directories, the scratch-area, and the files in the MFT-zone.

Defrag pre-versions 2.24 (Pre Oct, 2006)
No history recorded.
