History
-------

13/04/2009  *** v2.36 ***

            - Added support for 64-bit ROM sizes (n.b. not for directory scan).

09/01/2009  *** v2.35 ***

            - Fixed warning messages for ROM size conflicts (Kawaks v1.60).

02/11/2008  *** v2.34 ***

            - Changed the order of MD5 and SHA1 in listinfo and XML datafiles.
            - Removed the ambiguous "-f xml" option. Use listxml or genericxml.

28/10/2008  *** v2.33 ***

            - Added SHA1 / MD5 information for Neil Corlett's KGPE hack.
            - Added load / support for AAE RomList.
            - datutil -k now allows MD5 and SHA1 at the same time.
            - datutil -n will NOT determine file types (everything = roms).
            - Changed the directory scanner to process zero byte files / roms.
            - Support for a new rom / disk status of 'verified'
            - Added save support for the Hyperspin Database format.

16/07/2008  *** v2.32 ***

            - Improved datutil -i to search for ROMs by CRC as well as name.

29/06/2008  *** v2.31 ***

            - Added support for &apos; in the XML formats.

24/06/2008  *** v2.30 ***

            - Added XML entity support to generic XML headers (when saving).

10/06/2008  *** v2.29 ***

            - Added warning when forcenodump is missing.

05/05/2008  *** v2.28 ***

            - Fixed parsing of listinfo comments.
            - MAMEDiff -z option is inferred from 'forcenodump' (if present).
            - Fixed de-duplication of "nodump" ROMs and disks for MAMEDiff.

16/04/2008  *** v2.27 ***

            - Fixed generation of url within CMPro datafiles (needs quotes).
            - Added support for release information (mainly for console ROMs).
            - Added release support to list+generic xml, listinfo, delimited.
            - Added the <release> element to the ROM Management Datafile DTD.
            - Added support for Game Launcher and GameEx Map Files (untested).
            - Added support for substring selections (within descriptions).

06/04/2008  *** v2.26 ***

            - Minor tweaks to the DTD (header and manufacturer now optional).
            - Fixed empty header being written to Generic XML datafiles.
            - Fixed conversion of MESS XML to Generic XML (machines -> games).

04/04/2008  *** v2.25 ***

            - Added automatic date population (based on the version number).
            - Renamed forcezipping to forcepacking (CMPro).
            - Renamed forcedrommode to rommode (RomCenter 3).
            - Renamed forcedbiosmode to biosmode (RomCenter 3).
            - Renamed forcedsamplemode to samplemode (RomCenter 3).
            - Changed from m/s/n to merged/split/unmerged (RomCenter 3).
            - Changed from y/n to yes/no (RomCenter 3).
            - Added internal flags for all header items (fixes, warnings, etc).
            - Added fix summary for header items (appears in datutil.log).
            - Added warnings for invalid header items (appear in datutil.log).
            - Added notices for lost header items (appear in datutil.log).
            - Added the DTD for ROM Management Datafiles (revision 1.1).
            - Documented the limitations of the XML parser in readme.txt.

24/03/2008  *** v2.24 ***

            - Fixed crash (allzip had spurious carriage returns in kyukaidk).

17/03/2008  *** v2.23 ***

            - Simplified the internal handling of CMPro and RomCenter headers.
            - Added date, email, homepage, url, comment, forcenodump to CMPro.
            - Added category to RomCenter header (for completeness).
            - Added the Generic XML format.
            - Note: CMPro, RomCenter and XML headers all contain the same info.

26/11/2007  *** v2.22 ***

            - Fixed crash when loading full MESS XML (0.105 upwards).
            - MESS: Support for new device attributes (type, tag and mandatory).
            - MESS: Support for machine "RAM options".
            - MAME + MESS: Support for new emulator "debug" attribute.
            - MAME + MESS: Changed "refresh" attributes from float to double.
            - MAME + MESS: Added driver "savestate" warnings.

29/07/2007  *** v2.21 ***

            - Empty attributes are now ignored (e.g. sha1="")
            - Removed cloneof, romof and sampleof fixes from datutil -i
            - DatUtil -i, -I and -p now default the output format to CMPro
              (in addition to -g, -G and -r which already behave like that)
            - Added support for the isbios="yes" of MAME v0.117u2 onwards.

01/01/2007  *** v2.20 ***

            - Added 'prune' feature for removing roms, disk and/or samples
            - Added 'incorporate' feature to assist in combining datafiles

30/12/2006  *** v2.19 ***

            - Internal change that only affects MAMEDiff (see note below)
            - Improved -dX modes (understands merging despite differing names) 

17/10/2006  *** v2.18 ***

            - More intelligent DTD creation when saving in ListXML format
            - Added support for game/display (MAME v0.107)
            - Added support for game/input/control (MAME v0.107)
            - Added support for emulator/build (MAME+MESS v0.101u4 upwards)
            - Added support for driver/savestate (MAME v0.101u1 upwards)
            - Note: The above changes affect the tab delimited format!

16/07/2006  *** v2.17 ***

            - Fixed bug that caused the DatUtil -g and -r options to crash

11/07/2006  *** v2.16 ***

            - Fixed bug that messed up internal indices (affected crc matching)
            - More intelligent directory scanner (regarding samples and CHDs)
            - Removed 64MB file limit from directory scanner (reads 1MB blocks)

13/01/2006  *** v2.15 ***

            - Last release would not load data files less than 4KB in size!

12/01/2006  *** v2.14 ***

            - Added a save-only format to imitate MAME's gamelist.txt file.
            - File identification is now done by loading just the first 4KB.

06/12/2005  *** v2.13 ***

            - DatLib v2.12 broke the RomCenter drivers (now fixed).

05/12/2005  *** v2.12 ***

            - Fixed a rare crash (if the longest line in the dat was the last).
            - Fixed a problem loading RomCenter data files containing [].

13/11/2005  *** v2.11 ***

            - Added support for 'board', 'colordeep', 'credits' and 'archive'
              (fully supported by ListInfo, ListXML and Delimited formats).
            - M1 XML loader now retains the 'board' information (see above).
            - M1 XML will not use hex for ROM sizes after all... changed back!
            - Improved the way that the Nebula driver handles Neo-Geo ROMs.
            - Fixed Nebula Jukebox driver for Neo-Geo ROMs (broken in v2.7).

31/10/2005  *** v2.10 ***

            - Fixed identification of ListXML for MAME+MESS v0.101u4 onwards.
            - Added OPTION_ALWAYS_QUOTE for DatUtil (the '-q' option).

28/10/2005  *** v2.9 ***

            - Added better support for file formats that use hex ROM sizes.
            - M1 XML will use hex for ROM sizes. Changed driver accordingly.
            - Now reports duplicate game descriptions and CRCs (i.e. ROMs).

05/10/2005  *** v2.8 ***

            - Improved the logerror() function (used for reporting ZIP errors).
            - Added support for M1's XML format (when it becomes available).

17/09/2005  *** v2.7 ***

            - Compiled with zlib 1.3.
            - Improved Neo-Geo handling for the Nebula driver.
            - Improved 'romof' handling for RomCenter 2 driver (during loading).

31/08/2005  *** v2.6 ***

            - Fixed a 'hang' that occurred with circular cloneof relationships.

10/04/2005  *** v2.5 ***

            - Excludes disks from RomCenter data files (datutil -k to override).

25/03/2005  *** v2.4 ***

            - Fixed another crash with datutil -X and 'forcemerging full'.
            - Changed the delimited format to use \N for NULLs.
            - Changed the delimited format so that all types are 'game_*'.
            - Changed the delimited format so that games include 'runnable'.
            - Added save support for a DISK section in the RomCenter format.
            - Added several aliases for the output formats (see DatUtil docs).

07/03/2005  *** v2.3 ***

            - Fixed a problem with counting parents (happened with DatUtil -X).
            - This also avoids a crash with datutil -X and 'forcemerging full'.

28/02/2005  *** v2.2 ***

            - Changed strtof to atof (for the guys compiling on NetBSD).
            - Added support for tab delimited files ('-f delimited').
            - Added save-support for RomCenter sublists ('-f sublist').
            - Added \t support to the listinfo driver (and tab delimited).
            - Fixed problem of unrecognised escape sequences looping forever!

22/02/2005  *** v2.1 ***

            - Made selections more flexible (can now use commas as a delimiter).
            - Added warnings for invalid game/sourcefile selections (-g and -G).
            - Added warning messages for duplicated games (i.e. same game name).
            - Can identify listinfo files even if they only contain resources.
            - The 'remove clones' option will retain the original dat format.
            - Fixed a crash caused by empty selection files (the '@' syntax).
            - Saving a RomCenter datafile will now report an error if the ''
              symbol is used in the game or ROM details (i.e. the dat is bad).
            - Changed the error messages that are given when files are missing.

13/02/2005  *** v2.0 ***

            - Compiled with GCC 3.4.2 (previously used GCC 3.2.3).
            - Added 'sourcefile' support to the listinfo and listxml drivers.
            - Now supports all known details in listinfo and listxml.
            - Use the flag OPTION_KEEP_FULL_DETAILS to switch on full loading!
            - N.b. ROM region is not loaded without OPTION_KEEP_FULL_DETAILS.
            - Supports 'history' entries (when using OPTION_KEEP_FULL_DETAILS).
            - Added support for \\, \n, \xXX and \" in ListInfo (e.g. history).
            - Improved entity handling (e.g. &amp; &#X;) in the ListXML parser.
            - Supports 2 additional MESS objects (devices and extensions).
            - DatLib can now save data in listxml format (MAME and MESS).
            - Changed the listxml and listinfo drivers to use simple macros.
            - Changed the internal representation of baddump/nodump.
            - Complemented CRCs are reported (should use flags nodump instead).
            - Added checks for MD5 and SHA1 conflicts (CRCs already checked).
            - Added OPTION_FIX_MERGING_OFF and OPTION_REMOVE_DUPLICATES_OFF.
            - Added OPTION_SOURCEFILE_SELECTION and OPTION_INVERT_SELECTION.
            - Added support for external selection files with the @ symbol.
            - Renamed OPTION_GAME to OPTION_GAME_SELECTION.
            - Renamed OPTION_GAME_AND_CLONES to OPTION_CLONE_SELECTION.
            - Removed the hack made in DatLib v1.13 for Calice drivers.
            - Removed funny size and missing year checks (pretty useless now).

16/01/2005  *** v1.14 ***

            - Added support for the GNGEO romrc file.
            - Increased maximum ROM size to 64MB (used when scanning folders).

04/01/2005  *** v1.13 ***

            - Added support for Calice drivers.
            - Modified the -i functionality for the use of Calice drivers.
            - Made a change to getopt.h for the latest version of MinGW/GCC.

25/11/2004  *** v1.12 ***

            - Improved the handling of CRC conflicts within the 'fix merging'.

26/10/2004  *** v1.11 ***

            - Added a parser for the ZiNc --list-sets.

18/08/2004  *** v1.10 ***

            - Better handling of 'clones of clones' when loading data files.

30/07/2004  *** v1.9 ***

            - Added full support for disk 'merge' and 'flags' information.
            - Improved the FORMAT_LISTINFO_XXXXXX macros a little bit.

22/07/2004  *** v1.8 ***

            - Removed the need for xml2info by adding my own MAME XML parser.
            - A nice side effect is that names like "Alien: The Gun" work now!

21/07/2004  *** v1.7 ***

            - Added support for MESS XML.
            - Added disks and samples to the game_zip structures.
            - Now avoids duplicate ROMs getting into the game_zip structures.
            - Added OPTION_INCLUDE_NODUMPS_IN_ZIPS for game_zip structures.
            - Directory scanner now supports CHDs (when in a game directory).
            - Directory scanner can spoof samples (OPTION_OBJECT_TYPE_SAMPLE).
            - Improved 'fix merging' (where clone ROMs are not in the parent).
            - Enhanced 'fix merging' to work for disks (SHA1/MD5 are copied).
            - Added check for SHA1/MD5 conflicts of disks across clones.

18/07/2004  *** v1.6 ***

            - Added disk CRCs for MAMEDiff (CRC is calculated using MD5/SHA1).
            - Added OPTION_NON_SEPERATED_BIOS_ROMS for MAMEDiff -d1/-d2/-d3.

17/07/2004  *** v1.5 ***

            - Added the OPTION_NEBULA_JUKEBOX (parses Z80 and Samples only).

11/07/2004  *** v1.4 ***

            - Added support for comments before games in CMPro data files.
            - Added an option to ignore missing year information.
            - Changed the way that parameters are passed to init_dat().
            - Changed the way that parameters are passed to save_dat().
            - Only SHA1 _or_ MD5 will be processed now. Using both is silly!
            - Added function to extract missing info from another dat/dir.

06/07/2004  *** v1.3 ***

            - Fixed a build_zip_structures() problem occurring with empty ZIPs.

05/07/2004  *** v1.2 ***

            - Removed ROM size limit when extended checksums are not being used.
            - Empty ZIPs are not loaded into the game_zip structures now. 

04/07/2004  *** v1.1 ***

            - ClrMamePro/RomCenter header is now ignored when using OPTION_GAME.
            - Removed a warning when you try using 'datutil -g <resource> -c'.
            - Added debug information to identify spurious warnings like above.
            - Directory/ZIP scanner will not calculate MD5/SHA1 by default now.
            - You must use OPTION_EXTENDED_CHECKSUMS, as used by 'datutil -x'.

02/07/2004  *** v1.0 ***

            - First public release.
