/*!\page PPL7History PPL7 History
PPL7 - HISTORY

Version 7.0.1
  - Fixed overflow exception in ID3Tag::copyAiffToNewFile
  - Fixed overflow exception in IdentAIFF
  - Added method TCPSocket::isBlocking
  - Bugfix in TCPSocket::sslStart: a call to this function does
    not change blocking mode to non-blocking anymore. It keeps
    the previous mode.
  - random.cpp: removed deprecated keyword "register" (C++17)
  - AssocArray::getPrevious returns "false" as expected and does not throw
    OutOfBoundException anymore, when end of AssocArray is reached
  - Increased test coverage for AssocArray
  - Added compare operator to Variant
  - Added more operators for AssocArray
  - fixed "-no-pie" compiler warnings
  - Reverse iteration over AssocArray now requires a ReverseIterator
  - refactored AssocArray to use std::map instead of own AVLTreeAlgorithm.
    As a side effect, this change had a huge performance improvement on
    setting, getting and deleting values. The unittest addAndDeleteWordlist
    now takes 794ms instead of 1432ms on my workstation.
  - SSLContext: dropped support for deprecated SSL and TLS versions.
    Only the methods "TLS", "TLSclient" and "TLSserver" are supported.
    The actual protocol version used will be negotiated to the highest
    version mutually supported by the client and the server.
  - SSLContext: added fallback to SSLv23_method when TLS_method is
    not available
  - Digest: removed ECDSA from available hash algorithms
  - Bugfix in MemFile::seek
  - Added JSON-Parser and -Writer
  - String: added method useadr
  - removed MHash class and dependencies on mhash library.
    Please use the Digest-Class as replacement.
  - added ID3Tag::PictureType
  - fixed bug in Drawable::blendPixel
  - added compare operators to class grafix::Point
  - migrated PythonHelper from ppl6 and added unit tests for Perl- and
    PythonHelper. Fixed escaping of backslash.
  - Fixed ID of datatype DateTime
  - Removed old AssocArray code
  - AssocArray: added export and import of WideString
  - AssocArray: added export and import of Array  
  - Array operators == and != are now defined as const
  - changed behaviour of String::isNumeric
  - WikiParser: various methods do not get a return value anymore
  - SocketMessage: defined some functions as const
  - WikiParser: fixed some OutOfBoundsExceptions
  - AssocArray: added comfort getter-functions, which return a
    default value instead of throwing an exception, when key is
    not found or of different data type.
  - AssocArray: getArray now returns an Array instead of AssocArray!
    Use new method getAssocArray, if you want an AssocArray!
  - use libidn2 instead of libidn if available
  - AssocArray: TypeConversionExceptions in getter-Methods with more
    details 
       

Version 7.0.0 vom 29.07.2018 (Repo-Tag: REL_7_0_0)
  - Complete Rewrite, based on Version 6.4.7
  - Unittests with Google Test framework

Version 6.4.21
  - IdentAudioFile unterstützt nun Wave-Dateien
  - CTCPSocket::SSL_Stop: Return-Wert von SSL_shutdown wird jetzt
    korrekt interpretiert. Es wird kein shutdown mehr auf den Socket
    gemacht, da dies bei einer Abgebrochenden Verbindung zu einer
    Blockade führen kann.
  - CCurl: Neue Methode "getCurlHandle" liefert das interne Handle
    der libcurl zurück
  - CSSL: Unterstützung für TLS 1.1, TLS 1.2 und DTLS 1, sowie
    der Komfortmethode "TLS", die alle TLS-Versionen unterstützt,
    aber kein SSLv2 oder SSLv3.
  - Memory-Leak in MkDate behoben
  - Memory-Leak in CDateTime::get behoben
  - Memory-Leak in FileExists behoben
  - Bugfix im configure: SQLITE_LIBS und SQLITE_CFLAGS werden nur gesetzt,
    wenn sqlite auch gefunden wurde
  - NASM-Erkennung unter MSYS 2.0 i686 gefixt
  - Fixed: Deadlock in CThreadPool::Stop behoben
  - LPSTR wird nicht mehr verwendet

Version 6.4.20 vom 13.07.2014	(SVN-Tag: REL_6_4_20)
  - Funktion GetGlobalEncoding hinzugefügt
  - CID3Tag beachtet nun die globale Einstellung für die Kodierung
    der Strings
  - CID3Tag speichert Text-Tags nun grundsätzlich in UTF-16LE
  - Neue Funktionen: XmlEscape und XMLUnEscape
  - Neue Klasse: PythonHelper
  - Address-Parameter der HexDump-Funktionen ist nun als "const void *"
    deklariert
  - CID3Tag: Fehler beim Schreiben von Tags in AIFF-Files behoben
  - Überflüssige .svn-Ordner aus der Distribution entfernt
  - Unterstützung von AudioCD-s und CDDB mittels der neuen Klassen
    AudioCD und CDDB
  - Configure-Erkennung für nasm, png und jpeg verbessert

Version 6.4.19 vom 16.02.2014	(SVN-Tag: REL_6_4_19)
  - CBinary hat Malloc- und Calloc-Funktion bekommen,
    Save wurde umbenannt in Savef, Load in Loadf. Neue Save- und Load-
    funktionen, die "const CString &" als einzigen Parameter erwarten 
  - CID3Tag kann ID3-Tags aus AIFF-Dateien lesen und schreiben
  - UnitTests für CID3Tag-Funktionen erstellt
  - MemoryHeap-Klasse sammt Unit-Tests aus PPL7 importiert
  - Algorithmus "List" sammt Unit-Tests aus PPL7 importiert
  - CDir wurde refakturiert: "Get" Funktionen geben jetzt
    "const CDirEntry*" statt "CDirEntry*" zurück, Sortierfunktionen
    aus PPL7 importiert, als Sortieralgorithmus wird nun std::multimap
    statt der eigenen AVL-Methoden verwendet. Dies fixt ein Problem
    bei der Sortierung, wenn identische Schlüssel mehrfach auftauchen
    (z.B. gleiche Timestamps oder Dateigrößen). Zusätzlich kann nun
    auch nach ATime, CTime, MTime und Dateigröße sortiert werden.
  - CDirEntry: "Is..."-Funktionen sind nun als "const" deklariert
  - Valgrind: Mismatched free() / delete / delete [] in
    ppl6::CID3Tag::RemovePicture gefixt
  - CID3Frame Destruktor verändert die Framekette nicht mehr, dafür ist
    allein CID3Tag zuständig
  - CID3Tag: Fehler in der Berechnung der Framegröße bei Textframes
    mit ISO-8859-1 oder UTF-8 Kodierung behoben. (Valgrind Fehler: Invalid
    read/write of size 1)
  - IdentAudioFile: Neue Funktion zum Ermitteln des Audioformats einer
    Datei, sowie deren Kennzahlen, wie Frequenz, Kanäle, Samples, und Länge.
    Die Daten werden im ebenfalls neuen Objekt "AudioInfo" abgelegt.
    Die Funktion soll IdentMPEG ablösen und neben MP3 auch andere Formate
    unterstützen. Gegenwärtig wird MP3 und AIFF unterstützt.
  - CFile::RenameFile löscht unter Windows die Zieldatei vor dem Rename.
    Die C-Funktion "rename" bzw. "_wrename" verhält sich unter Windows
    anders als unter Unix.
  - CFile::Exists verwendet nun "stat" bzw. unter Windows "_wstat" um
    ein konsistentes Verhalten zu bekommen. Bisher wurde versucht die
    Datei zu öffnen, was unter Unix auch auf Verzeichnisse funktioniert,
    unter Windows aber nicht.
  - Win32: Problem mit CFile::mmap behoben
  - CID3Tag: Bugfix beim Update eines vorhandenen Tags unter Windows
  
Version 6.4.18 vom 04.02.2014	(SVN-Tag: REL_6_4_18)
  - CID3Tag: Neue Funktion zum Auslesen von PRIV-Frames (PrivateData)
  - CID3Tag unterstützt TXXX-Tag mit EnergyLevel
  - CID3Tag liefert Anzahl Frames zurück mit CID3Tag::FrameCount()
  - Webserver: Funktionen queueResponse und queueBasicAuthFailedResponse haben
    keinen Rückgabewert mehr und werfen eine Exception im Fehlerfall
  - Webserver: Fehlerbehandlung in answer_to_connection implementiert
  - CConfig: Spaces am Anfang und Ende von Werten werden nicht mehr abge-
    schnitten
  - Bugfix: Die LTrim-Funktionen der beiden String-Klassen CString und
    CWString haben beim Verschieben des Strings ein Byte über das Ende des
    internen Buffers hinausgelesen.
  - CTCPSocket::Read: Fehlercode EINTR wird wie EAGAIN behandelt und
    ignoriert, bzw. ein Retry initiiert
  - Funktion IdentMPEG kann besser mit fehlerhaften MP3-dateien umgehen
  - CFile::CopyFile funktioniert nun. Bisher wurde das neue File nicht
    angelegt und das alte gelöscht :-(  => Unittests angelegt
  - Statische Funktionen von CFile refakturiert: statt "const char*"
    wird nun "const CString &" erwartet, ausser dort, wo ein Formatstring
    übergeben wird. Funktionen mit Formatstring haben ein "f" am Ende des
    Funktionsnamens erhalten
  - File-Funktionen unter Windows: Es werden jetzt Non-US-ASCII-Zeichen
    im Dateinamen unterstützt.
  - CFile::Truncate wird nun auch unter Windows unterstützt
  - Bugfix: Absturz unter Windows durch unbehandelte Exception im Destruktor
    der CLog-Klasse behoben. Seit Version 6.4.15 wird Syslog unter Unix
    unterstützt. Der Destruktor hat die Funktion zum Schließen von Syslog
    aber auch unter Windows aufgerufen und die dabei entstehende Exception
    nicht abgefangen. 
  - Funktion CString MD5(const void *data, size_t size) implementiert
  - Unittests für statische Funktionen aus CFile implementiert
  - CID3Tag::GetGenre liefert einen bereits geparsten String zurück, der den
    Namen des Genres enthält. Bisher wurde der Inhalt des Tags TCON ungefiltert
    zurückgegeben
  - CFile::Popen(const char *command, const char *mode, ...) umbenannt in
    Popenf
  - OpenTemp akzeptiert nurnoch einen Parameter vom Typ CString, die bisherige
    Funktion mit Formatstring und variabler Anzahl Parameter heisst jetzt
    OpenTempf
  - CFile::Size führt zunächst ein fflush aus, damit möglicherweise noch im
    Puffer befindliche Daten geschrieben werden.
  - CFileObject::SetFilename(const char *filename, ...) umbenannt in
    SetFilenamef
  - CFile::Seek, Fseek, Ftell, Size und Lof haben keine Funktion mehr,
    bzw. geben 0 zurück, wenn die geöffnete Datei eine Pipe ist.
  - Diverse Compiler-Warnings mit gcc 4.6.x gefixt
  - CDir: Bugfix im Konstruktor behebt möglichen Absturz durch nicht
    rechtzeitig initialisierte Variable.
  - Unittests für CDir implementiert
  
Version 6.4.17 vom 03.11.2013	(SVN-Tag: REL_6_4_17)
  - Cppl6Core ist nicht mehr von CDebug/CLog abgeleitet
  - CArray::Explode: Performance wurde drastisch verbessert
  - CArray: Neue Funktion "Reserve", zum Vorallokieren von Speicher
  - CArray: Neuer Konstruktor mit Explode-Funktion
  - Bugfix in CAssocArray::CreateFromConfig: Bei Angabe von "dotrim=false"
    wurde am Ende doch getrimmt
  - Testsuite um Tests für CAssocArray-Klasse ergänzt (Backport von PPL7)
  - Bugfix: CleanupThreadData hat zwar das Datenobjekt gelöscht, nicht aber
    den Pointer darauf innerhalb der posix threads
  - PPLExit ruft nun CleanupThreadData auf
  - CleanupThreadData ist nun auch für Windows implementiert
  - Makefile: pplgenresource verwendet nun das lokale config-ppl6-Skript
    und die lokale Bibliothek
  - configure: libshout kann jetzt mit --without-libshout abgeschaltet
    werden
  - ppl6-unixconfig.h enthält nurnoch die Typdefinitionen, aber nicht mehr die
    ganzen HAVE_xzy Direktiven
  - Datentyp "mode_t" wird in ppl.h nicht mehr verwendet
  - CTCPSocket::Bind: Hostname und Port werden nun gespeichert und können mit
    den neuen Funktionen "getHostname" und "getPort" abgefragt werden.
  - Webserver::start: Exception "CouldNotStartDaemon" hat jetzt zusätzliche
    Informationen über den aufgetretenen Fehler
  - Webserver: Neue Funktionen: getHostname, getPort
  - configure: Erkennung für libmicrohttpd verbessert
  - configure: Erkennung für curl-config verbessert
  - ppl6-config: Option "--features" unterstützt nun optionale Angabe der
    gewünschten Features. Ist ein Feature nicht eingebunden, wird eine
    ERROR-Meldung ausgegeben und der Returncode ist ungleich 0
  - Bugfix in MySQL::Query: Ein Fehlerfall beim Speichern des Query-Results
    wurde zwar festgestellt, aber kein passender Fehlercode gesetzt. 
  - Freetype-Font-Rendering verbessert, das Hinting funktioniert jetzt besser
    (Code aus ppl7 übernommen)
  - Makefile sollte nun abbrechen, wenn beim "make install" ein Fehler auftritt
  - Statische Funktionen in CFile umbenannt und erweitert: Exists, TouchFile,
    DeleteFile und FileAttr akzeptieren nurnoch einen Parameter mit dem Datei-
    namen und keinen Formatstring mehr (zu fehleranfällig). Die neuen
    Funktionen Existsf, TouchFilef, DeleteFilef und FileAttrf übernehmen die
    alte Funktionalität und erwarten einen Formatstring.
  - Bugfix: fehlendes Semikolon in EscapeHTMLTags und UnescapeHTMLTags beim
    Tag "&amp;" ergänzt
  - Bugfix: "Conditional jump or move depends on uninitialised value" in
    MkTime behoben.
  - Bugfix: Race Condition in CAssocArray::Copy behoben
  - CMutex wirft jetzt eine Exception im Konstruktor, wenn kein Speicher für die
    internen Variablen allokiert werden konnte. Daher konnten in den Member-
    Functions einige Prüfungen wegoptimiert werden.
  - Fehler bei der Initialisierung von MySQL behoben. Neue statische Funktion
    zum Initialisieren der MySQL-Bibliothek.
  - mögliche Race Condition Pool::CheckPool behoben
  - bzero durch memset ersetzt, da bzero in POSIX.1-2008 entfernt wurde
  - CID3Tag unterstützt TKEY
  - CID3Tag::SetTextFrame unterstützt optionalen dritten Parameter zur Angabe
    des gewünschten Encodings

Version 6.4.16 vom 19.05.2013	(SVN-Tag: REL_6_4_16)
  - Bugfix: Fehlende "IFDEF"'s zur Prüfung der Syslog-Unterstützung in CLog
    ergänzt (behebt Compiler-Fehler unter MinGW)
  - Bugfix: "Invalid read of size 1" in ppl6::CLog::Printf behoben
  - Bugfix: Memory-Leak in CSSL::~CSSL() gefixt
  - Bugfix: Diverse Memory-Leaks in CWString::Setf und CWString::Sprintf
    behoben
  - Neue Funktion: CleanupThreadData. Diese muss aufgerufen werden, bevor
    ein Thread, der nicht mittles der PPL-Funktionen gestartet wurde,
    beendet wird.
  - Bugfix: Memory-Leak in der Restschnittstelle behoben
  - Bugfix: Memory-Leak im Zusammenhang mit MySQL gefixt
  - Überflüssige Variablen in Trim-Funktionen der Klasse CWString entfernt
  - Bugfix: Fehler in CString::RTrim behoben, durch den zu wenig Zeichen am
    Ende des Strings abgeschnitten wurden (Backport von PPL7)
  - Bugfix: Fehler in CWString::RTrim behoben, durch den zu wenig Zeichen am
    Ende des Strings abgeschnitten wurden (Backport von PPL7)
  - Bugfix: Memory Leak und "silly malloc" in CString::PregMatch und
    CWString::PregMatch behoben
  - Testsuite um Tests für CString-Klasse ergänzt (Backport von PPL7)
  - Testsuite um Tests für CWString-Klasse ergänzt (Backport von PPL7)
  - CWString hat Konstruktor für std::wstring bekommen und Operator für
    std::ostream
  - Bugfix in CString::IsNumeric und CWString::IsNumeric
  - CWString: Vergleichsoperatoren für CWString und einige weitere Operatoren
    und Funktionen sind jetzt als "const" deklariert
  - Bugfix in CWString::Chomp: Es konnten zu viele Zeichen abgeschnitten werden
  - CWString::Concat führte zu "Conditional jump or move depends on
    uninitialised value"
  - Bugfix in CWString::Delete: Falscher Returnwert wurde zurückgegeben, wenn
    Zeichen am Ende des Strings abgeschnitten wurden.
  - Bugfix in CString::Shr und CWString::Shr: Zeichen am Ende des Strings
    wurden nicht abgeschnitten, String konnte länger werden, als der Original-
    string
  - CWString: Operator bool() entfernt, da dieser nicht funktioniert
  - CString: Zusätzliche Set- und SetChar-Funktionen
  - CString: Funktionen IsTrue und IsFalse eingeführt
    
  Achtung: Mögliches Kompatibilitätsproblem:
  - Änderung in CWString::Set: Bei Verwendung eines char *, std::string oder
    CString als Input, wird der optionale zweite Parameter nicht mehr als
    Bytes, sondern als Zeichen interpretiert! Dieses Verhalten war bereits
    so, wenn keine Iconv-Library installiert war, und somit ein Fallback auf
    die Funktion mbstowcs erfolgte. 

Version 6.4.15 vom 30.04.2013	(SVN-Tag: REL_6_4_15)
  - CLog-Klasse unterstützt nun Syslog

Version 6.4.14 vom 21.03.2013	(CVS-Tag: REL_6_4_14)
  - Bugfix beim Einlesen von ID3-Tag-Covern mit UTF-16-Encoding
  - Bugfix: Potentieller Memory-Leak in CTCPSocket::WaitForMessage gefixt
  - Bugfix: Fehler im Aufbau der verketteten Liste der Klasse CSSL behoben
  - Change: CSSL verwendet malloc und free statt CHeap
  - Bugfix: CTCPSocket: Beim Disconnect oder Shutdown wurde kein SSL_Stop
    aufgerufen. Dadurch konnte der SSL-Stack durcheinander kommen.
  
Version 6.4.13  vom 27.07.2012	(CVS-Tag: REL_6_4_13)
  - Kleinere Kompatibilitätsprobleme unter Windows behoben
  - Fehler in Postgres-DB-Anbindung behoben, wodurch mit FetchArray
    oder FetchFields mehr Zeilen gelesen wurden, als im
    Result vorhanden war
  - DB-Connect mit Postgres-Datenbank unterstützt jetzt Parameter
    "searchpath" zum Setzen des Suchpfades.
  - CString unterstützt Ausgabe als Stream
  - Erkennung der FreeTDS-Library für Sybase erneuert 
  - CDateTime Genauigkeit auf Mikrosekunden erhöht
  - Format des Integer-Wertes von CDateTime::longInt hat sich geändert
    und ist inkompatibel zu vorher.
  - Testsuite mit Unittests für CDateTime erstellt (Verwendung von
    Google-Test)
  - Bugfix in CString::PregReplace

Version 6.4.12  vom 04.04.2012	(CVS-Tag: REL_6_4_12)
  - Datenbank: Strings werden nun in Hochkommata statt Anführungszeichen
    gesetzt
  - Datenbank: Datentypen werden in Abhängigkeit ihres Types und der
    Datenbank escaped und gequoted. Neue Funktion Database::getQuoted
  - Datenbank: Mutexe aus den Datenbanken entfernt. Die Anwendung ist
    dafür verantwortlich parallelen Zugriff zu verhindern.
  - Backport von PPL7: CDir::homePath und CDir::tempPath
  - Funktion ppl6::db::GetSupportedDatabases hinzugefügt
  - Unterstützung für Datenbank SQLite3 (experimentell)
    
Version 6.4.11 vom 19.02.2012	(CVS-Tag: REL_6_4_11)
  - Bugfix in PNG-Laderoutine
  - Kritischer Bugfix in Sybase::Ping: Result wurde nicht freigegeben, wodurch
    nachfolgende Operationen blockiert und die Verbindung somit
    unbrauchbar wurde
  - Neue Klasse: PerlHelper
  - CDateTime verarbeitet nun auch "null" oder das Datum "0000-00-00".
    Beides wird als "0" interpretiert.
  - CDateTime hat neue Funktionen zum Abfragen der Kalenderwoche:
    week() und weekISO8601()
  - Neue Funktion CString::setInitialBuffersize
  - Fehlende Funktion CString::Capacity implementiert
  - CFile::Open mit Formatstring wurde umbenannt in CFile::Openf
  - CFont unterstützt Parameter für Rotation
  - Font-Format 6 eingeführt (Backport aus PPL7)
  - Bugfix: Array::Explode auf einen leeren String führt jetzt nicht mehr
    dazu, dass ein leeres Element hinzugefügt wird 

Version 6.4.10 vom 10.11.2011	(CVS-Tag: REL_6_4_10)
  - CCurl-Klasse: Signals werden nun standardmäßig deaktiviert,
    da Anwendungen mit mehreren Threads sonst in Probleme laufen.
    Mit der neuen Funktion CCurl::EnableSignals können die Signals
    explizit wieder aktiviert werden.

Version 6.4.9 vom 30.10.2011	(CVS-Tag: REL_6_4_9)
  - Kompatibilitätsprobleme mit OpenSSL 1.x.x behoben
  - Funktion StartThread, um einen Thread ohne Verwendung der
    Klasse CThread zu starten
  - Webserver-Klasse, die auf libmicrohttpd aufsetzt 

Version 6.4.8 vom 27.07.2011	(CVS-Tag: REL_6_4_8)
  - Datenbankklassen: Neue Funktion "databaseType"
  - Bugfix in Compression-Klasse: bei Verwendung des V2-Prefix
    wurde beim Komprimieren statt Länge der unkomprimierten Daten
    die Länge der komprimierten Daten geschrieben
  - Bugfix in Datenbank-Connect-Funktion. Fehlerhaften "ifdef" für
    Postgres korrigiert
  - Bugfix in Postgres-Escape-Funktion. Das letzte Zeichen des
    Strings wird nun nicht mehr abgeschnitten.
    
Version 6.4.7 vom 25.05.2011	(CVS-Tag: REL_6_4_7)
  - CDateTime holt sich nun die Millisekunden via "gettimeofday",
    sofern die Funktion vorhanden ist. Bei der Ausgabe mit
    "get" wird nun der Platzhalter "%*" unterstützt, der durch die
    Millisekunden ersetzt wird.
  - Überarbeitung und Vereinfachung der Exception-Klasse
  - Neue Klasse: CIcecast zum Streamen von MP3 oder OGG Dateien
    an einen Icecast Server
  - Update der Dokumentation auf Doxygen 1.7.3
  - CAssocArray unterstützt nun CDateTime und kann CWString Im- und
    Exportieren (es erfolgt eine Konvertierung nach UTF-8)

Version 6.4.6 vom 17.03.2011	(CVS-Tag: REL_6_4_6)
  - CAssocArray hat Copy-Konstruktor und Zuweisungsoperator für CArray
    erhalten.
  - CDateTime vollständig dokumentiert
  - CDir verwendet nun unter Windows die Wide-Character-Funktionen
    zum Einlesen eines Verzeichnisses. Dadurch sollte es jetzt keine
    Probleme mehr mit Nicht-US-ASCII-Zeichen im Dateinamen geben.
  - Bugfix in CWikiParser: Bei der Darstellung von Sourcecode fehlt
    das schließende "</div>".
  - CTree hat neue const-Funktionen zum Rückwärtsdurchwandern des
    Baums mittels CTreeWalker
  - CAssocArray hat neue const-Funktionen zum Durchwandern des
    Baums mittels CTreeWalker
  - CCurl: Neue Funktionen: SetMaximumPersistantConnects, Reset
  - CArray hat neue Funktionen: MakeUnique und fromArgs
  - configure: Erkennung von Postgres überarbeitet
    
Version 6.4.5 vom 28.11.2010	(CVS-Tag: REL_6_4_5)
  - Bugfix in Sybase::Query: Bei einem Fehlerhaften Query wurde das
    Result-Set nicht gelöscht 
  - Bugfix in Sybase::SetResultBufferGrowSize: Es fehlte ein #IFDEF,
    wodurch das Kompilieren unmöglich war, wenn keine Sybase- oder
    FreeTDS-Libs installiert waren
  - Funktion PregMatch ist nun als eigenständige Funktion ausserhalb
    der String-Klasse vorhanden
  - CWString: Neue Funktion CWString::ReplaceLetterList
  - CBinary hat jetzt eine "ToHex"-Export-Funktion, die seinen Inhalt
    als String mit Hexwerten zurückgibt. Mit "FromHex" kann ein
    Hex-String wieder importiert werden.
  - CMemoryReference hat ebenfalls "toHex"-Funktion erhalten,
    CMemory die Funktion "fromHex"
  - CMHash Bugfix: CMHash::GetResult hat die Klasse nicht korrekt
    reinitialisiert, so dass ein erneuter Aufruf falsche Werte
    zurückgegeben hat.
  - Bugfix SybaseResult::FetchResultSet. Es wurde nicht geprüft,
    ob überhaupt ein Result vorhanden ist.

Version 6.4.4 vom 01.11.2010	(CVS-Tag: REL_6_4_4)
  - CDateTime::diffSeconds: Ermittelt die Differenz zweier CDateTime
    Werte in Sekunden
  - CDateTime::compareSeconds: Vergleicht zwei CDateTime-Werte auf
    Sekundenbasis anhand einer definierbaren Toleranz
  - CArray hat nun Sort-Funktion zum Sortieren der Werte
  - CArray hat nun Implode-Funktion, um das Array in einen String zu
    konvertieren
  - Bugfix Postgres.cpp läßt sich wieder kompilieren
  - Sybase-Datenbankklasse überarbeitet. Sie verwendet jetzt eine
    eigene optimierte Result-Klasse und nicht mehr GenericResult.
    Queries mit einem großen Result-Set können nun iterativ mit
    FetchArray oder FetchFields durchlaufen werden, ohne dass zunächst
    das komplette Result-Set in den Speicher geladen werden muss.

Version 6.4.3 vom 16.10.2010	(CVS-Tag: REL_6_4_3)
  - Update auf Doxygen 1.7.x, Anpassungen am Layout
  - Alte Datenbank-Klassen entfernt
  - Bugfix in CGenericList: Die Liste kann nun auch Rückwärts
    durchlaufen werden. Zuvor wurde dabei immer nur das erste Element der
    Liste zurückgegeben.
  - Bugfix in der Berechnung der Anzahl Frames bei einer MP3-Datei mit
    variabler Bitrate
  - Bugfix in CID3Tag: Framegröße bei ID3v2-Tags Version 2.3 wird nun korrekt
    interpretiert.
  - Bugfix CString::IsNumeric: Komma, Punkt und Minus wurden falsch interpretiert
  - Bugfix db::Sybase::Escape: Es wird nun ein korrekter Returnwert zurückgegeben
  - db::Database::Save: Funktion akzeptiert jetzt einen sechsten optionalen
    Parameter, über den man die Variablen-Typen angeben kann.
  - db::Database: Transaktionen können nun verschachtelt werden
  
Version 6.4.2 vom 19.08.2010	(CVS-Tag: REL_6_4_2)
  - ppl6::db::Sybase::GetInsertID funktioniert nun
  - ppl6::CString: Zusätzliche PregMatch-Funktion, die als "const" deklariert
    ist

Version 6.4.1 vom 27.07.2010	(CVS-Tag: REL_6_4_1)
  - configure prüft nun, ob "_FILE_OFFSET_BITS" definiert werden muss, um
    grosse Dateien verwenden zu können
  - configure prüft nun optional, ob die Library mpg123 installiert ist
  - configure: Überprüfung von libmp3lame wurde in eigene Datei ausgelagert.
    Zusätzlich wird nun geprüft, ob lame die neue hip_decode-Funktion
    unterstützt. 
  - CMP3Decode fungiert nun als Basisklasse für verschiedene Dekoder, kann jedoch
    nach wie vor genauso benutzt werden, wie bisher. Optional kann mit der Funktion
    CMP3Decode::Init angegeben werden, welcher Dekoder benutzt werden soll. Wird dies
    nicht gemacht, wird standardmäßig nun Mad oder mpg123 verwendet, jenachdem
    was installiert ist.
  - Neue MP3-Dekoder auf Basis der mpg123 Bibliothek
  - Bugfix in CWString::Set. Die Funktion konnte nicht kompiliert werden,
    wenn keine libiconv vorhanden war.
  - pplgenresource kennt jetzt Parameter "compression" in der Konfigurations-
    datei
  - Grafikfunktion Blt verwendet nun optimierte Copy-Funktion unter
    Verwendung von MMX, SSE und dem L1-Cache der CPU
  - Bugfix in den Vergleichs-Operatoren und -Funktionen der String-Klassen.
    Es wurde bisher nicht berücksichtigt, dass zwei leere Strings auch dann
    identisch sind, wenn die Buffer noch nicht allokiert sind. Im Gegenteil,
    es wurde sogar explizit geprüft, ob einer der beiden Buffer auf NULL zeigt,
    und in dessen Abhängigkeit ein bestimmer Returncode gegeben (z.B. +2 oder
    -2). Das Verhalten wurde jetzt so geändert, dass bei einem NULL-Pointer
    ein leerer String angenommen wird und der Vergleich mit dem anderen String
    auf jeden Fall durchgeführt wird.
  - CString: Vergleichsoperatoren für CString hinzugefügt
  - CWString: Vergleichsoperatoren mit "const char*" und "CWString*" entfernt.
    In beiden Fällen wird der Kompiler jetzt eine automatische Typ-
    konvertierung zu CWString durchführen.
  - CDateTime: Neue Klasse zum Speichern von Datum und Uhrzeit
  - CVar hat keinen virtuellen Destruktor mehr. Alle davon abgeleiteten Klassen
    benötigen dadurch weniger Speicher. Es muss nun aber static_cast statt
    dynamic_cast verwendet werden, wenn zwischen den Datentypen gecastet wird.
  - Exceptions überarbeitet: Es gibt jetzt nurnoch eine Exception-Klasse
    
Version 6.4.0 vom 30.03.2010	(CVS-Tag: REL_6_4_0)
  - Copyrights auf 2010 aktualisiert
  - Bugfix in der 64-Bit-Version der Font-Assembler-Routinen
  - MkRFC822Date wurde überarbeitet und liefert nun gemäß RFC 822 die
    englischen Bezeichnungen für Tag und Monat zurück. Ausserdem wurden einige
    veraltete Funktions-Alternativen entfernt.
  - GetHostByName wurde geändert. Ursprünglich hat die Funktion intern einen
    einzelnen Aufruf der Systemfunktion getaddrinfo gemacht. In neueren libc
    Bibliotheken scheint sich jedoch das Verhalten geändert zu haben. Hier
    werden AAAA-Records nur dann zurückgegeben, wenn auf dem lokalen host
    auch eine globales IPv6-Interface konfiguriert ist. Zu beobachten auf
    Ubuntu 9.10 nach Einspielen der Updates am 13.01.2009. Die Funktion wurde
    daher geändert und ruft getaddrinfo nun zweimal auf, einmal für IPv4/INET
    und einmal für IPv6/INET6.
  - nasm wird jetzt auch auf 64-Bit FreeBSD-Systemen gefunden
  - CArray: Aufruf von Add(CArray &a) wurde geändert in Add(const CArray &a)
  - Memory-Leak in CFileObject::Load behoben
  - CVar und alle davon abgeleiteten Klassen: Callback-Funktionalität entfernt.
    Dadurch ist die Klasse bei Änderungen am Datenwert nicht nur schneller,
    sondern der Speicherbedarf auch um 8 Byte (32-Bit-Prozessoren) bzw. 16 Byte
    (64-Bit Prozessoren) kleiner.
  - CResolver: Neue Klasse für Nameserver-Abfragen auf Basis der ldns-Library
    von nlnetlabs.nl (http://www.nlnetlabs.nl/projects/ldns/) (Ist noch in
    Arbeit!)
  - CString:
    - Neue Funktion InstrCase
    - Parameter zu Instr und StrCmp sind nun als const deklariert
  - Calc unterstützt nun Potenzen (^) und erwartet eine Referenz anstelle
    eines Pointers als zweiten Parameter. Ausserdem wird als Dezimal-
    Trennzeichen nun auch Komma akzeptiert
  - CSocketMessage hat nun Copy-Funktion und Copy-Konstruktor
  - CAVLTree hat neue Funktion "Remove", die ein Element nur aus dem Baum
    entfernt, aber nicht dessen Speicher löscht
  - CMutex::Wait und CMutex::Signal funktionieren nun auch unter Windows
  - CAssocArray: Reset, GetFirst und GetNext akzeptieren nun ein CTreeWalker
    Objekt und sind als const deklariert
  - CAssocArray: List und Count sind nun als const deklariert
  - CLog: Array-Parameter bei PrintArray-Funktionen ist jetzt als const
    deklariert
  - CTCPSocket: Funktionen IsWriteable, IsReadable, WaitForIncomingData und
    WaitForOutgoingData sind jetzt auch für Windows implementiert.
  - CAVLTree: Einige Funktionen sind nun als "const" deklariert
  - CAVLTree: Kritischen Fehler in der Funktion "Clear" behoben, der
    zu Segmentation Fault und Memory-Leaks führen konnte.
  - CLog: Es wird nun immer _vor_ der Verarbeitung der Daten geprüft, ob
    sie auszugeben sind und nicht erst später. Das führt insbesondere beim
    Loggen von grossen CAssocArrays oder Hexdumps, die nicht ausgegeben
    werden müssen, zu drastischen Performance-Verbesserungen
  - db::CPool: Bugfix in Funktion "Get". Parameter "wait" wurde nicht beachtet,
    Funktion lief in einer Endlosschleife, wenn das Pool-Limit erreicht war.
  - FreeTDS: configure prüft nun, ob Compiler -lrt benötigt
  - Fehler in CLog::CheckRotate behoben
  - Komplett-Überarbeitung der Grafik-Funktionen im neuen Namespace ppl6::grafix. 
    Alle Zeichenfunktionen basieren jetzt auf der Basisklasse CDrawable, die
    auch ohne Initialisierung der Grafik-Engine benutzt werden kann. Die
    Überarbeitung ist noch nicht abgeschlossen.
    
    Neue Klassen der Grafik-Engine:
      - Point
      - Point3D
      - Size
      - Rect
      - RGBFormat (ist jetzt keine Enumeration mehr!)
      - Color
      - AdapterCaps
      - AdapterIdentifier
      - AdapterMode
      - GFXEngine (Basisklasse für alle Grafik-Engines)
         - GFXEngineSoftware
         - GFXEngineDX9
         - GFXEngineSDL
      - CDrawable
      - CImage
      - CImageList
    Überarbeitete Klassen:
      - CSurface
      - CGrafix
      - CSprite
      - CFont
      - CFilter (und alle davon abgeleiteten Klassen)
      - CFontFile
      - CFontEngine (und alle davon abgeleiteten Klassen)
  

Version 6.3.3 vom 12.02.2010	(CVS-Tag: REL_6_3_3, Branch: RELENG_6_3)
  - Visual C++ 2008 Kompatibilität wiederhergestellt
  - Doppelte Funktionen in functions.cpp und strings.cpp eliminiert
  - Neue Klassen zum Verwalten eines einzelnen Speicherblocks:
    - CMemory
    - CMemoryReference
  - Addition von CString und CWString funktioniert nun besser
  - Bugfix in CFile::MMap: File-Offset wird jetzt intern immer auf
    eine Seitengröße abgerundet, die über sysconf(_SC_PAGE_SIZE)
    ermittelt wird.
  
Version 6.3.2 vom 04.12.2009	(CVS-Tag: REL_6_3_2)
  - Bugfix in ppl6::db::Database::GetEscaped
  - Bugfix in CString::PregReplace: Beim Ersetzen durch einen per RegEx
    kopierten Strings wurde der falsche Textbuffer verwendet, wodurch nur
    der erste Match korrekt ersetzt wurde.
  - CString:IsNumeric Bugfix
  - Neue Funktionen: FromBase64, ToBase64, EscapeHTMLTags
  - Die Datenbank-Funktionen "ExecArray..." löschen nun das Ergebnisarray, bevor
    es mit dem Ergebnis gefüllt wird
  - Neue String-Funktionen:
  	CString Trim(const CString &str);
	CString Trim(const char *str);
	CString UCase(const CString &str);
	CString UCase(const char *str);
	CString LCase(const CString &str);
	CString LCase(const char *str);
	CWString Trim(const CWString &str);
	CWString UCase(const CWString &str);
	CWString LCase(const CWString &str);
	int StrCmp(const CString &s1, const CString &s2);
	int StrCmp(const CWString &s1, const CWString &s2);
	int StrCaseCmp(const CString &s1, const CString &s2);
	int StrCaseCmp(const CWString &s1, const CWString &s2);
	int Instr (const CString &string, const CString &such, size_t start=0);
	int InstrCase (const CString &string, const CString &such, size_t start=0);
	int Instr (const CWString &string, const CWString &such, size_t start=0);
	int InstrCase (const CWString &string, const CWString &such, size_t start=0);
	CString Left(const CString &str, size_t num);
	CString Right(const CString &str, size_t num);
	CString Mid(const CString &str, size_t start, size_t num=(size_t)-1);
	CString SubStr(const CString &str, size_t start, size_t num=(size_t)-1);
	CWString Left(const CWString &str, size_t num);
	CWString Right(const CWString &str, size_t num);
	CWString Mid(const CWString &str, size_t start, size_t num=(size_t)-1);
	CWString SubStr(const CWString &str, size_t start, size_t num=(size_t)-1);
	CString MD5(const CString &str);
	CString MD5(const CWString &str);
	CString MD5(const CBinary &bin);
  - Kleinere Bugfixes nach statischer Code-Analyse mit cppcheck und rats
  - Neue Time-Funktionen:
		- CString Long2Date(const char *format, int value)
		- CString MkDate(const char *format, ppluint64 sec)
  
Version 6.3.1 vom 25.10.2009	(CVS-Tag: REL_6_3_1)

  - ppl6::db::MySQL::FieldType: Die MySQL-Datentypen wurden nun mit #ifdef's
    versehen, damit auch ältere MySQL-Versionen funktionieren
  - ppl6.m4 hat jetzt ein Macro zum Prüfen, ob ein bestimmtes Feature in die Library
    einkompiliert wurde: AX_PPL6_FEATURE
  - ppl6-config hat neues Flag zum Auslesen der einkompilierten Fearures:
    --features
  - ppl6::db::MySQL: Der Default für den zu verwendenden Zeichensatz bei der
    Kommunikation mit dem Server wurde von UTF-8 auf Latin1 geändert, da auch
    MySQL defaultmäßig Latin1 verwendet, wenn bei der Tabellenerstellung nicht
    explizit ein anderer Zeichensatz angegeben wurde. Der gewünschte Zeichensatz
    kann nun als Connect-Parameter "charset" angegeben werden.
  - Bugfix in ppl6::db::MySQL: Die letzte Insert-Id wird nun bei Exec
    an der richtigen Stelle im Programmcode abgefragt, wodruch GetLastInsertID
    nun nicht mehr 0 zurückgibt.
  - CTCPSocket wurde vollständig dokumentiert
  - CTCPSocket: Der Konstruktor mit dem void-Pointer wurde entfernt, da dieser
    eh nur intern aufgerufen wurde
  - CTCPSocket::Listen hat nun einen optionalen Parameter, der das Intervall
    definiert, in dem auf einen Stop-Wunsch geprüft wird. Ausserdem wird nun
    "select" verwendet, um auf eingehende Connects zu prüfen. Dadurch reagiert
    Listen schneller auf eingehende Verbindungen.
  - CTCPSocket::ReceiveConnect erwartet nun "const char*" als zweiten Parameter
    und nicht mehr "char*".
  - Funktion CTCPSocket::Poll entfernt
  - Funktion CTCPSocket::SetWriteTimeout hinzugefügt
  - CTCPSocket::SSL_Connect umbenannt in SSL_Start
  - CSSL: In LoadTrustedCAfromFile und LoadTrustedCAfromPath wird nun am Ende die
    OpenSSL-Fehlerqueue gelöscht, da auch bei erfolgreichem Laden Fehler auftreten
    können (bereits bekannte Zertifikate werden nochmal geladen), die später
    zu Problemen führen können.
  - CSSL: Die Enumeration "SSL_METHOD" ist nun Bestandteil der Klasse CSSL
    und nicht mehr in einem eigenen Namespace
  - GetMicroSeconds wurde umbenannt in GetMilliSeconds, da die Funktion
    Millisekunden zurückliefert und keine Mikrosekunden. 
  - Der Datentyp "ARRAY_RESULT" ist nun kein "void *" mehr, sondern ein Pointer
    auf eine Struktur. Dadurch werden Codestellen, an denen noch GetArray(CString *)
    statt GetArray(CString &) aufgerufen wird nun als Fehler erkannt und nicht
    mehr vom Compiler als GetArray(ARRAY_RESULT) interpretiert.
  - CID3Tag wurde überarbeitet:
    - Alle String-Tags werden nun mit einem 0-Byte terminiert, wie
      es die Spezifikation vorschreibt.
    - Statt UTF-8 werden alle Strings nun in UTF-16 geschrieben
    - SetComment wurde nun (hoffentlich) korrekt implementiert
  - CString: Preg-Funktionen machen nun Fallback auf Singlebyte-Zeichen, wenn
    der zu durchsuchende String ungültiges UTF-8 enthält
  - strcasestr gibt nun "const char*" statt "char*" zurück
  - CArray hat nun Copy-Funktionen
  - CMHash::Hash kann nun auch mit einem String als Algorithmus aufgerufen
    werden
  - CReadMail: Mehrere Fehler behoben, unter anderem einen in GetTranscodedBody,
    der dazu führte, dass die Funktion NULL zurückgegeben hat.
  - Weitere Parameter von Member-Funktionen sind nun als "const" deklariert
  - CMHash::GetResult löscht nun den Ergebnisparameter vorher
  - CSendMail: Verbindung mit dem Mailserver wird nun ordnungsgemäß mit
    QUIT beendet.
  

Version 6.3.0 vom 25.08.2009	(CVS-Tag: REL_6_3_0)
  - Änderung der Parametertypen: Fast sämtliche Pointer-Parameter
    wurden durch Referenzen ersetzt und sind jetzt - sofern sie nicht
    verändert werden, als "const" deklariert. Auch sämtliche Member-
    Funktionen, deren Aufruf keine internen Daten der Klasse veränderen,
    sind nun als "const" deklariert.
    Durch die umfangreichen Änderungen entstehen Inkompatibilitäten
    zu früheren Versionen, so dass Anwendungen angepasst werden müssen! 
    Betroffen sind folgende Klassen:
       - CString
       - CWString
       - CBinary
       - CTok
       - CFile
       - CMemFile
       - CHostsAllow
       - CArray
       - CAssocArray
       - CCurl
       - CSendMail
       - CReadMail
       - CHostsAllow
       - CLang
       - CIconv
       - CLog
       - CDebug
       - CSocketMessage
       - CSocket
       - CUDPSocket
       - Cppl6Core
       
  - Neuer generischer AVL-Baum: CAVLTree. Dieser hat die Vergleichsfunktionen
    in der Klasse selbst und nicht mehr in den Knoten. Auch die Verwaltung der
    Knoten wird durch die AVL-Klasse übernommen, wodurch die Knoten nicht
    mehr von CTreeItem abgeleitet werden müssen, sondern Pointer auf beliebige
    Datenstrukturen sein können.     
  - File-Klassen wurden komplett überarbeitet. CFile ist nun nicht
    mehr Basisklasse, sondern wird von der neuen Klasse CFileObject
    abgeleitet. CMemFile wird nun ebenfalls von CFileObject abgeleitet.
    Diese Änderung macht es erforderlich alle Funktionen, die als
    Parameter ein "CFile&" oder "CFile*" erwarten, zu überprüfen, ob nun
    nicht ein CFileObject erforderlich ist.
  - CFile::Map verwendet nun mmap, sofern verfügbar
  - File-Klassen wurden vollständig dokumentiert
  - Die Funktion ReadFile ist weggefallen, stattdessen kann CFile::LoadFile
    verwendet werden 
  - CVar hat nun Enumeration "PPLDataType", alle abgeleiteten Klassen
    kennen ihren Datentyp. Durch Aufruf der Funktion CVar::DataType()
    kann man den Typ herausfinden und so ein beliebiges CVar-Objekt
    in das richtige umwandeln.
  - Queue-Klasse CQueue überarbeitet, man kann nun beliebige Objekte
    anhand ihrer Pointer hineingaben
  - Kompatibilitäts typedefs entfernt, somit gibt es keine Klassen mehr,
    die mit "Cppl..." anfangen
  - CMCrypt: Neue Klasse zum Verschlüsseln und Entschlüsseln von Daten,
    basierend auf libmcrypt
  - CMHash: Neue Klasse zum Erstellen von Hashes mit verschiedenen
    Algorithmen (z.B, MD5 oder SHA-256), basierend auf libmhash
  - Konvertierung zwischen CString und CWString erfolgt nun über
    Funktionen der libc, wenn Iconv nicht zur Verfügung steht. Dies
    setzt jedoch voraus, dass die Strings in CString entweder UTF-8
    oder US-ASCII kodiert sind. Iconv ist nun wieder optional.
  - Neue statische Funktionen in der Klasse Cppl6Core, mit denen geprüft
    werden kann, ob ein bestimmtes Feature einkompiliert wurde.
    Cppl6Core::have...  (siehe \ref PPL6_Features)
  - Neue Funktion "Random", die eine beliebige Anzahl Zufallsdaten
    erzeugt und als CBinary-Objekt zurückgibt.
  - RenameFile: Funktion prüft nun, ob alter und neuer Dateiname
    identisch sind, bevor irgendetwas gemacht wird.
  - Klasse CCompression wurde komplett überarbeitet und dokumentiert
  - Klasse CDir wurde komplett überarbeitet
  - CIconv hat nun statische Funktionen zum Auflisten aller
    unterstützen Charsets
  - libiconv wird nun zuverlässiger erkannt
  - Bugfix in MkDir unter Windows
  - Bugfix in CDBWrapper: Einige Funktionen haben als Returnwert den
    Fehlercode zurückgegeben statt 0.
  - ppl6-config liefert bei Aufruf mit "--cflags" nurnoch die tatsächlich
    notwenigen Parameter
  - Neue Datenbank-Klassen
    Die Datenbank-Klassen wurden komplett überarbeitet und im neuen
    Namespace "ppl6::db" reimplementiert. Statt einem Result-Handle, das
    bei verschiedenen Funktionen zum Verarbeiten des Ergebnisses immer wieder
    als Parameter übergeben werden mußte, wird nun eine Result-Klasse
    verwendet. Diese enthält alle zur Verarbeitung des Ergebnisses
    erforderlichen Funktionen und muss am Ende nur mit delete gelöscht
    werden. Alle Funktionen der neuen Klassen wurden vollständig dokumentiert.
    Die alten Klassen im ppl6-Namespace sind weiterhin enthalten, werden
    aber in einer zukünftigen Version entfernt.
  - Postgres-Datenbank wird mit der neuen Klasse ppl6::db::Postgres
    erstmalig in PPL6 unterstützt. Die Klasse CDBPostgres war nie
    wirklich implementiert.
  - Neue Klasse ppl6::db::GenericResult zum Speichern von Ergebnissen aus
    Datenbank-Selects und zum Kopieren von Ergebnissen.
  - Das Verzeichnis "docs" und die Doxygen-Dateien sind nun in der
    Source-Distribution enthalten. Aus irgendeinem Grund fehlten sie bisher. 
  - CString und CWString haben neue Funktion "IsNumeric"
  - CAssocArray: Bei der Sortierung der Elemente wird nun geprüft,
    ob die zwei zu vergleichenden Schlüssel nummerisch sind. Ist dies der Fall,
    erfolgt der Vergleich auf nummerischer Basis anstelle des Strings. Bei
    Verwendung von "[]" wird daher die Datensatznummer nicht mehr in einen
    10-stelligen String verwandelt.
  - CSocket-Klasse wurde umbenannt in CTCPSocket 
   
Version 6.2.6 vom 09.06.2009	(CVS-Tag: REL_6_2_6, Branch: RELENG_6_2)
  - Funktionen "PokeFloat" und "PeekFloat" hinzugefügt
    TODO: Big Endian Implementation
  - Neue Funktion "GetID3GenreName"
  - Fehler in CTree::Find behoben
  - CString und CWString haben neue Funktion UCWords
  - IdentMPEG: Fehler in der Erkennung des MPEG-Headers gefixt
  - CID3Tag: Es kann nun Version 2.4 gelesen werden
  - CID3Tag: Bugfix in Save-Funktion, Framegröße > 127 Byte wird nun
    korrekt geschrieben
  - CID3Tag: Bugfix beim Dekodieren von Frames (CopyAndDecodeText)
  - CTree: Kritische Bug gefixt. Beim Einfügen eines neuen Knotens
    wurden die Pointer auf left und right sowie die Balance nicht mit
    NULL initialisiert. Dies konnte zu Schutzverletzungen und Endlosschleifen
    führen.
  - CTree / CTreeItem: Dokumentation korrigiert
  - CTreeItem hat nun Funktionen zum Auslesen der Verbindungen zu Parent,
    Left und Right
  - CQueue: Neue Klasse zum Verwalten von Queues
  - Fehler im Configure behoben, der unter Windows mit MinGW dazu
    führte, dass Iconv mit einer falschen Byteorder initialisiert
    wurde, was wiederum zu Fehlverhalten in CWString führte
  - RenameFile prüft nun nach dem "remove", ob die Datei an der alten
    Position noch vorhanden ist und löscht sie gegebenenfalls
  - Einige Memberfunctions von CString und CBinary sind nun als
    "const" deklariert. In der nächsten Release werden weitere folgen.
  - CString kann nun auch CBinary importieren, sowie Qt's QVariant

Version 6.2.5 vom 15.05.2009			(CVS-Tag: REL_6_2_5)
  - Neue Funktion: CFile::Sync: Dateiänderungen sofort auf die Platte
    schreiben
  - Dokumentation CApplication
  - CID3Tag: Funktionen zum Auslesen der üblichen Tags (Artist, Titel, etc.)
  - MkTime-Funktion mit Integer als Parameter
  - CConfig: Neue Funktionen

Version 6.2.4 vom 01.03.2009			(CVS-Tag: REL_6_2_4)
  - Bugfix: Falsche Reihenfolge der Destruktor-Aufrufe in PPLExit
  - Tippfehler in CLog beseitigt
  - CArray: Explode-Funktion kann nun leere Zeilen ignorieren (zusätzlicher
    Parameter erforderlich)
  - DirectX 9 Engine vervollständigt
  - Neue Klasse: grafix::CSprite zum Laden und Anzeigen von Sprites
  - Das Makefile erfordert nun kein GNU-make mehr, sondern funktioniert
    beispielsweise auch mit FreeBSD make
  - Bugfix: Segmentation Fault und Endlosschleife beim Lesen von
    defekten JPEG-Files behoben
  - configure: Erkennung für "nasm"-Assembler hinzugefügt
  - Assembler Unterstützung für AMD 64-Bit unter Unix und Windows
  - BltColorKey nutzt nun auch Assembler
  - Bugfix: BMP-Dateien mit 32-Bit Farbtiefe und Alphakanal werden nun
    korrekt geladen
  - Neu: Unit-Tests für Grafik-Funktionen
  - Bugfix: Die Interpretation der RECT-Struktur war in einigen
    Grafik-Funktionen fehlerhaft
  - Fonts: Fehlerhafte Datei "liberationsans.fnt5" ersetzt durch
    "liberationsans8.fnt5" 
  - BltDiffuse verwendet nun auch Assembler und ist damit ca. 4 mal schneller!
    Die C-Version verwendet nun die Integer-Variante RGBBlend255 statt der
    Floatingpoint-Variante RGBBlend und ist damit auch mehr als doppelt so
    schnell wie bisher.
  - Sybase: Beim Connect kann nun die TDS-Version und Paketgröße angegeben
    werden. Außerdem ist es nun möglich direkt auf einen Hostnamen oder
    IP-Adresse zu connecten, ohne dass dieser in der Interfaces-Datei
    definiert wurde.
  - Sybase: Neue Funktionen zur globalen Initialisierung:
  - CDBResult: Statt einem Key-Value basierten CAssocArray kann das Ergebnis
    einer Zeile nun auch in einem durchnummerierten CArray abgelegt werden
  - CDBResult: Neue interne Funktion ToString um einen bliebigen Datentyp
    in einen String zu wandeln
  - CDBResult: Ber Befehl "Result" unterstützt nun als zweiten Parameter auch
    einen Spalten-Index statt einen Namen
  - Configure prüft nun den CPU-Typ und aktiviert zusätzliche Compiler-Flags
    zur Optimierung.
  - CSurface::PutPixel ist nun vom Typ "void" und speichert Koordinaten und
    Farbe nicht mehr. Dadurch ist die Funktion schneller. Zusätzlich
    läßt sich über einen Auftruf der Funktion CSurface::FastPixel(true)
    die Prüfung abschalten, ob der Pixel im erlaubten Zeichenbereich liegt.
    Die Anwendung muss sicherstellen, dass dies nicht passiert, da es sonst
    zu Schutzverletzungen kommen kann.
  - CSendMail::CSendMail verwendet nun gethostname und getdomainname zur
    Ermittlung des sendenden Hostnamens statt der Environment-Variable
    HOSTNAME, sofern die Funktionen vorhanden sind.
  
Version 6.2.3 vom 24.11.2008			(CVS-Tag: REL_6_2_3)
  - configure stoppt nun nicht mehr, wenn zwingend benötigte Libraries
    fehlen, sondern meldet dies erst im Anschluss an die Zusammenfassung
  - iconv ist nun zwingend erforderlich, wird indirekt von den Funktionen
    LCase und UCase der String-Klasse benötigt
  - IsTrue erkennt nun auch "on" und "an" als true
  - CLog hat nun Rotate-Funktion
  - CLog-Bugfix: Mutex in PrintArraySingleLine wurde zu spät gelocked
  - Update auf Doxygen 1.5.7
  - Bugfix in CApplication: Destruktor darf nicht PPL_Exit aufrufen,
    da dies später automatisch passiert
  - Bugfix in sybase.m4 Macro


Version 6.2.2 vom 23.06.2008 			(CVS-Tag: REL_6_2_2)
  
Das "a" in der letzten Version bereitete ein paar Probleme, daher
gibt es kurzfristig nochmal diese Version mit wenig Änderungen:
  - configure: changed iconv detection, which now works on FreeBSD
  - Bugfix in CSocket::SSL_Connect() bei Verwendung von Timeouts
  - Visual Studio 2003 Project-File aktualisiert


Version 6.2.1a vom 15.06.2008 			(CVS-Tag: REL_6_2_1)
  - Bugfix: Bei der Übersetzung der Socketfehler wurden nun überall
    "#ifdef"'s hinzugefügt, da nicht alle Errorcodes auf allen
    Betriebsystemen vorhanden sind.


Version 6.2.1 vom 15.06.2008 			(CVS-Tag: REL_6_2_1)
  - Visual Studio 2008 Projekt-File aktualisiert
  - Fehler im configure bzgl. Include-Pfad bei bzip2 behoben
  - Korrektur in der iconv-Erkennung. Ein hardgecodeter Pfad (/usr/local/lib)
    führte zu Problemen und wurde entfernt.
  - Neue Funktion: CBinary::HexDump
  - CAssocArray: Verschiedene Funktionen retten nun den aktuellen
    Fehlerzustand
  - CInt: Operator |= hinzugefügt
  - CString: Funktionen StrCmp und StrCaseCmp erwarten als ersten
    Parameter nun "const char *" statt "char *"
  - Gemeinsame externe Funktionen von CSocket und CUDPSocket wurden
    in eigene Datei socket.cpp verschoben
  - Grafix: Mit DirectX9-Engine begonnen
  - src/grafix6/Errors.cpp wurde in GrafikErrors.cpp umbenannt, das es
    unter VS2008 sonst zu Überschneidungen kommt
  - CConfig: Leerzeilen werden nicht mehr überlesen
  - Windows-Sockets: Übersetzung von Windows-Socket-Fehlermeldungen
  - CSocket: Neue Funktionen "IsReadable" und "IsWriteable"
  - Bugfix CLog::LogError: Error-Text wurde nicht mehr ins Logfile geschrieben
  - configure: lame und libmad werden nun auch unter MinGW gefunden


Version 6.2.0 vom 15.04.2008 			(CVS-Tag: REL_6_2_0)
  - Lizenz: Die PPL-Library steht nun endlich offiziell unter einer Open
    Source Lizenz. Nach reiflicher Überlegung wurde eine BSD-Lizenz ohne
    Werbungsklausel ausgewählt. Die Library kann somit ohne Einschränkung
    auch in kommerziellen oder "Closed Source" Projekten verwendet
    werden. Die Lizenz wurde in allen Quellcode-Dateien eingebaut.
  - AVL-Code: Der bisherige AVL-Code basierte auf der libavl, die unter
    der GNU General Public Licence steht. Da diese mit der BSD-Lizenz
    unvereinbar ist, wurde der Code aus der Version vor 6.0.19 wieder
    übernommen. Der damalige Fehler in der Löschfunktion wurde gefunden
  - Doku: Copyright und Credits aufgenommen
  - Die alte Grafik-Engine wurde entfernt, das Inlcude-File der neuen
    Engine wurde von "ppl6-grafix6.h" in "ppl6-grafix.h" umbenannt.
  - Weitere veraltete Dateien entfernt.
  - Bugfix CReadMail: Leere Headerzeilen werden ignoriert  
  - Weitere Funktions-Prüfungen im Configure
  - CAssocArray Verwendet nun CTree anstelle von CAVLTree.
  - Funktionen CAssocArray::Get...Sorted wurden entfernt, Funktionen wie "GetNext..."
    und "GetPrevious..." liefern die Elemente nun immer sortiert zurück.
  - Klasse CAVLTree wurde entfernt
  - CDir verwendet nun CTree statt CAVLTree
  - CHeap: Speicher wird automatisch freigegeben. Wenn mehr als ein Block
    komplett unbenutzt ist, wird der erste behalten und alle weiteren
    freigegeben
  - CString verwendet nun CHeap für den Speicher der Klasse
  - CWString verwendet nun CHeap für den Speicher der Klasse
  - CString: Der initiale Buffer für Strings wurde von 128 auf 64 Byte
    verkleinert
  - Cppl6Core: Der Heap-Speicher für CAssocArray, CString und CWString wird
    nun durch Cppl6Core verwaltet
  - CAssocArray: Klasse wurde vollständig dokumentiert und ein paar kleinere
    Verbesserungen vorgenommen.
  - Bugfix CConfig: Beim Einlesen der kompletten Sektionen wurden führende Leerzeichen
    entfernt, obwohl diese für CConfig::GetSection erhalten bleiben sollten
  - pplgenresource: In der Konfigurationsdatei kann man nun eine Sektion
    "prefix" und "suffix" definieren. Der Inhalt von "prefix" wird der Resourcen-
    Header-Datei vorangestellt, "suffix" wird angehangen. Ideal für Copyright-
    Vermerke.


Version 6.1.4 vom 31.03.2008 			(CVS-Tag: REL_6_1_4)
  - Dokumentation korrigiert: Scheinbar hab ich vergessen die neuste Version
    der Doxygen-Konfigurationsdatei einzuchecken, wodurch die Doku nicht so
    generiert wurde, wie es sollte
  - Fehlernde Kompatibilitäts-typedefs nachgetragen:
      - CpplSSL
      - CppLCompression
  - Neue Funktion: CBinary::ToFile
  - Neue Funktionen in CMemFile:
      - ppluint32 Gets(CString *buffer, int maxlinelength=1024);
      - CString	*Gets(int maxlinelength=1024);
      - void Puts (CString *str);
  - Bugfix: In CDBWrapper::Save wurde intern ein Return-Code falsch
    interpretiert und der Update String wurde falsch zusammengebaut. Scheinbar
    hab ich "Save" zuvor noch niemals mit "Update" aufgerufen...
  

Version 6.1.3 vom 29.03.2008 			(CVS-Tag: REL_6_1_3)
  - Win32-Bugfix: ppl6::DeleteFile wurde nicht gefunden, da Windows
    "DeleteFile" umdefiniert. In CpplFile.cpp wurde daher ein "#undef"
    hinzugefügt.
  - configure: Minimum-Version für SDL auf 1.2.10 hochgesetzt, darunter schlägt
    das Kompilieren fehl.
  - gcc 4.2.x fixes: Ab gcc 4.2.0 ist die Umwandlung einer String-Konstante
    in einen "char*" nicht mehr erlaubt und führt zu einer Warnung:
    "warning: deprecated conversion from string constant to 'char*'"
    In der PPL-Library tritt das Problem insbesondere bei Funktionen auf,
    die einen Format-String gefolgt von einer variablen Anzahl Parametern
    erwarten. (z.B. SetError(ppluint32, char *msg, ...). Die betroffenden
    Datentypen wurden daher in "const char *" geändert, wodurch es möglicherweise
    zu inkompatibilitäten kommen kann!
    Außerdem mußten zwei der CLog::Printf-Funktionen umbenannt werden.
  - Bugfix: In CHostsAllow::LoadFromFile wurde CpplFile::Load statt CpplFile::Open
    benutzt
  - Bugfix: JPEG-Filter in grafix6-Namespace funktioniert nun. Es wurden
    Returncodes der CpplFile-Klasse nicht richtig geprüft.
  - Change in CConfig: Taucht ein Keywort mehrfach auf, wird dessen Wert mit Newline
    an den vorhandenen angehangen. Bisher wurde der alte Wert durch den neuen
    ersetzt.
  - Bugfix: Erkennung von ftruncate im Configure und in config.h.in hinzugefügt
  - Bugfix: CpplFile::Size() hat immer nur die Größe der Datei beim Öffnen
    zurückgegeben, aber nicht die aktuelle Größe. Size() ruft nun Lof() auf.
  - Sämtliche verbliebene Klassen in ppl6.h, die mit Cppl begonnen haben,
    wurden nun ebenfalls umbenannt. Aus "Cppl..." wurde "C...". Für alle
    alten Klassennamen wurden Typedef's definiert, so dass die alten
    Namen noch weiterverwendet werden können. Diese Typedef's lassen
    sich nun aber durch die Definition "NO_CPPL_COMPAT" abschalten.
  - Die alten Klassennamen werden nun intern in der Library nicht mehr
    verwendet.
  - Etliche Dateinamen der Sourcen wurden umbenannt von "Cppl..." in "C..."
  - CpplMail wurde umbenannt in CSendMail
  - Neue Klasse CReadMail zum einlesen und dekodieren von Mails
  - Dokumentation gründlich überarbeitet
  

Version 6.1.2 vom 06.02.2008 			(CVS-Tag: REL_6_1_2)
  - CDBPoolEx::CheckPool ist nun implementiert
  - CDBPool::Get, Bugfix: Der Pointer auf die Liste der freien Connects wurde
    nicht auf den Anfang der Liste gesetzt, wodurch nach Aufruf von GetStatus
    oder CheckPool keine Connects mehr aus dem Pool verwendet wurden.
  - Der Bugfix an CTree::Find hat einiges durcheinander gebracht und wurde zurückgenommen.
    Fehlerhaft war die Dokumentation der beiden Funktionen CompareNode und
    CompareValue. Diese wurde korrigiert und verbessert.

Version 6.1.1 vom 15.01.2008			(CVS-Tag: REL_6_1_1)
  - Weitere Klassen wurden umbenannt:
    - CpplDBResult => CDBResult
    - CpplDBWrapper => CDBWrapper
    - CpplDBMySQL => CDBMySQL
    - CpplDBSybase => CDBSybase
    - CpplLog => CLog
    Für die alten Klassennamen gibt es "typedef"s, so dass diese
    weiterverwendet werden können.
  - Datenbankpools
    - CDBPool: Verwaltung eines Verbindungspools zu einer einzelnen Datenbank
    - CDBPoolEx: Verwaltung multipler Verbindungspools zu verschiedenen Datenbanken
  - CLog:
    - Neue Funktionen zur Ausgabe eines zusätzlichen Modul- und Funktionsnamens
    - Filterfunktion für Module und Funktionen
  - GetMicrotime: Alias für getmicrotime
  - GetMicroSeconds: Liefert Millisekunden seit 1970 zurück
  - Code-Pflege: Fehlende Klammern, Type-Casts und andere kleinere Fehler, die beim
    Kompilieren zu Warnungen geführt haben, wurden korrigiert
  - Configure prüft nun mehr Wide-Char Datentypen. Einige der bisher ungeprüften
    Funktionen (z.B. wcstoll) sind nicht auf allen Systemen vorhanden (z.B. Solaris 9).
  - Portierung Solaris 9/10
  - PeekNx und PokeNx führten unter Solaris zu Bus-Error, wenn die Adresse nicht
    aligned war.
  - CTree::Find Bugfix: Routine hat den Baum in der falschen Richtung durchsucht

Version 6.1.0 vom 27.11.2007			(CVS-Tag: REL_6_1_0)
  - Neue Grafik-Engine!
    Die bisherige grafix6-Engine wurde verworfen und komplett neu implementiert.
    Die neue Engine hat einen eigenen Namespace (ppl6::grafix) und ein eignes
    Header-File (ppl6-grafix6.h). Die Engine hat ebenfalls eine neue
    Fontengine, die FreeType und das neue Eigenformat Font5 unterstützt.
    Die "uralt-Engine" ist weiterhin enthalten, wird aber über kurz oder
    lang entfallen.
  - Neues Toolkit!
    Unter dem Namespace ppl6::tk entsteht ein neues Toolkit, mit dem
    Eingabeformulare gebaut werden können. Das Toolkit setzt auf der neuen
    Grafik-Engine auf. Bisher sind die Elemente CEvent, CWindow, SubWindow,
    CWidget, Button, Frame, Label, Input, CheckBox und RadioButton implementiert.
    Das Input-Element verwendet die neuen Cronjob-Timer zum Darstellen eines
    blinkenden Cursors (siehe unten).
  - MySQL: Fehler "Error in my_thread_global_end(): x threads didn't exit"
    behoben. Dazu musste im Threadspezifischen Speicher ein Flag gesetzt
    werden, dass beim Beenden des Thread mysql_thread_end() aufgerufen
    werden muss. Ausserdem wird nun bei jedem MySQL-Befehl geprüft, ob
    mysql_thread_init() schon aufgerufen wurde.
  - Thread-spezifische Datenstruktur wurde nach thread.h ausgelagert.
  - neue Error-Funktionen:
    - ExtendError(ppluint32 errorcode)
    - void SetError(ppluint32 errorcode, CpplString *msg)
  - Neue Funktion: CpplResource *GetPPLResource();
    Liefert einen Pointer auf die einkompilierten Resourcen
  - CTree wurde überarbeitet und funktioniert nun
  - Neues Fileformat: PFP-File Version 3
  - Neue Klassen zum Erstellen und Lesen von "PFP-File Version 3"-Dateien:
    PFPFile, PFPChunk. Beide Klassen sind vollständig dokumentiert
  - "ident" erkennt nun PFP-File Version 3 und liefert Code 36 zurück.
  - Klassen umbenannt:
    - CpplVar => CVar
    - CpplInt => CInt
    - CpplBool => CBool
    - CpplString => CString
    - CpplArray => CArray
      Ausserdem ist CArray nun von CVar abgeleitet und ruft bei Änderungen die
      Change-Funktion auf
    - CpplAssocArray => CAssocArray
    - CpplBinary => CBinary
    
    Um kompatibel mit den alten Namen zu bleiben, gibt es für alle
    Klassen ein "typedef" vom neuen auf den alten Namen.
  - Neue Klasse CWString
    Anders als bei der bisherigen String-Klasse werden die Strings hier als
    Unicode Wide-Character (wchar_t) gespeichert. Unter Windows ist dieser
    Datentyp 16 Bit breit, unter UNIX 32.
  - Windows Port auf Visual Studio 2008
  - Neue Klassen zur Timer-Steuerung: CCrontab und CCronjob

Version 6.0.23 vom 26.10.2007			(CVS-Tag: REL_6_0_23)
  - CpplFile
    - Neue Funktion "OpenTemp" zum oeffnen einer Temporaeren Datei
      mit einem Template als Filenamen. Nutzt die Funktion mkstemp
    - "Delete": Die geoffnete Datei wird geschlossen und anschliessend
      geloescht. Kann in Kombination mit OpenTemp verwendet werden.
    - GetFileNo: Liefert das Filehandle des Betriebssystems zurück.
  - CpplSocketMessage: Neue Protokollversion 2
    - Mit der Member-Funktion "SetVersion" kann nun die Version 1 (default)
      oder 2 ausgewählt werden. Die Version 2 hat einen 4-Byte längeren
      Header, in dem nun eine CRC-Summe der Nutzdaten untergebracht wurde.
    - In beiden Versionen wurde im Flags-Feld das Bit 1 hinzugefügt:
      "Client supports ZLib". Dieses ist bei Nutzung der Funktion
      CpplSocket::Write defaultmäßig immer gesetzt, kann aber mit der
      Funktion CpplSocketMessage::DisableCompression abgeschaltet werden.
      Die Daten werden dann nicht komprimiert.
  - CpplThread: Interner Threadspezifischer Speicher funktioniert nun
    auch unter WIN32
  - CpplString: Wird vor inkludierung der Headerdatei ppl6.h die
    Konstante WITH-QT definiert, werden Konstruktoren und Operatoren
    für QT's QString Klasse eingebunden.
  - Neue Funktion in CpplDBWrapper: int CpplDBWrapper::ReadKeyValue
    Kann verwendet werden, um Key-Value-Paare aus einer Datenbank zu lesen
  - In CpplAssocArray::CreateFromTemplate(CpplString *templ...) wurde nicht
    überprüft, ob statt des Strings ein NULL-Pointer übergeben wurde
  - CpplMail::SetSender prüft nun, ob der String einen Namen und Emailadresse
    in spitzen Klammern enthält (z.B. "Mein Name <ich@domain.de>"). Ist dies
    der Fall, wird nur der Inhalt der spitzen Klammern verwendet.
  - Klasse umbenannt: CpplList heisst nun CPointerList
  - Neue Klasse "CList" zum Verwalten von Listenelementen, die von
    der ebenfalls neuen Klasse CListItem abgeleitet sind.
  - Dokumentation der Klassen CList und CListItem
  - Neue Klasse "CTree" zum Verwalten von Elementen in einem AVL-Baum, die von
    der ebenfalls neuen Klasse CTreeItem abgeleitet sind.
  - Dokumentation der Klassen CTree und CTreeItem
  - Bugfix in "CpplSocket::Read": Wurden mehr Bytes gesendet als erwartet, wurde
    der Buffer überschrieben. Trat nicht bei SSL-Verschlüsselung auf.
  - CpplThread exportiert jetzt Lock und Unlock-Funktion, die beim Auslesen
    der Liste sinnvoll ist.
  - CpplSocket::SSL_Connect: Wurde auf einen Server connected, der kein SSL
    unterstützt bzw. das SSL-Handshake ignoriert, blieb der Connect minutenlang
    bis zu einem Timeout hängen. Es wird nun der Timeout berücksichtigt, der mit
    SetConnectTimeout gesetzt wurde.
  

Version 6.0.22 vom 27.08.2007			(CVS-Tag: REL_6_0_22)
  - CpplThread
    - Bugfix: Beim Starten eines Threads unter UNIX wurden die Pthread-Attribute
      nicht übergeben, wodurch eine zuvor veränderte Stackgröße keine Auswirkung
      hatte
    - Neue Funktion: ThreadIdle
      Der Thread gibt seine CPU-Zeit an andere Threads ab
    - GetThreadID liefert nun eine vom Betriebssystem unabhängige
      Zahl zurück, die bei 0 anfängt und mit jedem weiteren Thread
      hochgezählt wird.
    - Interne Thread-Datenstruktur wird nun im threadspezifischen Speicher
      des Betriebssystems abgelegt. Datenstruktur wurde um ThreadID,
      aktuellen Fehler und Fehlerstack erweitert.
    - Threadspezifische Fehler werden nun nicht mehr in einer internen verketteten
      Liste gespeichert bzw. gesucht, sondern in einem threadspezifischen
      Speicher, der beim Erstellen des Threads automatisch angelegt wird.
      Insbesondere wenn mit vielen Threads gearbeitet wird, ist das wesentlich
      performanter.
  - Datenstruktur PPL_ERROR wurde verändert. Der char* errortxt wurde duch
    die Klasse CpplString ersetzt. Falls die Struktur dynamisch erstellt wird,
    sollte "new" statt "malloc" verwendet werden, bzw. "delete" statt "free".
  - CpplSocket
    - Funktion ReadOnce: Falls unter UNIX ein EAGAIN auftrat (z.B. im Non-Blocking
      Modus), hat die Funktion fälschlicherweise true zurückgegeben. Es wird
      nun false und der Fehlercode 277 zurückgegeben
    - Fehlercodes bereinigt. Die Codes 279 und 306 sowie 277 und 309 hatten die
      gleiche Bedeutung. Die Codes 306 und 309 wurden daher ersetzt. Programme,
      die diese Codes abfragen, müssen angepasst werden!
    - Function Connect gibt nun den Fehlercode 174 bei einem Timeout zurück.

Version 6.0.21 vom 12.08.2007			(CVS-Tag: -)
  - Experimentelle Unterstützung für MINGW
  - Unterstützung für YASM Assembler unter UNIX und MINGW (Funktion GetCPUCaps)
  - Library aufgesplittet in core, database, inet, inet-nossl, grafix, sound
    und tk. Man kann nun entweder wie gewohnt die komplette Library einbinden
    (-lppl) oder nur die Teile, die man wirklich braucht (-lppl6-core).
  - Neue experimentelle Klasse "CID3Tag" zum setzen von ID3v1- und ID3v2-Tags
  - Neue HexDump-Funktion mit Ausgabe in einen CpplString
  - CpplString: 
      - Neue Funktion void HexDump(void *buffer, ppldd bytes, bool skipheader=false);
      - Neue Transcode-Funktionen
  - CpplSocket::WaitForMessage: Bei einem Protokollfehler wird nun
    der komplette Header in die Fehlermeldung gedumped.
  - CpplAssocArray:
      - Mutex entfernt! Der Aufrufer ist für die Threadsicherheit verantwortlich!
      - Bugfix bei Zahlen-Keys, maxint wird nun auch bei einem "0"-Key hochgezählt
      - Neue Funktion "GetCurrentKey", liefert den zuletzt benutzen Key zurück
      - Neue Funktionen zum Importieren von CpplDir-Klassen
      - Neue Funktion "int Deletef(const char *fmt, ...);"
      - Bugfix: Beim Anlegen des ersten Elements wurde der Next-Pointer
        falsch initialisiert. Das führte zu Problemen beim Löschen.
  - CpplDirEntry:
      - Neue Funktionen "Is..." zum Prüfen der File-Attribute
      - Neue Funktion "Copy" und Operator "="
      - Klasse ist nun vollständig dokumentiert
  - CpplDir:
      - Klasse ist nun vollständig dokumentiert
  - CpplThread:
      - Die Funktionen ThreadSetPriority und ThreadGetPriority, sowie die
        gleichnamigen Meber-Funktionen der Klasse CpplThread funktionieren nun
        auch unter Unix mit Pthreads
      - ThreadWaitSuspended benutzt nun die Wait-Funktion des Mutex
  - CpplMutex: Neue Funktionen "Wait" und "Signal"
  - CpplThreadPool:
      - Neue Funktion ChangePriority
  - CpplArray:
      - Mutex und ThreadSafe-Funktionen entfernt. Hat in dieser
        Klasse nichts zu suchen, der Anwender ist für die threadsichere
        programmierung zuständig.
  - CpplIconv
      - Neuer Konstruktor: CpplIconv(const char *fromcode, const char *tocode);
      - Bei Transcode-Funktion kann nun die Größe angegeben werden:
        char *Transcode(const char *str, size_t size=0);
  - Neue Funktionen um RECT/WINRECT-Strukturen von oder in einen String zu
    konvertieren:
    int StringToRect(CpplString *s, WINRECT *r);
    int StringToRect(CpplString *s, RECT *r);
    int RectToString(WINRECT *r, CpplString *s);
    int RectToString(RECT *r, CpplString *s);
  - configure:
      - Erkennung für libpng in eigenes m4-File ausgelagert und verbessert, es
        wird nun libpng-config verwendet
      - Erkennung für libjpeg in eigenes m4-File ausgelagert
      - Bugfixes
  
		
Version 6.0.20 vom 31.05.2007		(CVS-Tag: REL_6_0_20)
  - CpplMemSpace hat neue Funktion StrDup
  - Neuimplementierung der AVLTree-Klasse, basierend auf der GNU
    AVL-Library, Version 2.0.2a. CAVLTree ersetzt CpplAVLTree.
  - AVLTree kann nun Delete, GetFirst, GetNext, GetLast, GetPrevious,
    Current
  - CpplAssocArray verwendet nun AVLTree zum Suchen und Sortieren.
    Bei einer Liste mit 122820 Elementen, hat die Klasse zuvor ca. 21 Minuten
    zum Einlesen gebraucht. Mit AVLTree dauert es nurnoch 3 Sekunden!
  - CpplAssocArray: Neue Funktionen zum sortierten ausgeben und traversieren:
    ListSorted, GetFirstSorted, GetNextSorted, GetLastSorted, GetPreviousSorted
  - CpplString: LCase und UCase sind nun UTF-8 sicher
  - Bugfix: CpplThreadPool::Count hat immer 0 zurückgegeben
  - CpplString: Die Regular-Expression-Funktionen setzen nun automatisch
    das Flag "PCRE_UTF8", wenn die Umgebung (setlocale) auf UTF-8 eingestellt
    ist.
  - Die PokeNxx und PeekNxx-Funktionen haben auf little endian Platformen
    (Intel/AMD) nicht in Network-Byte-Order geschrieben. Dies ist ein
    kritischer Bug, da sich dies u.a. auf die CpplSocketMessage-Klasse auswirkt,
    die zur TCP/IP-Kommunikation verwendet wird. Alle Anwendungen, die darüber
    miteinander kommunizieren und auf Intel-Platformen laufen, müssen neu
    kompiliert werden!
  - CpplAssocArray: Die Export-Funktion hat Poke verwendet, die Import-Funktion
    aber PeekN. Beide Funktionen benutzen nun die Network-Byteorder-Funktionen.
  - CpplAssocArray::ToTemplate erstellt jetzt mehrere Zeilen mit führendem Keywort,
    wenn ein Value Zeilenumbrüche enthält.
  - Fehler in getargv beseitigt. Die Abfrage nach einem mehrbuchstabigem Flag, das
    am Ende der Parameter steht, wurde als Wert alles ab dem zweiten Buchstaben
    zurückgegeben, ohne die Länge des Flags zu beachten.
    

Version 6.0.19 vom 03.05.2007		(CVS-Tag: REL_6_0_19)
  - LibIconv wird nun auch unter FreeBSD erkannt
  - CpplIconv dokumentiert
  - Neue Funktion CpplString::Transcode
  - CpplApplication durch CApplication ersetzt, die keine
    Grafikinitialisierung vornimmt, und daher nun auch in ppl6.h
    definiert wird
  - CpplLog::Terminate. Hat die gleichen Funktion wie der Aufruf des
    Destruktors und Konstruktors -> Die Klasse wird in den Ausgangszustand
    gebracht.
  - Neue Socketklasse CUDPSocket zum Senden und Empfangen von UDP-Paketen
  - GetHostByName und GetHostByAddr liefern nun mehr Daten zurück, u.a. eine
    sockaddr-Struktur
  - Fehler in CpplMemFile::Gets beseitigt, die Funktion verhält sich nun
    so wie fgets.
  - CpplFile-Klasse hat nun Popen-Funktion
  - CpplMemory-Klasse als Basisklasse für alle anderen Klassen wurde
    entfernt
  - Mehrere Speicherzugriffsfehler und Memory-Leaks entfernt
  - GenerateResourceHeader liest jetzt alle Sektionen einer Konfigurationsdatei
    ein, unabhängig vom Namen.
  - Bugfix in der Erkennung der lib-pcre im configure

Version 6.0.18 vom 26.03.2007		(CVS-Tag: REL_6_0_18)
  - Anpassung der Sybase-Datenbank-Erkennung im Configure auf
    ASE 15.0
  - Überprüfung aller Destruktoren, Sicherstellung, dass kein
    Errorcode durch einen Destruktor überschrieben wird.
  - Socket-Klasse kann nun beim Connect auf eine Remote-Addresse auf
    einen lokalen Port gebunden werden (nur UNIX, Source-Port).
  - Beim Aufruf von CpplSocket::Connect kann der Port jetzt auch als
    Servicename statt als Nummer angegeben werden
  - Neue Klasse CpplMail zum Verschicken von Mails
  - CpplAssocArray hat Funktion um Array in Template zu speichern:
    ToTemplate
  

Version 6.0.17 vom 01.03.2007		(CVS-Tag: REL_6_0_17)
  - Ein weiterer kritischer Bugfix in der Socket-Funktion Write.
    Falls die Gegenstelle nicht bereit war Daten zu empfangen und
    ein EAGAIN-Fehler trat auf, wurde dieser nicht abgefangen,
    so dass Daten verloren gingen.


Version 6.0.16 vom 28.02.2007		(CVS-Tag: REL_6_0_16)
  - Neuer DatenTyp: CpplBinary
    Zum Speichern von Binären Daten
  - CpplAssocArray unterstützt CpplBinary
  - Neue Fehlerfunktionen: 
    - SetErrorFromErrno: Setzt einen Fehler in Abhängigkeit der errno-
      Variablen
    - TranslateErrno: Übersetzt den Wert der errno-Variablen in einen
      PPL Fehlercode
  - Neue Funktionen: Chmod und FileAttr
  - Bind-Funktion der CpplSocket-Klasse unterstützt nun unter Unix wieder
    Wildcards als "host"-Parameter (NULL,"" oder "*"), um sich auf alle
    Interfaces zu binden.
  - Kritischer Bugfix in den Socket-Funktionen Read und Write. Bei
    grossen Datenmengen, die in mehrere Pakete zerteilt werden, wurden
    die Pointer auf die Buffer nicht hochgesetzt


Version 6.0.15 vom 22.02.2007		(CVS-Tag: REL_6_0_15)
  - CpplCurl überarbeitet: Threadsafe, alle Set...-Funktionen prüfen
    Input-Parameter und geben Return-Wert zurück. POST-Methode wurde
    erstmal entfernt, GET wurde hinzugefügt.
  - CpplCurl wird nun immer eingebunden, liefert jedoch Fehlermeldungen
    bei Aufruf, wenn libCurl nicht eingebunden ist.
  - libcurl.m4-Macro aktualisiert
  - Bugfix bei Erkennung des "-pthread"-Flags im Configure
    
  
Version 6.0.14 vom 19.02.2007		(CVS-Tag: REL_6_0_14)
  - Sortierfunktion in CpplDir funktioniert wieder und nutz nun
    zur Beschleunigung AVL-Trees
  - CpplDBSybase hat nun Ping-Kommando
  - Bugfix in CpplThread: Beim starten des Threads wird nun das Stop-Flag
    gelöscht
  - Bugfix in CpplCompression::Uncompress
  - Neues Tool "pplgenresource" zum Erstellen von Header-Dateien mit
    PPL-Resourcen


Version 6.0.13 vom 26.01.2007		(CVS-Tag: REL_6_0_13)
  - Bugfix in CpplSocket: Beim Disconnect wurde der Filedescriptor nicht
    auf 0 geprüft. Bei einem vorausgegangenen fehlgeschlagenen Connect
    wurde dadurch STDIN geclosed
  - Mehr Debug-Code in CpplSocket
  - Neue Funktion Cppl6Core::MinVersion
  - Verbesserte Erkennung von bzip2 im Configure
  - Verbesserte Erkennung von pcre im Configure
  - Verbesserung der 64-Bit Kompatibilität


Version 6.0.12 vom 02.01.2007		(CVS-Tag: REL_6_0_12)
  - CpplAVLTree zur Verwaltung von AVL-Baeumen, allerdings
    funktioniert das Löschen nicht korrekt
  - MySQL-Klasse: Schlaegt ein Query fehl, weil die Datenbank-Verbindung
    zwischenzeitlich getrennt wurde, wird versucht sie wieder aufzubauen.
  - Fonts und Grafikformat-Filter wurden in Unterverzeichnisse von
    /src/grafix verschoben
  - Font-Routinen aus PPL5 wurden provisorisch importiert
  - Windows-Port
    getaddrinfo steht unter Windows 2000 nicht zur Verfuegung, daher
    wird fuer Bind, Listen, Connect der alte Code aus Version 6.0.9
    verwendet.
  - Adress-Resolver-Funktionen:
    int GetHostByName(const char *name, CpplAssocArray *Result);
    int GetHostByAddr(const char *addr, CpplAssocArray *Result);
  - Neue Funktion: CpplDBWrapper::InsertKey
  - Neue Funktion: Ini2Array
  - Dokumentation mit Doxygen begonnen
  - Timeout für Socket-Write-Funktionen
  - Fehler in CpplDir::FindNext unter Unix behoben
  - Fehler in CpplString[] bei Übergabe einer negativen Position behoben
  - Neue Funktion "GenerateResourceHeader" zum generieren einer Headerdatei
    mit Resourcen


Version 6.0.11 vom 31.10.2006		(CVS-Tag: REL_6_0_11)
  - Nonblocking Connect in Socket-Klasse unter UNIX. Wird vor dem
    Connect die neue Funktion CpplSocket::SetConnectTimeout aufgerufen,
    wird der Connect-Versuch nach der angegebenen Zeit abgebrochen
  - CpplIconv hat neue Funktionen:
    int TranscodeString(CpplString *str);
    int TranscodeString(CpplString str);
  
  
Version 6.0.10 vom 25.10.2006		(CVS-Tag: REL_6_0_10)
  - CpplDBWrapper hat nun "Save"-Funktion
  - PushError() und PopError() zum kurzzeitigen Retten eines Fehlers
  - Release-Library hat nun keine Debugger-Symbole mehr unter UNIX und ist mit
    -O3 optimiert
  - CpplSocket::Bind und CpplSocket::Connect benutzen nun zur Hostaufloesung
    getaddrinfo und unterstuetzen dadurch jetzt IPv6
  - CpplSocket::Listen ermittelt die Remote-IP nun mit getnameinfo statt
    inet_ntoa
  - CpplSocketMessage als Container zur Datenübertragung mit der Socket-Klasse
  - Neue Funktion um Datum im ISO 8601-Format zu generieren:
    MkISO8601Date und MkTime
  - CpplString wurde um MD5-Funktionen ergänzt
  - Bugfixes in CpplSocket
  - Bugfixes in CpplLog
  - CpplSocket wurde um SSL-Funktionen erweitert und kann nun als SSL-Client
    oder Server fungieren.
  - Neue Klasse CpplSSL, die zur Initialisierung der SSL-Funktionen in der
    Socket-Klasse benötigt wird.
  - Alle Aufrufe von "localtime" wurden durch die Thread-sichere Variante
    "localtime_r" ersetzt, sofern verfügbar.
  - CpplError ist nun keine Klasse mehr, sondern eine Sammlung von globalen
    Funktionen, die jetzt aber Threadsafe sind. Pro Thread wird ein Fehlercode
    gespeichert. Alle PPL-Klassen wurden entsprechend angepasst.
  - CpplAssocArray wurde komplett neugeschrieben und unterstuetzt nun
    verschachtelte assoziative Arrays. Die Klasse enthaelt viele neue
    Funktionen, ist aber kompatibel zur alten, sofern im Keywort kein Slash
    "/" vorkommt. 
  - CpplFile::Fseek liefert nun true (1) zurueck, wenn erfolgreich, false (0)
    wenn nicht. Vorher war es andersrum.
  - CpplDBSybase: Neue Datenbankklasse fuer Sybase CT-Lib
  - Neue Funktionen in den Array-Klassen
  - CpplDir umgeschrieben, Files werden nun in CpplDirEntry gespeichert
  - CpplMP3Encode::EncodeFile akzeptiert nun als Input auch eine CpplMP3Decode-
    Klasse
  - CpplThread::ThreadGetStackSize und CpplThread::ThreadSetStackSize
    hinzugefuegt
  - Erkennung fuer OpenSSL und --with-openssl Option im Configure
  - MySQL und Postgres werden nun nurnoch erkannt, wenn ausdruecklich
    --with-mysql bzw. --with-pgsql angegeben wurde
  - Neues Verzeichnis "config" mit Autoconf-Macros
  - Neue Funktionen in CpplDBWrapper:
    - int Connect(CpplAssocArray *dbdata);
    - PPL_DB_RESULT Exec(CpplString *query);
    - int SelectDB(const char *databasename);
    - int SelectDB(CpplString *databasename);
    - ExecArrayAll, alle Ergebnisse des Results werden als verschachteltes
      CpplAssocArray zurueckgegeben
  - Zahlreiche Bugfixes und neue Funktionen


Version 6.0.9 vom 07.06.2006		(CVS-Tag: REL_6_0_9)
  - Neue Klasse CpplCallback
  - CpplVar verwendet nun CpplCallback statt CpplNotify
  - Neue Klasse CpplBool, abgeleitet von CpplVar
  - CpplFile-Klasse merkt sich nun den Dateinamen. Dieser kann über
    die neue Funktion "GetFilename" abgefragt werden. Sie liefert
    "unknown", falls kein Filename vorhanden ist. Mit der Funktion
    "SetFilename" kann der Dateiname manuell gesetzt werden.
  - CpplResource::Get setzt nun den Namen der Resource innerhalb
    des CpplFile-Handles vor der Rückgabe
  - Suche nach Resourcen innerhalb von CpplResource wurde umstrukturiert
  - CpplList hat nun einen ThreadSafe-Schalter
  - Die Basisklasse "ppl6::Cppl6Core PPLCore" wird nicht mehr innerhalb
    der Library definiert, da aus irgendwelchen Gründen der Konstruktor
    nicht aufgerufen wird, bzw. die Klasse erst garnicht angelegt wird.
	Die Klasse ist nun als Pointer definiert und optional. Ueber die
    Funktion PPLInit() kann sie bei Bedarf angelegt und ueber PPLExit()
    wieder geloescht werden.
  - GrafikEngine für DirectX 9 unterstützt nun CreatePrimarySurface,
    Destroy, Lock, Unlock, Flip und empfängt Nachrichten.
  - ImageFilter überarbeitet. Load und Save liefern nun "true" oder
    "false" zurück. Load- und Save-Funktion mit Filenamen ist nun
    Teil der Basisklasse und wurde aus den abgeleiteten Klassen
    entfernt.
  - CpplGrafix intitialisiert nun die ImageFilter, eine alphatabelle
    für Blt-Operationen und ermittelt die CPU-Caps.
  - CpplGrafix unterstützt nun CreatePrimarySurface und
    CreateSoftwareSurface.
  - CpplGrafix unterstützt nun LoadImage in den Hauptspeicher.
  - Neue Grafiken in den Resourcen
  - CpplSurface unterstützt AlphaBlt-Funktionen, MMX optimiert (NASM
    erforderlich)
  - CpplSurface unterstützt BltDiffuse-Funktionen, MMX optimiert (NASM)
  - Generisches Interface für Font-Renderer
  - Freetype-Plugin
  - CpplGrafix::LoadFont-Routinen
  - Neue Klasse "CpplMemMan" zum Verwalten kleiner unterschiedlich
    grosser Speicherblöcke. Wird von CpplFontCache verwendet.
  - Neue Klasse "CpplIconv" zum Konvertieren von Text zwischen
    unterschiedlichen Charsets
  - Anpassungen der Konstruktoren-Definitionen fur GCC 4
  - CpplTok hat nun Funktion "GetRest"
  - CpplSocket hat neue Funktionen:
    virtual int Write(CpplString *str);
    virtual char *Read(int bytes);


Version 6.0.8 vom 20.12.2005       (CVS-Tag: REL_6_0_8)
  - CpplMemSpace aus PPL5 importiert
  - Erkennung für X11 im configure-Script
  - Zeitfunktionen aus functions.cpp sind nun in time.cpp
  - Macros für Sleep-Funktionen entfernt
  - Neue Sleep-Funktionen: 
    int USleep(ppluint64 microseconds);
    int MSleep(ppluint64 milliseconds);
    int SSleep(ppluint64 seconds);
  - Code-Anpassungen für Visual C++ 8.0 (Visual Studio 2005)
  - CpplCallback-Klasse

Version 6.0.7 vom 09.11.2005		(CVS-Tag: REL_6_0_7)
  - CpplString::Repeat-Funktionen hinzugefügt


Version 6.0.6 vom 08.11.2005		(CVS-Tag: REL_6_0_6)

  - Windows-Port an Änderungen aus 6.0.5 angeglichen
  - Neue Kompatibilitätsfunktion: long long atoll(const char *nptr);
  - IdentMPEG-Routine verbessert
  - Bugfix in CpplLog-Klasse, in "Output" wurde faelschlicherweise
    ein Mutex gelocked, der bereits von den aufrufenden Funktionen
    gelocked wurde


Version 6.0.5 vom 05.11.2005

  - Configure prüft nun, ob flock oder fcntl vorhanden sind
  - Locking-Funktionen von CpplFile verwenden nun primär fcntl.
    Falls weder fcntl noch flock vorhanden sind, liefern die
    Funktionen eine Fehlermeldung.
  - Der GMT-Offset in der Structure "tm" ist nicht auf allen
    Betriebssystemen vorhanden. Daher entsprechende Prüfung im
    configure ergänzt
  - CpplMutex und CpplThread beachten nun die Definition
    HAVE_PTHREADS aus dem configure


Version 6.0.4 vom 04.11.2005

  - CpplInt-Klasse hinzugefügt
  - CpplLog- und CpplDebug-Klasse überarbeitet
  - Locking-Mechanismus fuer File-Klasse
  - GetTime liefert nun weitere Informationen in der PPLTIME-Structure
    zurueck
  - Fehlende m4-Macros ergänzt


Version 6.0.3 vom 17.10.2005

  - Erkennung von libpcre im configure-Script
  - CpplString beruecksichtigt libpcre-Erkennung
  - Erkennung von fpos_t im configure-Script
  - Neue Klasse CpplTimer


Version 6.0.2 vom 24.09.2005

  - Zwei crc32-Funktionen zum Berechnen von Checksummen hinzugefügt. Die
    erste dient der Berechnung eines Strings, die zweite der eines bliebig
    großen Buffers.
  - GrafikEngine ist nun als Klasse definiert
  - PPL_SURFACE ist nun in ppl6-grafix.h definiert und somit auch fuer
    Clients zugaenglich
  - ident-Funktionen aus PPL5 importiert
  - Klasse CpplLang aus PPL5 importiert
  - Klasse CpplDir aus PPL5 importiert
  - Neue Klasse CpplString begonnen
  - CpplFile::Gets und Open unterstuetzen String-Klasse
  - Neue Funktionen MkDir, CopyFile, MoveFile, RenameFile, TouchFile,
    DeleteFile, WriteFile und GetTime
  - Port zu FreeBSD, Port zu WIN32, Port zu Solaris 9 Ultra Sparc III
  - Bugfix CpplSocket: Fehlercodes wurden korrigiert und neuvergeben
  - Bugfix CpplSocket: Interne Funktion inet_aton (WIN32) hatte keine
    Fehlerprüfung
  - Bugfix CpplSocket WIN32: Intitialisierung mit WSAStartup beim
    Erstellen der ersten Instanz


Version 6.0.1 vom 01.05.2005

  - Datenbank-Schnittstellen aus PPL5 importiert und ueberarbeitet,
    MySQL ist nun Threadsicher und Result ist nun vom Typ void* statt ppldd.
    Die ExecEx-Funktion wurde abgeschafft, Exec übernimmt deren Funktion.
  - Erkennung fuer MySQL und PostgreSQL im configure-Script hinzugefuegt
  - Erkennung von lame und libmad im configure-Script
  - ppl6-config Konfigurationsscript, zur Verwendung in anderen
    Programmen
  - Neue Klasse CpplHeap, zur Verwaltung von gleichgroßen Speicherblöcken,
    die häufig allokiert und wieder freigegeben werden.
  - CpplLog ist jetzt Basisklasse fuer CpplDebug und enthaelt
    ein differenzierteres Logging-Modell. Eventuell wird CpplLog aber
    nochmal ueberarbeitet.
  - CpplArray hat jetzt "Reset" und "GetNext"
  - CpplArray hat jetzt die von Perl abgeleiteten Funktionen Push, Pop,
    Shift und Unshift
  - CpplArray ist nun optional auch Threadsafe
  - Neue Klasse CpplMP3Decode, zum Dekodieren von MP3-Files. Nutzt
    libmad
  - CpplMP3Encode aus PPL5 importiert
  - CpplMP3Encode: Statt einem kompletten File kann nun auch ein bleibig
    großer Buffer komprimiert werden
  - CpplMP3Encode: Erstellen von MP3-Dateien mit variabler Bitrate
  - CpplResource: Verwaltung von PPL6-Resourcen
  - tools/mkresource zur Erstellung einer Include-Datei mit Resourcen

  - Begonnen die Grafik-Funktionen aus PPL5 zu übernehmen:
    - Surface Backup
    - Primitives
    - Colors
    - Image-Filter
    - ImageObject
  - CpplGrafix::CreatePrimarySurface
  - Merge aus 5.1.5:
    - Neue Funktionen in CpplAssocArray:
      - Add unterstuetzt nun einen optionalen dritten Parameter "size",
        der angibt, wieviele Bytes aus "value" ins Array kopiert werden
        sollen
      - Neue Funktion Concat, mit der man Werte mit gleichem Key mit
        einem beliebigen Trennzeichen zusammenhaengen kann


Version 6.0.0 vom 27.03.2005

PPL6 basiert auf PPL 5.1.2 vom 15.01.2005 ohne Grafik-Klassen.
Uebernommen wurden alle Funktionen und folgende Klassen:
  - CpplError
  - CpplTok
  - CpplFile
  - CpplMemFile
  - CpplDebug
  - CpplAssocArray
  - CpplConfig
  - CpplList
  - CpplCurl
  - CpplNotifyHandler
  
Aenderungen:

  - Namespace ist nun "ppl6"
  - Suffix "ppl_" bei allen Funktionen entfernt
  - Neue Klasse Cppl6Core, die als globale Variable PPLCore
    immer verfügbar ist. Sie enthält neben Versions-Abfrage,
    Memory-Verwaltung auch die globale Debug-Klasse CpplDebug.
    Aus Kompatibilitätsgründen bleibt die global Klasse PPLDebug
    erhalten, ist aber ein Alias auf Cppl6Core.
  - CpplFile: Alle Filepointer sind jetzt 64 Bit, wodurch nun
    Dateien > 4 GB unterstützt werden
  - MD5-Funktionen werden nun immer im Namespace ppl6
    einkompiliert
  - Funktionen ppl_sinus und ppl_cosinus umbenannt in sinus1024
    und cosinus1024
  - Kompressionsfunktionen sind nun in der Klasse CpplCompression
    zusammengefasst
  - ThreadKlasse CpplThread wurde runderneuert und dient jetzt als
    Basisklasse für alle Threads
  - Neue Klasse CpplThreadPool zum logischen Zusammenfassen von
    Threads
  - Standard configure-Script unter Unix, erstellt mit autoconf
  
  - Merge aus 5.1.3:
    - Neue Klasse CpplArray zur Verwaltung von Arrays
    - Neue Klasse CpplMutex als Wrapper für "CriticalSections"
      unter Windows, bzw. "pthread_mutex" unter Unix.

  - Merge aus 5.1.4:
    - Neue compat-Funktionen strndup und strncmp aus PPL 5.1.4
    - Bug in ppl_trim beseitigt, der auftrat, wenn am Anfang der Zeile
      Spaces geloescht wurden
    - CpplTok verwendet nun CpplArray zum Speichern der Tokens.
    - Mit CpplTok::Get kann nun gezielt auf bestimmte Spalten des Ergebnisses
      zugegriffen werden.
    - CpplFile::Puts und CpplMemFile::Puts nutzen nun vasprintf
    - Umstellung von ppldd von unsigned long auf unsigned int
    - Neue Klasse CpplSocket fuer TCP-Connects, inklusive Windows-Port
      aus 5.1.5

  - Merge aus 5.1.5:
    - Bugfix in CpplDebug bezueglich der Buffergroessen. Es gibt jetzt
      keine Limitierungen mehr fuer die Laenge der Daten (vorher 1024
      Bytes);

*/
