0.5.1:
------

- Made some minor edits to the man page.

- Incorporated RPM .spec file changes contributed by Scott Collier
  (boodle11@gmail.com).

- Changed method of locating and loading backup GPT data, to use the
  main header's pointer, if it's valid, rather than seeking to the
  end of the disk.

- Added 'e' option (relocate backup GPT data structures) to the experts'
  menu.

- Fixed bug that prevented recovery of partitions in case of partially
  damaged GPT data (bad main and good backup or bad backup and good
  main header, for instance).

0.5.0:
------

- Added GPT-to-MBR conversion function. It's very limited, but potentially
  useful in some cases.

- Fixed bug that caused incorrect file sizes to be reported on 32-bit
  Linux, thus causing problems when editing partition tables in disk images
  or when loading GPT backup files.

- Fixed bug that caused bogus CRC error reports when loading backup GPT
  data.

- Reorganized menus. There are now three: the main menu, the experts' menu,
  and the recovery & transformation menu. The last of these has most of the
  items that had been on the earlier versions' experts' menu.

- Added ability to re-load the MBR and generate a fresh GPT from it. This
  is normally identical to quitting and re-running the program, but it
  could be handy if, say, the GPT partitions on a hybrid configuration are
  badly messed up; this will enable using the hybridized partitions as the
  starting point for a new GPT setup.

- The program now generates CHS values for hybrid and GPT-to-MBR conversion
  MBRs. For the moment, the assumption is the maximum number of heads and
  sectors per track (255 and 63, respectively), although the bulk of the
  code supports other values -- it'd just be awkward to enter the data in
  the user interface.

- Fixed minor display bug that caused number of sectors on the disk to be
  shown as 0 on large disks when running 32-bit binaries.

- Reverted 0.4.2's zap (destroy GPT) changes, since I don't want to wipe
  out a valid MBR if the user created that MBR over an older GPT without
  first properly wiping out the GPT, and the user now wants to wipe out
  the GPT.

- Reformatted and edited the man page. Aside from edits related to the
  preceding program changes, I've altered the markup slightly and trimmed
  much of the more tutorial information from the man page to better
  conform to typical terse man page style.

0.4.2:
------

- Code cleanup.

- Fixed very small formatting bug in display of hex code when a match isn't
  found when converting from an MBR/gdisk hex code to a GUID type code.

- Added the ability to work on disk image files (raw files for virtual
  machines, backup images, etc.). The program assumes that all such disk
  image files have 512-byte sectors.

- Added verification prompt to 'o' main-menu option to avoid accidental
  erasures of all partitions.

- The "destroy GPT data structures" option ('z' on the experts' menu) now
  also destroys all EFI GPT (0xEE) partitions in the MBR.

- Added an extra warning to the "destroy GPT data structures" option if an APM
  or BSD disklabel was detected on the disk.

- Added a buffer flush after destroying GPT data structures, to get the OS
  to read the new (empty or MBR-only) partition table.

- Fixed bug that allowed entry of nonexistent partition numbers when creating
  a hybrid MBR.

0.4.1:
------

- Code cleanup/re-organization

- Partition creation function ('n' on main menu) now uses the start of the
  largest available chunk of free space rather than the first available
  sector as the default starting sector number. This should enable easier
  partition creation if there are small bits of free space on the disk.

- You can now specify the end point of a partition by using a minus sign,
  in which case the end point is the default value minus the specified
  size. For instance, "-200M" creates a partition that ends 200MiB before
  the default end point.

- You can now specify the start point of a partition by using a plus or
  minus sign, in which case the start point is the specified distance from
  the start (+) or end (-) of free space. This is exactly the same as the
  new rules for entry of the end point, except that the default value is
  set differently.

- Deleting a partition now checks for a matching hybrid MBR partition, and
  if one is found, it's deleted. Any empty space that then surrounds the
  0xEE (EFI GPT) MBR partitions is then added to the nearby 0xEE partition.
  If no non-0xEE partitions are left, a fresh protective MBR is generated.

- Added hybrid MBR consistency check to the verify ('v') option and to
  pre-write checks. If non-0xEE/non-0x00 MBR partitions without
  corresponding GPT partitions are found, the user is warned. This finding
  does NOT prevent writing the partition table, though.

- Added non-destructive write test when opening the device file, in order
  to detect the problem with FreeBSD being unable to write to disks with
  mounted partitions (or other potential problems).

0.4.0:
------

- Added support for BSD disklabels. The program can now convert disks that
  use "raw" disklabels, with the caveat that the first partition will
  almost certainly need to be deleted because it'll overlap the main GPT
  header; and convert disklabels contained within a GPT (or a former MBR,
  converted to GPT) partition. In the latter case, the 'b' main menu option
  is used.

- Added support for compiling on FreeBSD.

- Fixed bug that could cause crashes or incomplete sorts when sorting
  the partition table.

- New partitions, including converted ones, now take on the name of the
  partition type as a default name.

- Reorganized some code; created a separate C++ class for GPT partitions
  (GPTPart), which replaced a struct and enabled moving code from the
  bloated GPTData class into GPTPart.

- Fixed a bug that produced spurious warnings about unknown sector sizes
  when loading a backup file.

0.3.5:
------

Note: This version was not officially publicly released; I wanted to test
the big-endian support while developing 0.4.0.

- Tweaked the disk type identification code to warn users to re-sync their
  hybrid MBRs when one is detected.

- Tweaked MBR-reading code to ignore 0xEE (EFI GPT) partitions. This will
  only have an effect on a poorly partitioned MBR disk that contains an
  inappropriate EFI GPT partition, or when attempting to recover a
  corrupted disk by using the hybrid MBR for data recovery.

- Added big-endian (PowerPC, etc.) support!

- Added code to identify and warn of the presence of an Apple Partition
  Map (APM) on the disk.

- Enabled MBR conversion code to handle multiple logical partitions.

0.3.4:
------

- Fixed bug that enabled (possibly accidental) entry of MBR type codes of
  0x00 in GPTData::MakeHybrid(). The fix also enables entry of default
  type code by pressing the Enter key when prompted. Applied a similar
  fix to the entry of the type code for the second protective partition,
  if one is used.

- Fixed a typo: "sectors" was spelled "sectprs" in one spot!

- Fixed bug that caused default entry for end sector to be refused if an
  initial value using a plus sign (e.g., "+20G") was also refused.

0.3.3:
------

- Gave users control over the way MBR partitions are assigned to slots in a
  hybrid MBR setup; the original method (putting the 0xEE partition after
  the real partitions) works well for non-boot disks, but both GRUB and
  GRUB2 become confused by this type of setup, so it needs changing.

- Changed "blocks" to "sectors" in GPT and MBR table displays.

- Added "Boot" column to MBR table display; shows an asterisk (*) when the
  partition's status is bootable.

0.3.2:
------

- Changed __DARWIN_UNIX03 to __APPLE__ as code to enable MacOS X support.

- Added the ability to create a hybrid MBR ('h' on experts' menu). This was
  motivated by my discovery that Windows 7 remains brain-dead when it comes
  to the ability to boot from a GPT disk, at least on BIOS-based machines.

- Added 'z' option to experts' menu, to destroy GPT data structures and
  exit. The intent is to use this feature to enable subsequent partitioning
  of the disk using fdisk or other GPT-unaware tools. (GNU Parted will wipe
  the GPT data structures itself when you create a new MBR ["msdos
  disklabel," in Parted parlance], so using Parted is another option.)

- Slightly altered the effect of the 'o' command on the main menu. It now
  blanks out the protective MBR, as well as the GPT data.

0.3.1:
------

- Added Mac OS X support, provided as a patch by David Hubbard
  (david.c.hubbard@gmail.com).

- Fixed bug in disksize() function on Mac OS. (Possibly dependent on the
  kernel and/or GCC version.) The disk size, of type uint64_t, was not
  being passed correctly, so I reorganized the function to return it as
  the function's return value rather than as a parameter. This seems to
  work OK on my Mac OS test system and on both 32- and 64-bit Linux
  systems.

- Fixed off-by-one bug in GPTData::FindLastAvailable().

- Fixed bug that caused display of options after a disk-write error.

- Fixed several incorrect MacOS X partition type GUIDs, thanks to Yves
  Blusseau (1otnwmz02@sneakemail.com).

0.3.0:
------

- Changed version number to 0.3.0, reflecting the fact that I've received
  no significant bug reports and so am elevating the program to "beta"
  status. This change also entailed altering the warning the program
  displays when saving partition table changes.

- Fixed minor bug in CHS geometry of the protective MBR's type EE partition
  (was producing 0x000200 as the start value, but should be 0x000100).
  Should be a non-critical bug since the protective MBR partition
  definition is only there to keep MBR-only disk utilities from messing
  with the disk.

- Added ability to enter GUIDs as single massive strings rather than in
  chunks.

0.2.2:
------

- Added #include directives required to compile the program using GCC
  4.4.0.

0.2.1:
------

- Fixed partition numbering problem in reports of partition overlaps in
  verification function.

- Fixed 1-sector partition size problem when creating new partitions
  (partitions were 1 sector too big when using the +size option).

- Changed BytesToSI() to display values in bytes without decimal points
  (e.g., "512 bytes" rather than "512.0 bytes").

- Added GPTData class member functions to retrieve GPT data structure
  locations on disk; used in my internal-use-only GPT-wiping program.

- Eliminated the "a reboot is recommended" notice after writing the
  partition table.

- Added notice after sorting the partition table to the effect that
  editing /etc/fstab and/or the boot loader files may be required.

- Fixed bug in MBR-reading function that caused 0x0f (Win95 LBA) and 0x85
  (Linux extended) extended partitions to not be read.

- Fixed bug in GetLastSector() (in support.cc) that would have prevented
  correct user entry of over-32-bit sector numbers on 32-bit systems.

- Made some changes/corrections to the partition type list in
  parttypes.cc. Most of these were based on newly-discovered MBR type
  codes for Apple (Mac OS X) filesystems.

- General code cleanup (setting explicit casts, etc.)

0.2.0:
------

- Initial semi-public release
