1$Id: HISTORY,v 1.3 2000/04/17 05:05:01 eldamitri Exp $
2
3ID3Lib History
4
5The following is a history of id3lib up to version 3.05a.  Please see the
6NEWS file for changes since then.
7
823 Nov 1998     3.05a   - Released 3.05a in which the only change was the
9                          inclusion of a C header file for using the DLL
10                          (how forgetful I am!).
11
1222 Nov 1998     3.05    - Released 3.05 and the DLL.
13
14 8 Nov 1998     3.05    - Finished the first revision of the DLL.  Interesting
15                          stuff.  Contains both C++ class and C functions (the
16                          C++ classes that are exported to the DLL are Tag,
17                          Frame, Field and Error).
18                        - Took out the SetVersion function from the ID3_Tag
19                          class.  This is because I no longer wish ID3Lib to be
20                          able to create the old ID3v2-2.0 tags.  ID3Lib will
21                          always create the latest version tags it is capable
22                          of creating.
23
24 1 Nov 1998     3.05    - Removed the encryption and grouping stuff.  I have a
25                          lot to do before I finish that section and I might
26                          end up implementing it differently, so I thought it
27                          best to remove it before people started using it
28                          (no-one should since it wasn't fully functional
29                          anyway).
30
3113 Oct 1998     3.05    - Work has begun on the Windows DLL.
32
33 9 Oct 1998     3.04    - Added the text list handling functions from 2.16, but
34                          they are slightly different under 3.xx.
35                        - Also added a Size() function for fields which
36                          applications can use to allocate buffers and so on.
37                        - Work has progressed on the encryption and grouping
38                          side of things, but nothing usable by an application
39                          just yet.
40
41 5 Oct 1998     3.04    - Changed the ID3_AddHandler() function to include a
42                          parameter which specifies the factor by which the
43                          size of the frame may increase as a result of
44                          encryption or encoding.  This is used for buffer and
45                          size estimates.
46
47 3 Oct 1998     3.03a   - Fixed a small Unicode BOM bug.
48
49 2 Oct 1998     3.03    - Added very minimal and not-totally-functional support
50                          for the automatic handling of encryption and
51                          grouping.
52                        - Added a function to ID3_Tag which makes attaching
53                          arrays of ID3_Frame objects easy.
54
55 1 Oct 1998     3.03    - Yesterday, ID3v2-3.0 became an informal standard.
56                          Due to this, ID3Lib now does not create ID3v2-3.0
57                          tags with the EXPERIMENTAL bit set.
58
5930 Sep 1998     3.02    - Expanded the error handling class to include
60                          functions which return the ID3Lib source file and
61                          line number of the exception. This is useful for
62                          debugging and generating bug reports (hint, hint).
63
6428 Sep 1998     3.02    - Added the grouping registration and encryption
65                          registration frames.  Also added support for parsing
66                          and rendering frames with the grouping and encryption
67                          symbols, although currently this data is ignored.  I
68                          plan to implement call backs to handle the encryption
69                          and decryption of data.  Also, there is currently no
70                          checking at render-time that all frames which have
71                          these symbols also have a corresponding rego frame.
72
7326 Sep 1998     3.02    - Changed the 'tag changed' stuff so that calls to
74                          ID3_Tag::SetVersion(), ID3_Tag::SetCompression() etc
75                          now constitute a change in the tag.  This is because
76                          of the relaxed restrictions on the calls to these
77                          functions before rendering/updating.  - Fixed a bug
78                          in the ID3_Tag::Link() command.
79
8025 Sep 1998     3.01    - Added the ID3_Tag::RemoveFrame() function.
81                        - Added the ID3_Tag::SetExtendedHeader() function, even
82                          though this setting is currently ignored.
83                        - Added luint return type to the Field::Get() functions
84                          for ASCII and Unicode strings.  These functions now
85                          return how many characters (not bytes necessarily) of
86                          the supplied buffer were used, not including the
87                          NULL-termination.
88                        - Added the 'unique file identifier' frame which I
89                          omitted from 3.00 but was present in 2.xx.
90                        - Added code that allows ID3Lib and applications to
91                          track whether a tag has been altered since the last
92                          parse or render.
93                        - Slightly altered the padding strategy when a tag
94                          shrinks in size.
95                        - No more requirements on when ID3_Tag::SetVersion()
96                          etc must be called, except that they should be called
97                          prior to an update or render if you plan to use
98                          different settings than the defaults.
99
10021 Sep 1998     3.00    - Released 3.00
101
10215 Sep 1998     3.00    - Added support for parsing and converting ID3v1/1.1
103                          and Lyrics3 v2.0 tags and CDM frames from 2.01
104                          experimental tags.  Also parses Unicode now.
105
106 9 Sep 1998     3.00    - Work almost done on 3.00.  A little bit to fix up in
107                          the parsing department (doesn't parse Unicode yet, or
108                          CDMs from the old 2.01 draft).  Then just add
109                          validity checking and support for most of the frames.
110
111 2 Sep 1998     2.16    - Small Unicode string parsing bug fixed.
112
11325 Aug 1998     2.15    - Small bug fixes in the tag parsing routines.
114                        - Completely removed support for creating extended
115                          headers, and ID3Lib will now ignore tags which have
116                          the EXTENDEDHEADER bit set (as under 2.00, this bit
117                          isn't defined).
118
11924 Aug 1998     2.14    - Small bug fixes in the example file 'convert.cpp'.
120                        - ID3Lib now sets the EXPERIMENTAL bit in the tag
121                          header.
122
12313 Aug 1998     2.13    - As of 2.13, ID3Lib now comes in two flavours.  The
124                          first is the normal distribution as we have come to
125                          know and love.  The second is a machine-specific
126                          archive which contains the static link libraries.
127                          Currently, you can get Win32 link libraries.
128
12912 Aug 1998     2.12    - As of 2.12, the ID3Lib distribution will contain
130                          precompiled static libraries for Visual C++ and
131                          eventually for Linux i386.  The MSVC static libs are
132                          be compiled for the multi-threaded run-time library
133                          and there will be one for debugging and one normal
134                          one for release-quality applications.
135
136                        - Fixed a small exclusion in the 'id3_support.h' file.
137                          It now contains a #include for the 'wchar.h' header
138                          file.  The absence of this line resulted in some
139                          applications producing compilation errors if they
140                          didn't already include it or 'stdio.h'.
141
14211 Aug 1998     2.12    - I created a small problem in 2.11 where the name of
143                          the URL field in the 'ID3FID_WWWUSER' frame ('WXX')
144                          was changed from ID3FN_URL to ID3FN_TEXT.  This has
145                          been fixed (is back to ID3FN_URL).
146                        - When reading a binary tag, previous versions of
147                          ID3Lib ignored the fact that some of the frames in
148                          the tag may have been compressed, so when writing the
149                          tag back out, those old frames were written without
150                          compression.  This is fixed so that all old frames
151                          are written back out as they were read in, unless of
152                          course you explicitly change the compression status
153                          before rendering the new tag.
154                        - Added the ID3C_SetSongSize and ID3C_GetSongSize
155                          commands to the ID3_Tag class.  These allow you to
156                          tell ID3Lib how big (in bytes) the song file is to
157                          which you intend attaching the tag.  ID3Lib can then
158                          work out how much padding the tag requires to
159                          correctly make the entire resulting file fill an even
160                          multiple of 2Kb.
161                        - If the tag we are manipulating was read in as a
162                          binary tag before we started playing with it, then
163                          ID3Lib will record the size of tag before we started
164                          fooling around with it.  This way, the padding system
165                          can pad the new tag out to the old size if the new
166                          tag will still fit inside the old one.  This makes
167                          file manipulation much easier when writing tags to
168                          existing song files.  If it won't fit, then the new
169                          tag will receive padding as per the 2K cluster
170                          method.  All this talk of padding only applies if the
171                          tag's padding property is set to ID3PD_AUTOMATIC,
172                          which it is by default.
173
17410 Aug 1998     2.11    - Replaced ID3C_SetID and GetID with proper field
175                          names, and the same with ID3C_SetComp and GetComp.
176                          This requires a change in source code for the
177                          application.  Without quotes, do a search and
178                          replace...
179
180                     "ID3C_SetID,"   replace with "ID3C_Set, ID3FN_ID,"
181                     "ID3C_GetID,"   replace with "ID3C_Get, ID3FN_ID,"
182                     "ID3C_SetComp," replace with "ID3C_Set, ID3FN_COMPRESSED,"
183                     "ID3C_GetComp," replace with "ID3C_Get, ID3FN_COMPRESSED,"
184
185                        - Thanks to a suggestion by Ilana Rudnik, I added a
186                          generic frame type called 'ID3FID_UNSUPPORTED' which
187                          is only to be used by applications as a
188                          'place-holder' in lists and arrays while waiting for
189                          ID3Lib to support all the frames.
190
191 6 Aug 1998     2.11    - Created the ID3C_Locate and ID3C_GetNumFrames
192                          commands.
193                        - Made the documentation an HTML file instead of boring
194                          text.
195
196 5 Aug 1998     2.11    - Thanks to Eng-Keong Lee, I have located and fixed a
197                          bug which most-of-the-time caused a crash when
198                          performing an ID3C_SetID on a frame for the first
199                          time.
200
201 3 Aug 1998     2.10    - Fixed a few things to make ID3Lib compile completely
202                          cleanly under Linux - thanks to Carlos Puchol for
203                          finding the remaining hassles.
204                        - Added two commands to adjust the unsync facility -
205                          ID3C_SetUnsync and ID3C_GetUnsync.  The default is
206                          ID3SY_AUTOMATIC.
207                        - Add support for the 2.01 extended tag header.  By
208                          default, ID3Lib will NOT write an extended header to
209                          tags it creates.  This can be adjusted by the
210                          ID3C_SetExtHeader command.
211                        - Changed the directory structure so that the required
212                          zlib source is now in the same directory as the
213                          ID3Lib source.
214
215 2 Aug 1998     2.10    - Fixed a small memory leak which occurred when
216                          clearing a tag of frames which were read in from an
217                          external binary tag.
218                        - Added a 'bugreport.txt' file to the documentation to
219                          improve effectiveness of bug reporting.
220
221 1 Aug 1998     2.10    - Adding support for tag padding.  This results in two
222                          new commands which operate on ID3_Tag objects:
223                          ID3C_SetPadding and ID3C_GetPadding.
224
225 1 Aug 1998     2.09    - Fixed some bugs in the ID3C_ToFile and ID3C_FromFile
226                          commands.
227                        - Fixed a bug which prevented empty strings which were
228                          supposed to be NULL-terminated from doing so.
229
23031 Jul 1998     2.09    - Changed the functionality of the error handling
231                          mechanism.  The function interface to the error
232                          handler has changed - see the example source file
233                          'main.cpp' for details.
234                        - Improved frame verification somewhat.
235
23628 July 1998    2.08    - Added ID3C_ToFile command to binary fields.
237                        - Changed the format of the ID3C_Size command when
238                          applied to frames.  There is now a required second
239                          parameter which specifies which field you require the
240                          size of.  If you request ID3FN_ALL, you will get the
241                          size of the frame itself.
242                        - The above change for ID3C_Size now also applies to
243                          the ID3C_Clear command (again, only when applied to
244                          frames).
245                        - Enhanced the ID3C_Find command so as to allow
246                          searches based on the ID3FN_LANGUAGE field and the
247                          ID3FN_DESCRIPTION field.
248
24927 July 1998    2.07    - Fixed a bug which had the WXX and TXX frames
250                          including a language field which they shouldn't.
251                        - Fixed a bug in the string's ID3C_Get command which
252                          wrongly interpreted the presence of a '/' symbol in
253                          the string as meaning that the string was a textlist.
254
25521 July 1998    2.06    - Added support for frame compression via zlib.  This
256                          means that all frames have an extra attribute which
257                          specifies whether the frame should be compressed.
258                        - Changed some typedefs and macro names so as not to
259                          clash with some of Windows' pre-defined
260                          datatypes/names.  Thanks to Chuck Zenkus for finding
261                          this.
262
26314 July 1998    2.05    - Finished up Unicode support.  All internal string
264                          handling is done with Unicode strings.  Strings are
265                          converted as needed during rendering of the tag.
266
267 6 July 1998    2.05    - BINARY fields now support an 'ID3C_FromFile' command
268                          which fills the field with data from the specified
269                          file.  The file is read and the contents placed in
270                          the field immediately on the field encountering this
271                          command.
272
273 2 July 1998    2.04    - Improved support for frame validation.
274                        - Repaired a cool bug in the error handling which
275                          prevented an application from finding further
276                          information about the error.  This fix resulted in a
277                          new format for the application error handler
278                          function.
279
280                2.03    - Added support for the ID3C_Add, ID3C_Remove,
281                          ID3C_GetElement, ID3C_GetNumElements commands in the
282                          STRING field type.  This allows easy use of the text
283                          lists as used in the 'TP1' frame.
284
285                        - Improved error handling once more.
286                        - Added support for the ID3C_Increment command in the
287                          INT field type.
288                        - Added support for the CNT, POP, GEO, TCO, TCR and UFI
289                          frames.
290                        - Added preliminary validation checking for frames to
291                          ensure they meet the ID3v2 standard requirements.
292                          Not fully implemented.
293
294                2.02    - Adjusted the '::Do()' function slightly - you can now
295                          chain commands together.  The last parameter to this
296                          call must now always be 'ID3C_DONE'.
297
298 1 July 1998    2.01    - Added the 'ID3_IsTagHeader()' function and an
299                          appropriately adjusted ID3C_Parse command.
300
30130 June 1998    2.00    - First preliminary release of ID3Lib v2.00.  Supports
302                          lots of frames (even PIC).  Lots of work still
303                          needed.
304
30525 June 1998    2.00    - Abandoned the v1.xx framework in favour of a more
306                          versatile and expandable one.  This required a major
307                          re-write of most of the internals of the library as
308                          well as changes to any applications using the
309                          previous framework.  The new framework is part of all
310                          ID3Libs which are 2.xx.
311
31223 June 1998    1.01    - Released v1.01 which added support for four new
313                          frames.  TXX, WXX, COM, ULT
314
31521 June 1998    1.00    - Initial Release (v1.0)
316