$Id: HISTORY,v 1.3 2000/04/17 05:05:01 eldamitri Exp $ ID3Lib History The following is a history of id3lib up to version 3.05a. Please see the NEWS file for changes since then. 23 Nov 1998 3.05a - Released 3.05a in which the only change was the inclusion of a C header file for using the DLL (how forgetful I am!). 22 Nov 1998 3.05 - Released 3.05 and the DLL. 8 Nov 1998 3.05 - Finished the first revision of the DLL. Interesting stuff. Contains both C++ class and C functions (the C++ classes that are exported to the DLL are Tag, Frame, Field and Error). - Took out the SetVersion function from the ID3_Tag class. This is because I no longer wish ID3Lib to be able to create the old ID3v2-2.0 tags. ID3Lib will always create the latest version tags it is capable of creating. 1 Nov 1998 3.05 - Removed the encryption and grouping stuff. I have a lot to do before I finish that section and I might end up implementing it differently, so I thought it best to remove it before people started using it (no-one should since it wasn't fully functional anyway). 13 Oct 1998 3.05 - Work has begun on the Windows DLL. 9 Oct 1998 3.04 - Added the text list handling functions from 2.16, but they are slightly different under 3.xx. - Also added a Size() function for fields which applications can use to allocate buffers and so on. - Work has progressed on the encryption and grouping side of things, but nothing usable by an application just yet. 5 Oct 1998 3.04 - Changed the ID3_AddHandler() function to include a parameter which specifies the factor by which the size of the frame may increase as a result of encryption or encoding. This is used for buffer and size estimates. 3 Oct 1998 3.03a - Fixed a small Unicode BOM bug. 2 Oct 1998 3.03 - Added very minimal and not-totally-functional support for the automatic handling of encryption and grouping. - Added a function to ID3_Tag which makes attaching arrays of ID3_Frame objects easy. 1 Oct 1998 3.03 - Yesterday, ID3v2-3.0 became an informal standard. Due to this, ID3Lib now does not create ID3v2-3.0 tags with the EXPERIMENTAL bit set. 30 Sep 1998 3.02 - Expanded the error handling class to include functions which return the ID3Lib source file and line number of the exception. This is useful for debugging and generating bug reports (hint, hint). 28 Sep 1998 3.02 - Added the grouping registration and encryption registration frames. Also added support for parsing and rendering frames with the grouping and encryption symbols, although currently this data is ignored. I plan to implement call backs to handle the encryption and decryption of data. Also, there is currently no checking at render-time that all frames which have these symbols also have a corresponding rego frame. 26 Sep 1998 3.02 - Changed the 'tag changed' stuff so that calls to ID3_Tag::SetVersion(), ID3_Tag::SetCompression() etc now constitute a change in the tag. This is because of the relaxed restrictions on the calls to these functions before rendering/updating. - Fixed a bug in the ID3_Tag::Link() command. 25 Sep 1998 3.01 - Added the ID3_Tag::RemoveFrame() function. - Added the ID3_Tag::SetExtendedHeader() function, even though this setting is currently ignored. - Added luint return type to the Field::Get() functions for ASCII and Unicode strings. These functions now return how many characters (not bytes necessarily) of the supplied buffer were used, not including the NULL-termination. - Added the 'unique file identifier' frame which I omitted from 3.00 but was present in 2.xx. - Added code that allows ID3Lib and applications to track whether a tag has been altered since the last parse or render. - Slightly altered the padding strategy when a tag shrinks in size. - No more requirements on when ID3_Tag::SetVersion() etc must be called, except that they should be called prior to an update or render if you plan to use different settings than the defaults. 21 Sep 1998 3.00 - Released 3.00 15 Sep 1998 3.00 - Added support for parsing and converting ID3v1/1.1 and Lyrics3 v2.0 tags and CDM frames from 2.01 experimental tags. Also parses Unicode now. 9 Sep 1998 3.00 - Work almost done on 3.00. A little bit to fix up in the parsing department (doesn't parse Unicode yet, or CDMs from the old 2.01 draft). Then just add validity checking and support for most of the frames. 2 Sep 1998 2.16 - Small Unicode string parsing bug fixed. 25 Aug 1998 2.15 - Small bug fixes in the tag parsing routines. - Completely removed support for creating extended headers, and ID3Lib will now ignore tags which have the EXTENDEDHEADER bit set (as under 2.00, this bit isn't defined). 24 Aug 1998 2.14 - Small bug fixes in the example file 'convert.cpp'. - ID3Lib now sets the EXPERIMENTAL bit in the tag header. 13 Aug 1998 2.13 - As of 2.13, ID3Lib now comes in two flavours. The first is the normal distribution as we have come to know and love. The second is a machine-specific archive which contains the static link libraries. Currently, you can get Win32 link libraries. 12 Aug 1998 2.12 - As of 2.12, the ID3Lib distribution will contain precompiled static libraries for Visual C++ and eventually for Linux i386. The MSVC static libs are be compiled for the multi-threaded run-time library and there will be one for debugging and one normal one for release-quality applications. - Fixed a small exclusion in the 'id3_support.h' file. It now contains a #include for the 'wchar.h' header file. The absence of this line resulted in some applications producing compilation errors if they didn't already include it or 'stdio.h'. 11 Aug 1998 2.12 - I created a small problem in 2.11 where the name of the URL field in the 'ID3FID_WWWUSER' frame ('WXX') was changed from ID3FN_URL to ID3FN_TEXT. This has been fixed (is back to ID3FN_URL). - When reading a binary tag, previous versions of ID3Lib ignored the fact that some of the frames in the tag may have been compressed, so when writing the tag back out, those old frames were written without compression. This is fixed so that all old frames are written back out as they were read in, unless of course you explicitly change the compression status before rendering the new tag. - Added the ID3C_SetSongSize and ID3C_GetSongSize commands to the ID3_Tag class. These allow you to tell ID3Lib how big (in bytes) the song file is to which you intend attaching the tag. ID3Lib can then work out how much padding the tag requires to correctly make the entire resulting file fill an even multiple of 2Kb. - If the tag we are manipulating was read in as a binary tag before we started playing with it, then ID3Lib will record the size of tag before we started fooling around with it. This way, the padding system can pad the new tag out to the old size if the new tag will still fit inside the old one. This makes file manipulation much easier when writing tags to existing song files. If it won't fit, then the new tag will receive padding as per the 2K cluster method. All this talk of padding only applies if the tag's padding property is set to ID3PD_AUTOMATIC, which it is by default. 10 Aug 1998 2.11 - Replaced ID3C_SetID and GetID with proper field names, and the same with ID3C_SetComp and GetComp. This requires a change in source code for the application. Without quotes, do a search and replace... "ID3C_SetID," replace with "ID3C_Set, ID3FN_ID," "ID3C_GetID," replace with "ID3C_Get, ID3FN_ID," "ID3C_SetComp," replace with "ID3C_Set, ID3FN_COMPRESSED," "ID3C_GetComp," replace with "ID3C_Get, ID3FN_COMPRESSED," - Thanks to a suggestion by Ilana Rudnik, I added a generic frame type called 'ID3FID_UNSUPPORTED' which is only to be used by applications as a 'place-holder' in lists and arrays while waiting for ID3Lib to support all the frames. 6 Aug 1998 2.11 - Created the ID3C_Locate and ID3C_GetNumFrames commands. - Made the documentation an HTML file instead of boring text. 5 Aug 1998 2.11 - Thanks to Eng-Keong Lee, I have located and fixed a bug which most-of-the-time caused a crash when performing an ID3C_SetID on a frame for the first time. 3 Aug 1998 2.10 - Fixed a few things to make ID3Lib compile completely cleanly under Linux - thanks to Carlos Puchol for finding the remaining hassles. - Added two commands to adjust the unsync facility - ID3C_SetUnsync and ID3C_GetUnsync. The default is ID3SY_AUTOMATIC. - Add support for the 2.01 extended tag header. By default, ID3Lib will NOT write an extended header to tags it creates. This can be adjusted by the ID3C_SetExtHeader command. - Changed the directory structure so that the required zlib source is now in the same directory as the ID3Lib source. 2 Aug 1998 2.10 - Fixed a small memory leak which occurred when clearing a tag of frames which were read in from an external binary tag. - Added a 'bugreport.txt' file to the documentation to improve effectiveness of bug reporting. 1 Aug 1998 2.10 - Adding support for tag padding. This results in two new commands which operate on ID3_Tag objects: ID3C_SetPadding and ID3C_GetPadding. 1 Aug 1998 2.09 - Fixed some bugs in the ID3C_ToFile and ID3C_FromFile commands. - Fixed a bug which prevented empty strings which were supposed to be NULL-terminated from doing so. 31 Jul 1998 2.09 - Changed the functionality of the error handling mechanism. The function interface to the error handler has changed - see the example source file 'main.cpp' for details. - Improved frame verification somewhat. 28 July 1998 2.08 - Added ID3C_ToFile command to binary fields. - Changed the format of the ID3C_Size command when applied to frames. There is now a required second parameter which specifies which field you require the size of. If you request ID3FN_ALL, you will get the size of the frame itself. - The above change for ID3C_Size now also applies to the ID3C_Clear command (again, only when applied to frames). - Enhanced the ID3C_Find command so as to allow searches based on the ID3FN_LANGUAGE field and the ID3FN_DESCRIPTION field. 27 July 1998 2.07 - Fixed a bug which had the WXX and TXX frames including a language field which they shouldn't. - Fixed a bug in the string's ID3C_Get command which wrongly interpreted the presence of a '/' symbol in the string as meaning that the string was a textlist. 21 July 1998 2.06 - Added support for frame compression via zlib. This means that all frames have an extra attribute which specifies whether the frame should be compressed. - Changed some typedefs and macro names so as not to clash with some of Windows' pre-defined datatypes/names. Thanks to Chuck Zenkus for finding this. 14 July 1998 2.05 - Finished up Unicode support. All internal string handling is done with Unicode strings. Strings are converted as needed during rendering of the tag. 6 July 1998 2.05 - BINARY fields now support an 'ID3C_FromFile' command which fills the field with data from the specified file. The file is read and the contents placed in the field immediately on the field encountering this command. 2 July 1998 2.04 - Improved support for frame validation. - Repaired a cool bug in the error handling which prevented an application from finding further information about the error. This fix resulted in a new format for the application error handler function. 2.03 - Added support for the ID3C_Add, ID3C_Remove, ID3C_GetElement, ID3C_GetNumElements commands in the STRING field type. This allows easy use of the text lists as used in the 'TP1' frame. - Improved error handling once more. - Added support for the ID3C_Increment command in the INT field type. - Added support for the CNT, POP, GEO, TCO, TCR and UFI frames. - Added preliminary validation checking for frames to ensure they meet the ID3v2 standard requirements. Not fully implemented. 2.02 - Adjusted the '::Do()' function slightly - you can now chain commands together. The last parameter to this call must now always be 'ID3C_DONE'. 1 July 1998 2.01 - Added the 'ID3_IsTagHeader()' function and an appropriately adjusted ID3C_Parse command. 30 June 1998 2.00 - First preliminary release of ID3Lib v2.00. Supports lots of frames (even PIC). Lots of work still needed. 25 June 1998 2.00 - Abandoned the v1.xx framework in favour of a more versatile and expandable one. This required a major re-write of most of the internals of the library as well as changes to any applications using the previous framework. The new framework is part of all ID3Libs which are 2.xx. 23 June 1998 1.01 - Released v1.01 which added support for four new frames. TXX, WXX, COM, ULT 21 June 1998 1.00 - Initial Release (v1.0)