ChangeLog
 [+] - Added   [*] - Fixed/Changed  [-] - Removed

 2.52
 ----------------------------
    [+] !!! Official AMIP IRC channel: irc.freenode.net
        #amip
    [*] New default presets
    [*] !!! Automatic announcement is disabled now by
        default
    [*] Enable IRC option renamed to Announce
        automatically because it's what it does now
    [*] Options redesign (and File Chooser is added now)!
    [+] %rawlen - raw file size as returned by ftell
    [*] fixed 0 bitrate for flac and ape files (#04003)
    [*] Updated FLAC to 1.1.1
    [*] Updated zlib to 1.2.1
    [*] Fixed the potential null-pointer during the locale
        initialization (fatal error during initialization)
    [+] ! /dde mplug announcesong N X - announces song N
        by invoking preset X (1..5)
    [+] ! /dde mplug announcesong N - announces song N by
        invoking current preset
    [+] ! /dde mplug announce preset N - same as announce,
        but use preset N (1..5)
    [+] ! /dde mplug announce - will announce current song
        to mIRC using current preset (FINALLY!) Works even
        if IRC Integration is disabled
    [*] Fixed conditional $-functions
    [*] iTunes: all memory leaks should be fixed now
    [*] iTunes: options dialog can be invoked in the AMIP
        Visualizer stub (round Options button on top-
        right)
    [+] iTunes: you can now quit without warning
    [*] !!! iTunes 4.7 or later is required to run
    [+] In addition to /flash(LAMP) command introduced in
        2.48 there is now the same command but with
        extended syntax: /flash(NUM,0,200,5) - will start
        flashing NUMLOCK with the initial delay 0, in each
        state (ON/OFF) lamp will be 200ms and will flash 5
        times

 2.51
 ----------------------------
    [*] (post-release fix) Fix the problem with updating
        stream titles when file check option is enabled
        (pattern match condition was incorrect)
    [*] FB2K: AMIP could crash player if playlist item
        deleted - fixed

 2.50
 ----------------------------
    [*] CFG_CHECKFILE now defaults to 0
    [*] Fixed bug with non-working cache
    [*] Ogg Vorbis libraries synced with SVN (1.1 version)

 2.49
 ----------------------------
    [+] $pad(expr,n), pads the result of expr with n
        digits, for instance, $pad(%min,0) where %min is
        01 gives 1
    [+] notify (CFG_NOTIFY) option. If disabled, no
        notifications will be send to mIRC (such as
        notifications for /dde commands)
    [*] %sl should be 0 in case it is not available, not
        some random value
    [+] iTunes: now AMIP gets track info from iTunes if it
        cannot parse file itself
    [+] iTunes: %itrt - rating (0-100)
    [+] iTunes: %itpc - playcount
    [+] !!! MP4 tags and format info support (for m4a,
        m4p, m4v and mp4 files) (%1-%7, %br, %sr, %sl,
        %ENC, %mp4 flag variable and %mp4tag "yes/no"
        string), also including iTunes protected files
        support
    [*] iTunes: now %s uses "Artist - Title" formatting,
        if you need complex (with track number and album),
        add useComplexFormatting=1 under the
        [iTunesWrapper] section in the plugin.ini file
    [*] Preset #5 (clipboard) now comes with non-empty
        default value
    [*] Ogg Vorbis libraries synced with SVN
    [*] #3346: Bug with escaping parenthesis inside
        functions fixed (single backslash should be used)
    [*] QCD: get playlist title from player instead of
        building it from track artist and title
    [+] iTunes support
    [*] id3lib synced with id3lib-stable CVS

 2.48
 ----------------------------
    [*] Changed linker options so that now DLLs compressed
        with UPX should work on Windows 2003
    [*] Java Configurator path is now first searched in
        the registry and config file name is passed to it
        (this allows one configurator installation to be
        used by several players with installed AMIP)
    [*] To use underscore in the mIRC alias (format
        function), escape it with \ (backslash) character
    [+] Custom tags for APEv1, APEv2, Ogg and FLAC tags
        are not available as %ogg_<TAGNAME>, for
        instance %ogg_artist
    [*] #3167: URL tag doesn't work perfectly - fixed
    [*] !!! ^lb must be used instead of \n for multiline
        file output, use AMIP Configurator text areas for
        editing
    [+] Added an option to convert "|" to " $+ $chr(124)
        $+ " in mIRC output (security)
    [+] Start callback added
    [*] Sample script in help is updated
    [*] #3081: Fixed Play Matched. TODO: make it work when
        parse delay is enabled and song is changed during
        the delay
    [*] #3013: Fixed line endings when writing to file
        (now CRLF instead of CRCRLF) TODO: investigate the
        root case
    [+] /dde mplug manual page.htm - displays page.htm
        from the AMIP's chm help
    [*] fb2k: Compiled with SDK 0.8
    [*] #2913: AMIP messages shown on startup are now
        displayed using Status output command
    [*] Empty strings should be still written to file on
        status change
    [+] $iflen(str,len,shortstr) if str is longer than
        len, use shortstr, otherwise use str
    [+] /flash(LAMP) preset command - flashes keyboard
        LAMP, LAMP can be NUM, SCROLL or CAPS
    [+] Advanced options to configure song change
        detection
    [+] RUS: /template command now supports encodings,
        optional format is: /template:(input_file|enc)
        output_file, where enc can be KOI, OEM  and FIDO,
        source encoding should be always WIN
    [*] !!! Presets parsing rewritten from scratch, no
        more %lb and %mcmd, multiple commands must be
        separated by new line, please correct your
        presets. You can also comment lines in preset
        using #
    [+] $enc(text,encoding), where encoding can be WIN,
        KOI, OEM, FIDO
    [+] $chr(dec) - inserts character with dec code
    [+] $trunc2(text,length,char) - truncates and appends
        char
    [+] $trunc(text,length) truncates string by length and
        appends "..."
    [+] $mat(subject,pattern) -
        $if($mat(%VBR,yes),VBR,CBR)
    [+] $if2(condition,true)
    [+] $if(condition,true,false)
    [*] $ can be used instead of &func_, for instance:
        $cf(%name) instead of &func_cf(%name) -
        capitalizes first letters of song titlte
    [+] ! Song info in search dialog is configurable now
    [*] Several more bugs with search dialog fixed
    [*] Deadlock in search dialog should be fixed now
    [*] PCRE 4.5
    [*] CStdString updated to the recent version
    [*] Do not clear caches when title changes, since it
        my change due to update of the same file info
    [*] #3057 fb2k: get dynamic song info for streams
    [*] STLport 5.0 beta (testing) => then back to 4.6
        due to huge memleaks in 5.0 => 4.6.1 + backport
        of locale fix from 5.0 => 4.6.2
    [*] #3066: Fix "Initialization failed" on some systems
        caused by bug in STLport 4.6
    [*] Update song info when selection is changed using
        mouse in the Playlist Search dialog
    [+] Prepare to work with extended Java configurator
        (will be released soon)
    [*] Automatically detect changes in the config file
        and reload it

 2.47
 ----------------------------
    [*] Callbacks are invoked only when file info is
        parsed, the same concerns file integration. Fixed
        stop callback invoked twice on winamp startup
    [*] Fixed bug with configuration saving/loading
        related to presets (introduced in 2.45). Thanks to
        Markus Henn for noticing

 2.46
 ----------------------------
    [*] Compiled with VC 7.1 (VS.NET 2003)
    [*] Installer fixes
    [+] %parsestate variable. For script writers. Allows
        to get the current state of parser thread.
        (PARSING_ABORTED -2, PARSING_NOT_STARTED -1,
        PARSING_STARTED 0, PARSING_FINISHED 1). At the
        moment it may be not easy to catch the
        PARSING_FINISHED state, becaue it switches to
        PARSING_NOT_STARTED within a second
    [+] 'parsedelay' config parameter, will delay file
        parsing for the specified number of milliseconds
        (use values divisible by 1000). Super handy to
        make AMIP fully transparent and do not lag when
        frequently switching songs. If the value is
        greater than zero, all parsing is done in a
        separate thread and doesn't lag the player. This
        can be used with or without 'displaydelay'. If
        used with 'displaydelay', then you will get song
        info after parsedelay+displaydelay milliseconds.
        If you are using 'parsedelay', caching will be
        enabled despite of 'usecache' parameter
    [*] Rollback id3lib to 3.8.0. This should fix problems
        with Year tag and random crashes
    [+] 'displaydelay' config parameter - delay in
        milliseconds, song info will be displayed only
        when this time passes
    [*] Changes in playlist should be detected better
    [+] 'ignore' config parameter - regular expression, if
        title matches the pattern, AMIP will ignore it
        (useful to skip Buffering or Connecting for
        streams)
    [*] Fixed bug with functions when parameter is empty
    [*] STLport 4.6
    [+] Exit callback config option (exitcb)
    [*] File integration improvements
    [+] 'updatefile' config option. If set to 1, file
        content is updated every second
    [*] &c, &b, etc, are no longer converted in variables
    [*] Clipboard integration settings were not saved on
        exit

 2.45
 ----------------------------
    [+] clipboard integration: sendenter, sendcontrolenter
        config options (0/1), if enabled, automatically
        emulates pressing ENTER or CTRL+ENTER after
        pasting song info to the window. Useful for
        sending into IRC/ICQ clients (should work with
        Trillian)
    [+] playcb, pausecb, stopcb config strings for
        play/pause/stop callback actions, no frontend yet,
        can be configured via config or /dde mplug setvar.
        For geeks only, not tested
    [+] &func_next() provides all possible information
        about the next song in the playlist, see help for
        more information
    [*] wa3: fixed installer
    [*] DDE communication speed with IRC clients is
        greatly improved (at least 10 times faster now)
        Please note that you need to restart IRC client
        after changing its DDE Server name
    [*] 'Play Matched' feature improvements (local
        playlist is no longer cleared when calling
        playlist search dialog)
    [+] Show numbers in playlist search dialog (default is
        on for all the players except Foobar2000),
        controlled by 'indexlist' parameter
    [*] id3lib updated to v3.9.0 from CVS
    [*] func_lc and func_uc should work fine now for non-
        latin characters
    [+] '/dde mplug cfgdump' dumps all the config
        variables and values to mIRC
    [+] '/dde mplug config save' and '/dde mplug config
        load' to save/load configuration
    [+] '/dde mplug setvar <variable> <value>'
        allows to set any config variable
    [+] 'usecache' config option. If set to 1 AMIP will
        cache all the parsed song info for later use and
        will not process the same file twice during one
        session
    [+] 'useencspot' config option. When set to 0 disables
        advanced info processing and improves performance
        (Advanced Header Variables will be not available)
    [+] 'showmsgonstart' config option (1/0)
        disables/enables showing the standard AMIP message
        in mIRC when player is started
    [+] New API to work with config: allows to get/set any
        config variable and to load/save config file. See
        help for more info
    [*] Configuration subsystem rewritten from scratch
    [*] fb2k: fixed hangup when quering track info which
        doesn't exist (samplerate, channels)

 2.44
 ----------------------------
    [*] fb2k: fix for playing NSF from .zip and other
        archive related fixes
    [*] Updated installer
    [*] Quality should be displayed more properly in
        Playlist Search (using %br and %typ instead of
        %ABR and %MOD) TODO: make it configurable
    [*] %sl should work properly for all formats now
    [+] %sel - seconds left (ss), %mil - minutes left
        (mm), %sle - total seconds left
    [+] Option (cfg_drawupdate) to update active caption
        text every second (useful when variable values are
        changed, such as playback position)
    [*] Some optimizations in format info reading function
    [*] Vorbis tags are now properly converted from UTF-8
        to ASCII
    [+] MusePack format support (%mpc flag)

 2.43
 ----------------------------
    [+] FLAC format and tags support
    [*] fb2k: playback status when paused was not
        correctly reported
    [*] Changed text for ID3v1 tags (typo in Psychedelic
        fixed)
    [+] Hack to get volume from Winamp 2.x
    [*] %name tweaks to work with ogg and ape with
        incomplete tag info
    [+] Display playing song info in active window caption

 2.42
 ----------------------------
    [*] AMIP was not working with only one song in the
        playlist (broken in 2.40)

 2.41
 ----------------------------
    [*] fb2k 0.7: recompiled for beta 27 SDK
    [*] wa3: Info from files was not read (broken
        somewhere in 2.37)

 2.40
 ----------------------------
    [*] Some other changes... I can't remember =(
    [*] fb2k 0.7: compatibility with 0.7 post 23 betas
        (tested with beta 26)
    [+] Get/set repeat/shuffle API (see help)

 2.39
 ----------------------------
    [*] fb2k beta 0.7 integration: shuffle/repeat toggle
        support from AMIP
    [*] Help updates, added new APE related variables and
        flags
    [+] Monkey Audio format information support (%br, %sr,
        %typ, %min, %sec, %sl, %ENC)
    [+] APEv1 and APEv2 tags support (%1-%7)

 2.38
 ----------------------------
    [*] Typo in Quick Start fixed, added information about
        F keys and F12 key issue explanation
    [*] Reworked clipboard integration code, fixed problem
        with unregistering hotkeys introduced in 2.37

 2.37
 ----------------------------
    [*] Now distributing changelog for last 5 versions,
        complete changelog is available from the AMIP site
    [*] Stream check using http:// should be not case-
        sensitive (Bug #1882)
    [*] wa3 integration: do not strip http:// from file
        name => stream title change should now be
        properly recognized
    [+] fb2k integration: you can use %_playlist_number%
        in title format
    [*] No more numbers in the playlist. Side effect:
        after each call to Search dialog local playlist
        will be reset
    [*] Cleanups in Local playlist support code
    [*] Playlist search now matches each part of keyword
        separated by space (space is considered as .*?
        regexp)
    [*] If playing .cue file, do not check the file name
        change (Bug #1940)
    [*] QCD integration: %sr should return KHz, not Hz
    [*] fb2k integration: %sr should return KHz, not Hz
    [*] fb2k integration: Fixed ff and rew commands
    [+] fb2k integration: Title format is now configurable
        from Foobar2k AMIP Wrapper options

 2.36
 ----------------------------
    [+] Foobar2000 player support
        (http://foobar2000.hydrogenaudio.org/)

 2.35
 ----------------------------
    [*] %prc should work properly now
    [+] &func_ue() - new function, urlencodes arguments to
        safely pass them to scripts
    [+] Web Integration manual section added, other manual
        updates
    [*] Convert underscore to space option now works only
        for variables, not for the preset text
    [*] Now only existing %variables will be replaced, all
        the other will remain in the preset
    [+] /exec command allows to execute any process with
        parameters (ftp client to upload your song info to
        the web or a tool to emulate GET or POST)
    [+] File templates support! You can use a file with
        AMIP variables (for example HTML) which will be
        formatted and written to another file. See
        "Commands | Advanced" manual section for details
    [*] Don't repeat the first seconds of the _same_ song
        when using rfind (see bug #1846)

 2.34
 ----------------------------
    [*] Removed additional antirepeat check because it
        prevents aliases (the presets which never change)
        from working properly

 2.33
 ----------------------------
    [*] Fixed possible crash for mp3 files with empty
        genre tag
    [*] Bug #1741 (song announced twice) should be fixed
        now (I can't reproduce it, but I've added an
        additional check)
    [+] Updated documentation, added section descibing how
        to announce to all the channels
    [+] %prc - represents the current percentage of song
        being played. Useful for clipboard integration and
        mIRC scripting
    [+] \n is now supported in the preset #5 (clipboard
        integration). This allows to paste multiple lines
        to any application
    [*] %stat and %tstat should now work properly even for
        the first played file
    [*] Do not disable AMIP automatically if IRC and MAIL
        integrations are disabled
    [*] PCRE 4.3

 2.32
 ----------------------------
    [*] QCDAMIP 0.02: fixed crash on disable
    [*] Additional cleanups on exit

 2.31
 ----------------------------
    [+] QCD support (http://www.quinnware.com/) QCDAMIP
        v0.01
    [*] Some changes in playback restore
    [+] Show progress while indexing playlist
    [+] Home and End buttons now work in the Playlist
        search dialog
    [*] StdString.h 2003-MAR-14
    [*] id3lib 3.8.3
    [*] Fixed some typos in help
    [*] File lenght is now correctly set for all the file
        types

 2.30
 ----------------------------
    [*] Help updates, now quick start is available, please
        read it!
    [*] If only artist or only title is in the id3tag,
        %name will not use ' - ' separator
    [*] Now if you change some config setting via DDE it
        will be updated  when you next time read it using
        $dde mPlug cfg_* ""
    [*] Mask ~ (tilda) not only in tags, but in the whole
        preset. If you need tilda in the output, just type
        it twice (~~)
    [*] Default preset is changed to the more polite
        version (prints only to the active channel)
    [*] Changes in func_cf to capitalize letters after
        round braces

 2.29
 ----------------------------
    [+] %flkb - file size in kbytes
    [*] func_cf is fixed. Now it capitalizes all
        characters which are prepended by non-word
        character
    [*] id3lib 3.8.1-CVS, fixed problem with Lyrics3

 2.28
 ----------------------------
    [*] Fix for getting CD info from Winamp (broken in
        2.27)

 2.27
 ----------------------------
    [+] Ogg/Vorbis Tags (comments) support! AMIP now
        detects ogg format and reads tags from ogg files.
        %1-%7, %VBR, %ABR, %br, %sr, %fl variables are
        supported for ogg. There are also special %ogg_*
        variables available where * stands for the comment
        name (title, artist, copyright, etc), always
        lowercase. %ogg variable is set to 1 if file has
        ogg format, to 0 otherwise. Use '/dde mPlug dump'
        to get all AMIP variables list

 2.26
 ----------------------------
    [*] Fixed typo in readme and on the web site in About
        section
    [*] Do not display [Buffering] when buffering live
        streams
    [*] Wait until Winamp update playlist lenght on
        loading
    [*] Fixed bug with /dde mPlug find and rfind commands
        not properly changing song

 2.25
 ----------------------------
    [*] Fix to %fdir and %fupdir (there was a problem with
        folders containing dots)
    [*] Some fixes to Play Matched
    [+] '/dde mPlug clearcache' clears AMIP song
        information caches
    [*] '/dde mPlug dump' now returns the sorted list of
        variables
    [*] Fixed /dde mPlug find and rfind not automatically
        playing songs
    [*] Removed limit of 20 000 songs in playlist (now
        using vector container instead of array)
    [*] Do not set %ABR to the value of %br even if
        extensive scan is disabled (now scanning is more
        accurate)

 2.24
 ----------------------------
    [*] After pressing OK in options in Winamp3 or when
        using /dde mPlug options AMIP restart was needed
        because of incorrect DDE initialization
    [*] Fixed: Song info could be repeated twice when
        starting Winamp with playback restore enabled in
        AMIP

 2.23
 ----------------------------
    [+] New feature for Russian users: now it's possible
        to write several files with song info at the same
        time with different encodings. It's the extension
        to /fileonce and /file commands. Just specify the
        encoding after the file name (KOI, OEM, FIDO, WIN)
        using | as a separator. Example:
        /fileonce:(c:\song_KOI.txt|KOI) np: %name
    [*] Fixed long time bug with $dde variables not
        working in mIRC after pressing OK in the options
        dialog

 2.22
 ----------------------------
    [*] Fixed deadlock when using /dde mPlug options (and
        probably some other DDE commands)

 2.21
 ----------------------------
    [*] wrapper 0.6: fixed playlist assertion (I hope now
        it's really fixed, build 2.20 still crashed
        Winamp3 in some cases)
    [*] wrapper 0.6: some additional checks for NULLs to
        prevent Winamp3 assertions
    [*] wrapper 0.6: fixed crash if Winamp3 preferences
        dialog is closed before AMIP options

 2.20
 ----------------------------
    [*] %id3v1/%id3v2/%Lyrics/%Lyrics3v2/%MusicMatch
        (yes/no) - tag versions available in the file
    [*] Fixed 00:0-1 time for Live stations (now reports
        00:00 if song length is not available)
    [*] updated id3lib from CVS (fixed lyrics priority
        bug)
    [*] AMIP will install on future Winamp3 builds (with
        Winamp3.exe instead of Studio.exe)
    [*] wrapper 0.5: Fixed assertion with playlist on
        Winamp load

 2.19
 ----------------------------
    [*] Finally fixed problem with Lyrics tag type
    [*] Clipboard integration tweaks: now clipboard is
        restored after 2 seconds to prevent pasting
        already restored content instead of AMIP string
        (restoring is in the seperate thread so it doesn't
        hang winamp)

 2.18
 ----------------------------
    [*] wrapper 0.4: Probably fixed bug with multiple
        playlists in Winamp 3
    [*] Now parsing without extensive scan gives better
        results (and should be faster)
    [+] %MET - lame VBR method
    [+] %REV - lame tag revision
    [+] %LABR - lame ABR Bitrate
    [+] %LQUA - (0..100) lame quality
    [+] %LAM - (yes/no) lame header existance
    [*] %QUO now returns good/ok/bad strings
    [*] Fixed bugs with empty %mode, %lver, %mver, %head
        (introduced in 2.16)
    [*] Upgraded to EncSpot 2.01 library (experimental,
        please report bugs)
    [*] Upgraded to id3lib 3.8.0-stable, probably fixed
        lyrics bug

 2.17
 ----------------------------
    [*] Playback restore is turned off by default, if you
        need to enable it set CFG_RESTORE=1 in plugin.ini
    [*] If file is played from the Internet and AMIP can't
        get song time with its own parser, it asks Winamp
        now
    [*] Clipboard integration should work now on any
        system, not only on 2K/XP (Tested on win98se,
        winME, win2K, winXP... vmware rocks =))
    [*] Minor changes in the Search dialog UI
    [*] Fixed: When choosing song in search dialog and
        winamp is paused the next song was continued from
        the position of previous song (this bug was
        introduced in 2.14)

 2.16
 ----------------------------
    [+] Added backend to enable/disable playback restore
        on winamp start. Frontend will appear later.
        (CFG_RESTORE=0 in plugin.ini disables playback
        restore)
    [*] Manual is updated to reflect the latest changes
    [+] Shuffle/Repeat toggling from mIRC now works with
        Winamp 3
    [+] New variable: %vol - current volume (0..255).
        Works only with Winamp 3
    [+] Good news for script writers. Now you can get any
        information about any song from your mIRC script.
        There is special variable: $dde mPlug formatsong
        "song_number:string_with_your_variables". Example:
        $dde mPlug formatsong "10:%name_br:%br~kbps". Note
        that spaces are changed to underscores
    [*] AMIP now correctly reports live radio info in
        Winamp 3
    [*] AMIP now caches song information for faster
        operation, to clear internal caches use '/dde
        mPlug clear' command
    [+] Search dialog (Ctrl+J) now contains files
        information (artist, title, bitrate, path)
    [*] Fixed 2 bugs in Winamp 3 wrapper (with getting
        playlist entry #0 info if it was not playing)
    [*] Now string in quotes in the conditional
        constructions like ?VBR='yes'<%ABR|%br>  is
        considered to be a regular expression (read:
        wildcards are now allowed in  conditional
        statements)
    [+] Added AMIP version information to Winamp 3
        preferences window

 2.15
 ----------------------------
    [*] Updated version info of Winamp 3 wrapper
    [*] Fix to restore bug introduced in 2.14

 2.14
 ----------------------------
    [*] Changed URL to http://amip.tools-for.net in all
        the places, minor help fixes
    [*] AMIP WA3 version: wrapper 0.2 - buttons in
        configuration dialog are working now!!!
    [*] Restore playback from first position if there is
        no such entry number as was saved on last play
    [*] %ABR is now set to Winamp's bitrate value if
        extensive scan is off

 2.13
 ----------------------------
    [+] AMIP WA3 version: wrapper 0.1 Experimental AMIP
        wrapper for WINAMP 3
    [*] Some changes to make AMIP work properly with
        WINAMP 3 through wrapper plug-in
    [+] Restore playback from the last played song on
        Winamp restart
    [*] Changed URL to http://amip.tools-for.net
    [*] Fixed bug with THRESHOLD value increasing on every
        config save

 2.12
 ----------------------------
    [*] Minor fixes in clipboard integration

 2.11
 ----------------------------
    [+] If Ctrl+Alt+Z shortcut for clipboard integration
        is not working, hit it twice shortly, AMIP will
        change the keystroke which it is sending to the
        active window for paste action from Ctrl+V to
        Shift+Insert and vice-versa, also AMIP will
        remember the application which needs non-standard
        keystroke. You can see that the keystroke was
        toggled by the window flashing.
    [*] No more restart needed when enabling/disabling
        hotkeys.
    [+] It's now possible to change shortcuts for the
        search dialog and pasting to active window.
        Currently it's only possible in the plugin.ini
        manually, frontend will be added later.
    [+] A lot of changes in shortcurts handling and
        clipboard integration. Special thanks to Robin Y.
        Millette (http://rym.waglo.com) for helping with
        this stuff and contributing the code!

 2.10
 ----------------------------
    [*] Fixed %no. Was overwritten by %1 - %2 (broken in
        2.08)
    [+] '/dde mPlug dump' command dumps all the AMIP
        variables and values to the status window.
    [*] A lot of typos in help fixed.
    [*] Fixed /cmsg bug (/me used instead of /msg for all
        the channels except first).

 2.09
 ----------------------------
    [*] Fixed 00:00 playlength, more bitrate fixes, better
        streams support, correctly restore after playing
        live radio.

 2.08
 ----------------------------
    [*] Installer now allows to install to the Apollo
        plugins folder (Apollo player works with AMIP and
        other winamp plugins)
    [*] Upgraded unzip/decompress support to zlib 1.1.4,
        for big security fix
    [*] If tag exists but is empty, use file name for
        %name.
    [*] fixed 0 occasionally apperaing as a value of %br
        and other %br an %ABR fixes
    [*] Direct send option now works with mIRC 6.x

 2.07
 ----------------------------
    [+] Klient support. Check 'Klient mode' in the options
        dialog. Use '/describe #channel is listening to
        %name' command. You may also try to use internal
        AMIP commands /cme and /cmsg and add channels you
        want to announce at to the channels list in AMIP
        configuration.
    [+] Streams support!!! (AMIP doesn't show Buffering or
        Connecting, it only shows stream when it's
        playing!)
    [*] Fixed bug with %monstamp
    [+] Enable/Disable Ctrl+J and Ctrl+Alt+Z AMIP hotkeys
        option (requires restart).
    [*] fixed ^lb bug and other possible bugs with
        stripping.
    [*] A Leak with DDE server name not unregistered -
        fixed.
    [+] %ext - file extension

 2.06
 ----------------------------
    [*] Internal map class is changed to hash_map for
        speed
    [*] AMIP is now using STLport for stability and speed
        improvements

 2.05
 ----------------------------
    [*] Fixed crash on exit

 2.04
 ----------------------------
    [*] Help updates
    [+] Clipboard integration. Preset #5 is used for
        clipboard format.To paste formatted string in any
        application use Ctrl+Alt+Z shortcut. The previous
        content of clipboard is automatically restored.
    [+] Huge options redesign
    [*] Fixed: possible crash if config string is empty
    [*] $dde mPlug cfg_* was broken in one of the versions
    [+] /dde mPlug setpirch on/off allows to switch from
        mIRC toPIRCH and back. Note: you will need to call
        /dde mPlug setdde <server_name> with
        appropriate server name to finish the process of
        IRC client switching.
    [+] /dde mplug setmapping on/off allows to change the
        way how AMIPcommunicates with mIRC from DDE to
        FileMapping and back.
    [+] /dde mPlug setdde <server_name> allows to
        change DDEserver directly from your IRC. Can be
        used in scripts for publishing information to
        several IRC client instances.
    [+] Choose preset: /dde mPlug preset <n>
    [*] Mask ~ sign in tags so now it's not stripped from
        output.
    [*] Workaround to get %br, %sr, %typ for the song if
        winamp was ran in the stopped state.

 2.03
 ----------------------------
    [+] func_cf() capitalizes First Letter Of Each Word
    [+] func_u2s() converts underscores and %20 to spaces
    [+] func_lc() makes param lower case
    [+] func_uc() makes param UPPER CASE
    [*] Help Updates
    [+] /dde mPlug autoplay on, /dde mPlug autoplay off -
        toggles autoplay after rfind and find commands.
    [*] Internal playlist limit changed from 5 000 to 20
        000
    [*] AMIP is no more using MFC, only std c++ and win32
        API => reduced size
    [+] Internal functions initial support
    [+] "$dde mPlug fn <id>" variable can be used in
        mIRC to get name of file fromplaylist with
        specified <id> number"
    [+] "$dde mPlug title <id>" variable can be used
        in mIRC to get title fromplaylist with specified
        <id> number"

 2.02
 ----------------------------
    [+] Search window focus tweaks (window now gets focus
        and returns it to application where Ctrl+J was
        pressed)
    [+] "/dde mPlug control shuffle" toggles shuffle
    [+] "/dde mPlug control repeat" toggles repeat

 2.01
 ----------------------------
    [+] File mapping. Alternative method to pass string to
        mIRC. If DDE works slow on your PC, enable "direct
        send" option.

 2.00
 ----------------------------
    [*] id3lib fixes (priority) => optimized tag
        reading
    [*] Hangup if search or dialog is open while song is
        changing
    [*] Now you can use a '~' sign by typing it twice (or
        more)
    [+] A number of new variables: %ABR - Average bitrate
        of mp3 file %VBR - (yes/no) shows if file has VBR
        %ENC - encoder used to make mp3 file %LEN - (e.g.
        00:03:19) song length %FRQ - (e.g. 44100) Samlping
        frequency (hz) %MOD - (e.g. joint stereo) Mode
        %FRM - number of frames %FSZ - (e.g. 4,157,036)
        file size in bytes %TYP - (e.g. mpeg 1 layer III)
        - mpeg and layer version %QUO - (0-2) a rough
        determination of the quality of the file
        Determined solely by the encoder used, the
        bitrate, and the stereo mode %EMP - Emphasis %COM
        - (yes/no) if file is complete (not broken) %ERR -
        number of sync errors %CPR - (yes/no) Copyrighted
        %ORG - (yes/no) Original %CRC - (yes/no) CRC
    [+] Extensive scanning option. If enabled, plug-in
        scans all frames of mp3 file to calculate Average
        Bitrate (ABR) and detect encoder. (a bit slows
        down computer while song is changing)
    [+] Presets for keeping several output strings and
        changing between them
    [+] Own playlist search dialog (like in winamp but
        with regexp search and international support)...
        Just press Ctrl+J. Also there is a Play Matched
        button to play all matched songs.
    [+] %?var='val'<if_true|if_false> for comparing
        variable with exact value. If you want to print
        ST/JS/MO instead of Stereo/Joint Stereo/Mono, just
        use this: %?mode='Joint
        Stereo'<JS|%?mode='Stereo'<ST|MO>>
    [+] %?var<if_true|if_false> now may be recursive
    [*] Strings starting with spaces are now correctly
        handled in config file.
    [+] PIRCH support.
    [+] "$dde mPlug format string" variable can be used in
        mIRC. <string> is like config string.all
        variables are replaced. But <string> cannot
        contain spaces!!! Replace all spaces by '_' sign
        (underscore).
    [*] Buld a2: Fixed memory leak when using $dde
        variable in mIRC. Thanks to Shawn for reporting
        this bug.
    [*] find and rfind output may be done by any command
        passed in "/dde mPlug rfind command pattern"
        string
    [+] Output to file depending on playback state
    [+] Different encodings for file output.
    [+] You can use \n to write on next line while
        printing to file.
    [+] New variable %fdir - directory name(e.g. for
        C:\Music\Metallica\Best Of\Nothing-Else
        Matters.mp3)it will be set to "Best of"
    [+] New variable %fupdir - up-directory name(e.g. for
        C:\Music\Metallica\Best Of\Nothing-Else
        Matters.mp3)it will be set to "Metallica"
    [+] New variables: %tstat and %stat - text and numeric
        playback status(playing - 1, paused - 3, stopped -
        0)
    [+] Random presets

 1.02
 ----------------------------
    [*] Some speed improvements and code cleanups
    [*] Fixed some bugs in MP3/nonMP3 handling
    [+] %dstamp - current day of month
    [+] %monstamp - current month
    [+] %ystamp - current year
    [+] Writing current song to file instead of mIRC
        (/fileonce:(filename) command) (useful to
        integrate AMIP with program without DDE, for
        example e-mail client, in AMIP I have
        '/fileonce:(e:\current.log)%name' and in The Bat!
        I have 'Winamp is playing:
        %INCLUDE="e:\current.log"' as a part of template)
    [+] Writing log to file instead of mIRC
        (/file:(filename) command)
    [*] Maximum config string length is changed from 512
        to 1024
    [*] Fixed reading id3v2 tags created in Winamp (from
        id3lib CVS)

 1.01
 ----------------------------
    [*] removed some forgotten debug output
    [*] better error handling while reading broken tags
    [*] Multiple line output support for /cmsg and /cme
    [*] Multiple line output support for /cmsg and /cme
    [+] internal /cme command for ACTION to specified
        channels

 1.00
 ----------------------------
    [+] if-then-else like constructions are now allowed.
        e.g. %?1<%1 - %2|%no> (if Artist is present
        then print Artist - Title, else print file name
        only) construction is recognized.
    [*] The better way to replace variables (using regexp)
    [+] %sstamp - current time seconds
    [+] %mstamp - current time minutes
    [+] %hstamp - current time hours
    [+] Any plug-in %variable can be retrieved from mIRC
        with $dde mPlug var_variable "" construction. e.g.
        to get %name write $dde mPlug var_name ""
    [+] Any plug-in configuration settings can be get from
        mIRC with $dde mPlug cfg_* "". e.g. to get format
        string: $dde mPlug cfg_string ""
    [+] /dde mPlug format <handler>
        <format_string> command. Calls handler with
        format_string with replaced variables.
        (/cmsg,%lb,%mcmd are not handled)
    [*] %variable shoud be separated from following text
        with "~". e.g. %secs should be replaced to %sec~s
    [+] %mp3 variable which can be used to determine that
        playing file is mp3 in if-then-else constructions
    [+] %id3 variable which can be used to know that ID3
        tag was read correctly mp3 in if-then-else
        constructions
    [+] Added about 70 ID3 variables
    [+] %playing flag to determine if winamp is playing
    [+] %ps - current song position (seconds)
    [+] %psec - current song position in seconds

 0.99
 ----------------------------
    [*] NSIS 1.32
    [*] fixed tag reading error handling

 0.98
 ----------------------------
    [+] "/dde mPlug cfg_strip "" <handler>" passes
        current strip setting to handler which is mIRC
        script or alias (0/1)
    [+] "/dde mPlug cfg_convert "" <handler>" passes
        current convert spaces to underscore setting to
        handler which is mIRC script or alias (0/1)
    [+] "/dde mPlug cfg_enabled "" <handler>" passes
        current "Enabled" setting to handler which is mIRC
        script or alias (0/1)
    [*] getplain command now may pass config string to
        mIRC script "/dde mPlug getplain ""
        <handler>"
    [*] getcodes command now may pass config string to
        mIRC script "/dde mPlug getcodes ""
        <handler>"
    [*] getlistlength command now may pass list length to
        mIRC script "/dde mPlug getlistlength ""
        <handler>"
    [*] reindex command now may pass number of indexed
        songs to mIRC script "/dde mPlug reindex ""
        <handler>"

 0.97
 ----------------------------
    [*] Changed program title to: Advanced mIRC
        Integration Plug-In (AMIP)
    [+] Automatic reindexing on playlist change

 0.96
 ----------------------------
    [*] Memory leaks in id3lib in ID3_GetString method.
        (workaround)
    [+] Added Perl 5 like regexp search support (searching
        songs from mIRC) "/dde mPlug rfind ""
        <pattern>" command
    [+] Russian and English locales support for regexp
        search
    [*] A lot of code cleanups, perfomance improvements,
        memory leaks fixes.
    [*] NSIS 1.1 installer, UPX 1.7, id3lib 3.8.0pre
        (fixed and recompiled), PCRE 3.4
    [+] "/dde mPlug show" command for manual song info
        print (works only if winamp is playing)
    [+] "/dde mPlug getstrip" command to get config string
        without colors.
    [+] Strip color codes dialog option to remove mIRC
        control chars from output

 0.95
 ----------------------------
    [*] It was possible to add empty channel to /cmsg
        channels list
    [+] URL & Mail in config dialog, project is moving to
        www.irctoolz.com
    [*] %mcmd doesn't work in 0.94
    [*] Bug with song numbers in search results fixed
        (numbers were 1 less than true index)
    [*] Error getting ID3 tag crushed plug-in
    [*] Fix for first position output repeating when
        reloading huge playlists (it's workaround for
        winamp bug, when it sends the first title from
        playlist while playlist is loading, and after load
        sends random title if SHUFFLE is on)

 0.94
 ----------------------------
    [+] Added new genres from Winamp. (148 genres total!)
    [+] Support for output only to specified channels
    [+] Format string edit box is now multiline! Press
        Ctrl+Enter to move a part of string to next line.
        This doesn't affect on the mIRC output.
    [+] internal /cmsg command for output to specified
        channels
    [+] "/dde mPlug options" command to show plug-in
        config dialog box
    [+] Convert underscore to space in whole output
    [+] Winamp title instead of %name for non-mp3 files

 0.93
 ----------------------------
    [+] Changelog added
    [*] Fixes to getcodes (returned &variables instead of
        colors)
    [*] Fixes to getcodes (removed forgotten debug color
        tags)
    [*] Strange bug with missing variables in "getcodes"
        and "getplain"

 0.92
 ----------------------------
    [*] Fixed ID3 tag priority. Getting V2 tag instead of
        V1 if both are avilable.
    [*] Fixes to configuration window editbox height
    [*] fixes to getlist (added automatic correction of
        wrong values)
    [*] /dde mPlug getlist without arguments now returns
        entire playlist

 0.91
 ----------------------------
    [+] Plug-In Output string (configures how it should
        manage status information)
    [+] English home page added http://zone.al.ru/mp
    [*] Interface improvements
    [*] Changed congig file title from mIRC to Crazy
        Coder's mIRC Control Plug-In
    [+] Added new variable %page - This plugin homepage
        URL

 0.90
 ----------------------------
    [*] Genre was displayed incorrectly in ID3V2 tag

 0.88
 ----------------------------
    [+] reindex command
    [*] Plugin crash while playing CD's (added check for
        .mp3 extension)
    [+] %mode variable (overrides %typ)
    [+] %lver variable
    [+] %mver variable
    [+] %head variable
    [+] Local playlist support (playing songs matching
        last search)

 0.85
 ----------------------------
    [+] clear command
    [+] find command! Now you can search songs directly
        from mIRC

 0.80
 ----------------------------
    [+] getlistlength command
    [+] getlist command

 0.71
 ----------------------------
    [+] Added Genre Variable (%7)

 0.70
 ----------------------------
    [+] enable/disable plugin from mIRC (control off and
        on commands)
    [+] getplain command to get plug-in configuration
        string from mIRC (with & variables)
    [+] getplain command to get plug-in configuration
        string from mIRC (using color)
    [+] Set command to set config. string from mIRC
    [+] play command

 0.65
 ----------------------------
    [*] Added new support for ID3V2 & ID3V1 tags! (%1 -
        %6)
    [-] Removed old support of ID3V1
    [+] Plug-In now uses id3lib
        (http://id3lib.sourceforge.net)

 0.60
 ----------------------------
    [+] NEW HTML help
    [+] Added internal conrol codes support (& variables)

 0.55
 ----------------------------
    [*] %name fixes

 0.53
 ----------------------------
    [+] play command
    [+] stop command
    [+] pause command
    [+] < command
    [+] > command
    [+] vol command
    [+] vup command
    [+] vdwn command
    [+] ff command
    [+] rew command
    [+] Universal song title (%name)
    [+] Added multiline output support (%lb variable)

 0.50
 ----------------------------
    [+] Own DDE server "mPlug" to enable winamp control
        from mIRC

 0.40
 ----------------------------
    [+] New variable - Plugin version (%pv)
    [+] New variables - Winamp version (%ver, %pos, %min,
        %sec)

 0.30
 ----------------------------
    [+] ID3V1 tags support

 0.20
 ----------------------------
    [+] Added %ll, %sl, %br, %sr, %s
    [*] DDE exchange memory cleanups

 0.10
 ----------------------------
    [+] added first variables (%fn, %nm, %no)

 0.01
 ----------------------------
    [+] %s variable - song title from winamp window