
Änderungen:
===========
(Hinweis: Die Namenskürzel sind unten erläutert!)

ToDo:
- Erzeugung der Serververzeichnisse optionalisieren.
- mail.historywithUSER einführen(?)

ToDo Later:
- NNTP: 'HDR' & 'OVER' nach {RFC3977}
- IMAP-Suche: charset des MIME-Bodyparts berücksichtigen.

Vor dem Einspielen dieser Hamster-Version über eine ältere (<2.1.0.11)
Version zuerst auf die letzte Stable 2.1.0.11 updaten und deren
fehlerfreie Lauffähigkeit sicherstellen.


V2.1.0.1548 (nightly snapshot {AP2})
- [NNTP - Server]
   - Bugfix: [XHDR] Bei fehlendem Parameter sendet der Hamster Resonse 501
             anstatt die Verbindung zu beenden.
V2.1.0.1547 (nightly snapshot {AP2})
- [NNTP - Server]
   - Bugfix: "AUTHINFO *" Response-Codes gemaess RFC 4643 korrigiert
             Response-Code bei "Overload" von 502 auf 400 geaendert
   - Bugfix: [XHDR] Bei Artikeln ohne den Header gibt der Hamster kein
      '(none)' mehr zurück.
   - Bugfix: [XHDR] entfaltet Header falls noetig.
- News-/Mail-Vorschau:
   - HTTPS-Links werden nun erkannt und als solche angeboten.
V2.1.0.1543 - 1546 (nightly snapshot)
- Changes: [Hilfe] {HR}
   Umstellung des Hilfe-Systems auf chm-Format.
V2.1.0.1542 (nightly snapshot {AP2})
- Bugfix Kontenübersicht (Lokale Server->News/Mail-Verzeichnise)
   Eventuell fehlten Einträge, wenn der Header eines Artikels die länge von
   80 Zeilen überschritt. Jetzt wird immer der vollständige Header gelesen.
- Statuszeile/Icon-Hint-Text
   In der Statusmeldung kann eine neue Text-Variable verwendet werden:
   %CT   'Custom Text' Zeigt einen individuellen Text an. Dieser kann über
         hs2 Funktion setXText( <text> ) geändert werden.
- [HS2] - neue Skriptfunktionen
   setXBottomlineFormat( <String> )
     Setzt den Format-String aus dem die Statuszeile im Hamster Hauptfenster
     erzeugt wird. Format siehe: Hilfe Hamster.ini BottomlineFormat.
     Ein leerer Text lädt erneut den default-Wert.
   setXHintFormat( <String> )
     Setzt den Format-String aus dem der Hinweistext vom Hamster-Icon
     erzeugt wird. Format siehe: Hilfe Hamster.ini HintFormat.
     Ein leerer Text lädt erneut den default-Wert.
   <String> setXText( <String> )
     Setzt einen Text, der in der Statuszeile / dem Icon-Hinweistext in der
     Hamster in der Variablen %CT angezeigt. Rückgabewert ist der vorherige
     Text. Mit einem leeren Text läst sich der Wert löschen.
   <headerSize> ArtLoadHeader( <msg>, <filename> )
     Lädt den Header einer E-Mail aus der Textdatei <filename> in einen zuvor
     durch ArtAlloc angelegten Message-Puffer <msg>
     Rückgabewert: >=0 OK (= Headergröße in Bytes)
                   -1 = Datei nicht gefunden, -2 = Fehler
- [HS2] - changes
   <String> ClipRead( [<encoding>] ) / ClipWrite( <String>, [<encoding>] )
     Die Funktionen haben einen optionalen Parameter <encoding> bekommen,
     der die Kodierung des gelesenen/zu speichernden Textes angiebt:
     0 (default) : Lokaler 8-Bit Zeichensatz
     1 : UTF-8             2 : UTF-16LE (WideString)
V2.1.0.1541 (nightly snapshot {AP2})
- Changes: Log:
   Zusätzliche Meldungen falls beim Zugriff auf die Sprachdatei
   Fehler auftreten.
V2.1.0.1540 (nightly snapshot {AP2})
- Changes: [NNTP]
   Nachladen von Artikeln per MID: Der Vorgang wird nicht mehr unterbrochen,
   wenn ein Artikel wegen fehlender Rechte (502) nicht geliefert wird.
- Changes: [POP3-Client] {AP2}
   Falls beim abrufen einer E-Mail die UIDL des externen Servers bekannt ist,
   wird diese nun im optionalen 'Received'-Header in dessen 'ID'-Feld
   gespeichert.
- [HS2]
   - New: UTF8Delete( <UTF8-String>, <nStart>, <nAnzahl> ) {AP2}
      Liefert eine kopie von <UTF8-String>, bei der jedoch beginnend ab
      Zeichen <nStart>, bis zu <nAnzahl> Zeichen geloescht wurden.
      Die UTF8-Kodierung wird beachtet.
- Bugfix: [Mailhistory][POP3-Client] {AP2}
   Obwohl der Benutzer aenderungen am Mail-Killfile bestaetigt hat, wurden
   diese nicht sofort abgespeichert (MHistory.dat). Falls das Fenster offen
   blieb, konnte es infolge eines Absturzes zum verlust der Eintraege kommen.

V2.1.0.1539 (nightly snapshot {AP2})
- [HS2] changes:
   - EventMultipleWait( <Timeout>, <EventHandle1> [, ..., <EventHandle63>] )
      Die Funktion erlaubt es jetzt auf bis zu 63 Events zu warten {AP2}
   - Charsetconvert() und andere: Ungültige UTF-8-Sequenzen werden unverändert
     zurückgegeben. {LH/AP2}
- Bugfix: [MailFilter] {AP2}
   Beim "Header"-Pseudoheader bleibt der Zeilenumbruch zwischen den
   einzelnen Headern jetzt erhalten.
- Changes: [NNTP]
   Der Newsgroups: Header darf jetzt bei einem X-Post zwischen den Gruppen-
   Namen Leerzeichen enthalten (RFC 5536) {AP2}
- Bugfix: [Automatische Aktionen][IMAP] {AP2}
   Wenn eine neue E-Mail in einem Unterordner eines Kontos abgelegt wurde,
   wurde die Kontospezifische Aktion nicht berücksichtigt.

V2.1.0.1538 (nightly snapshot {AP2})
- [HS2]
   - Change: <string> charsetconvert( Text,  ZeichensatzFrom,  ZeichensatzTo)
      als Zeichensatz wird nun auch "UTF-16" unterstuetzt.
   - Change: UTF-7 wird jetzt für den Zeichenbereich bis u+10FFFF
      unterstuetzt (RFC 2152). {AP2}
   - neue Scriptfunktionen {AP2}:
    <ucs-4string>UTF7toUCS4(utf7string) / <utf16string>UTF7toUTF16(utf7string)
      Dekodiert einen UTF-7 String in einen 4-Byte WideString / UTF-16 String
        Die Funktion UTF7toUCS2() ist somit obsolet.
    <string> HamCharsetPath()
      liefert den Pfad zum Charset-Verzeichnis (entspricht:
      Hamster.ini; [Directories]; 'Charsets') {AP2}
   - Bugfix: Der aufruf von quit ohne Parameter innerhalb einer sub führte
      zu einer falschen Fehlermeldung. {AP2}
   - Bugfix: decodeQP() ein Softlinebreak ("=CRLF") wurde
      unvollständig entfernt. {AP2}
- Change:
   - Dialoge merken sich - bis zum Programmende den zuletzt aktiven Tab. {AP2}
   - [Automatische Aktionen] Der Skript-Dialog wandelt beim Aufruf des Editors
     den Pfad zur Datei nicht mehr in kleinbuchstaben um. {AP2}
   - [nntp] Der Hamster legt nun keine Jobs mehr für
     deaktivierte Server an. {AP2}

V2.1.0.1537 (nightly snapshot {AP2})
- Bugfix: [Filter] Wurde per #!include Anweisung mehrfach das selbe Datei ein-
   gebunden, wurde diese beim Entfernen abgelaufener Filterzeilen (Expire)
   falsch gespeichert. {AP2}
- Bugfix: [Filter] Eine schreibgeschützte Filter-Datei führte beim Entfernen
   abgelaufener Filterzeilen (Expire) zum Abbruch der Initialisierung {AP2}
- Bugfix: [RAS] Die Skriptfunktionen waren unbrauchbar. {AP2}
- Bugfix: [Config] Einige Datei- / Verzeichnis-Auswahldialoge hatten das
   "Aktuelle Verzeichnis" des Hamsters permanent verändert. {AP2}
   Hinweis: Solange die Dialoge aktiv sind, setzen diese nach wie vor das
            "Aktuelle Verzeichnis" auf das jeweils ausgewählte Verzeichnis.
            Das kann Auswirkungen auf, im Hintergrund laufende, Skripte haben.

V2.1.0.1536 (nightly snapshot {AP2})
- Bugfix: [Filter][HS2] Beim dekodieren gefalteter Header wurde die Faltung
   unter Umständen (ASCII Text) nicht entfernt. {AP2}
- Change: [Client][POP3][SMTP][NNTP]
   Die Portvorgaben in den Einstellungen wurden erweitert. {AP2}
- Change: [hamster_de.dat] Update SSL Texte {AP2}

V2.1.0.1535 (nightly snapshot {AP2})
- Changes: [HS2] HamSendMail und HamSendMailAuth übernimmt jetzt auch Port,
   FromSelect und ToSelect aus der Konfiguration, falls die Parameter fehlen.
   Die Funktionen lesen 'FromSelect' bzw. 'ToSelect' dabei aus dem Abschnitt
   [SMTP] der Server.ini aus. {AP2}
- Change: [HS2] Bei HamFetchMail wurde die Parameter-Interpretation verein-
   heitlicht. {AP2}
   Anmerkung: Durch Abgeben eines Leer-Strings ("") wird die Menü-Vorgabe
      (Server.ini) bei HamSendMail[Auth] und HamFetchMail überschrieben bzw.
      gelöscht.
      Da bei es bei den entsprechenden OLE-Funktionen
      (ControlRunFetchMail[TLS] ControlRunSendMail[Auth][TLS]) nicht möglich
      ist, einen Parameter wegzulassen, interpretieren diese den Wert "?"
      als Aufforderung den Parameter aus der Server.ini auszulesen.
- Change: [HS2] Die Funktion HamExePath wandelt den Pfad nicht mehr in
   Großbuchstaben um. {AP2}
- Bugfix: [config] Es konnte zur Verzögerung des Hamster-Starts kommen, da
   der Hamster trotz enable.ras.functions=0 versucht hat, die
   rasapi32.dll zu laden. rasapi32.dll {AP2}

V2.1.0.1534 (nightly snapshot {AP2})
- Bugfix: [IMAP]: Bei einer neuen E-Mail für die INBOX wurden die Mails.dat
      Status.dat nicht aktualisiert, wenn die INBOX dabei in einerm Client
      geöffnet war. {AP2}

V2.1.0.1533 (nightly snapshot {AP2})
- Bugfix: Behebung des Darstellungsfehlers der Tabheader im Hauptfensters
          unter 64Bit Windows versionen {Florent Ouchet}
          <http://qc.embarcadero.com/wc/qcmain.aspx?d=19859>
- Bugfix: Der Hamster hat aktuellere OpenSSL-Funktionen vorausgesetzt als
          unbedingt nötig. {AP2}

V2.1.0.1532 (nightly snapshot {AP2})
- [IMAP]
   - New: NAMESPACE (RFC 2342) {AP2}
      Der Hamster meldet die User-Ordner als 'personal Namespace'
- Log: Logzeilen während des Hamster-Starts wieder eingeschränkt. {AP2}
- [HS2]
   - Change: Return() ohne Wert und sub ohne return liefert wieder 0 als
      Rückgabe. {AP2}
   - New: UTF8Len( <UTF8-String> ) {AP2}
      Liefert die Anzahl der Zeichen im Parameter zurück. Dabei wird die
      UTF8-Kodierung beachtet.
   - New: UTF8Copy( <UTF8-String>, <nStart>, <nAnzahl> ) {AP2}
      Liefert, beginnend ab Zeichen <nStart>, bis zu <nAnzahl> Zeichen aus
      dem Parameter <UTF8-String> zurück. Die UTF8-Kodierung wird beachtet.

V2.1.0.1531 (nightly snapshot {AP2})
- Change: Über den Eintrag "enable.ras.functions" in der Hamster.ini
     (Sektion: [Setup]) lässt sich das Laden der rasapi32.dll unterbinden.
     (1=Dll wird geladen (default)/0=Dll wird nicht geladen - eine Änderung
     wird erst nach einem Neustart des Hamsters wirksam)
     Hinweis: Alle Ras*-Skriptfunktionen werden dadurch unbrauchbar.

V2.1.0.1530 (nightly snapshot {AP2})
- Log: Zusätzliche Logzeilen während des Hamster-Starts. {AP2}

V2.1.0.1529 (nightly snapshot {AP2})

- [HS2]
   - Bugfix: Aufruf von Funktionen (sub()): Enthielt die Parameterklammer
      ausschließlich Leerzeichen, wurde die Funktion fälschlich als Type mit
      einem Parameter erkannt. {AP2}
      Nebenwirkung: "Return( )" liefert nun nicht mehr 0 als Funktions-
       ergebnis, sondern <undefiniert>.
   - Bugfix : DecodeMIMEHeaderString bzw. -ToUTF8 arbeiteten ggf. fehlerhaft,
     wenn "="-Zeichen auserhalb eines MIME-Wortes vorkamen. {AP2}
   - New: isValid( <variable> ) {AP2}
      Überprüft, ob die Variable einen gültigen Wert enthält.
      Ja => 1 / Nein => 0
   - New: <fileNamePath> = FileGetTempName( <strTempPath>, <strPrefix> ) {AP2}
      Erzeugt eine neue leere temporäre Datei im Verzeichnis <strTempPath>.
      Im optionalen Parameter <strPrefix> können bis zu 3 Zeichen angegeben,
      mit denen der Dateiname beginnt.
      Rückgabewert ist der Dateiname inklusive Dateipfad der Datei.
   - New: <count> ArtGetHeaderCount( <Artikel> ) {AP2}
      Gibt die Anzahl der Header im Artikel-Objekt zurück.
   - New: <strHeader> =ArtGetHeaderNum( <Artikel>, <index>, <separate> )
      Gibt den <index>-ten Header im Artikel-Objekt zurück.
      Besteht der Header aus mehreren Zeilen, steuert der optionale Parameter
      <separate>, ob die Zeilen durch ein Leerzeichen (<separate> = 0) oder
      im Originalzustand (<separate> = 1) durch einen Zeilenumbruch getrennt
      zurückgegeben werden.
   - Change: runscript( <Skriptname>, <Parameter>, <warten>, <result> ) {AP2}
      Wird auf das Ende des Skripts gewartet (<warten>=TRUE) und im optionalen
      4. Paramer eine Variable angegeben, wird in dieser der Rüclgabewert des
      Skripts (Quit(<wert>) / Return(<wert>) ) gespeichert. Wird kein Wert
      zurückgegeben, ist die Variable undefiniert.
- Change: (NewsFilter) Performance Steigerung durch zwischenspeichern der
   dekodierten XOVER-Header "From:" und "Subject:" {AP2}
- Change: (MailFilter) {AP2}
   - MIME-Dekodierung ('~') bei "Header"-Pseudoheader erlaubt
   - Experimentell: '~' bei den Pseudoheadern "Top:" und "Toponly:" entfernt
     ggf. die Transportkodierung (Base64/Quoted-Printable) des Bodys.
     (Funktioniert bis auf weiteres nicht bei Multipart-Mails)
- Log: Zusätzliche Logzeilen während des Hamster-Starts. {AP2}

V2.1.0.1528 (nightly snapshot {AP2})

- Change: [OpenSSL] {AP2}
   - Verbesserung der Thread-Sicherheit

V2.1.0.1527 (nightly snapshot {AP2})

- [NNTP-Server]
   Reduzierung des Recoursenverbrauchs beim NEWGROUPS-Kommando. {AP2}
- Change: [OpenSSL]
   Anpassung der Flags für OpenSSL Version 1.0.1b  {AP2}

V2.1.0.1526 (nightly snapshot {AP2})

- [IMAP][SSL] {AP2}
   - Bugfix: SASL Auth Plain wurde immer offeriert, obwohl es nur während
     einer SSL-Verbindung erlaubt ist.
   - Change: SASL-Mechanismen sind per GUI konfigurierbar.

V2.1.0.1525 (nightly snapshot {AP2})

- [HSC] Funktion: Execute() {AP2}
   - Bugfix: Teilweise wurde bei <wait>=FALSE das auszuführenden Programm
     vorzeitig beendet.
   - Change:
    Der Parameter <wait> kann nun auch einen nummerischen Wert annehmen:
     <wait> = 0 / FALSE      : wartet nicht auf das Programmende.
     <wait> = 1 / TRUE       : wartet bis zum Programmende.
     <wait> = 2 - 2147483647 : wartet maximal <wait> ms auf das Programmende.

V2.1.0.1524 (nightly snapshot {AP2})

- New: [IMAP][SSL] {AP2}
   Über den Eintrag "local.imap.sasl" in der Hamster.ini (Sektion: [Setup])
     lassen sich jetzt auch die SASL-Mechanismen des IMAP-Servers festlegen.
     default=CRAM-SHA1 CRAM-MD5 DIGEST-MD5 PLAIN LOGIN
   Hinweis: SASL Auth PLAIN ist nur während einer SSL-Verbindung aktiv.
   Hinweis: "IMAP.SASL.LOGINDisable=1" (=default) hat Vorrang.
            Bei manueller Änderung der Hamster.ini müssen ggf. beide
            Konfigurationen angepasst werden.
- Change: [OpenSSL] {AP2}
   - Anpassung für OpenSSL Version 1.0 / 1.0.1
   - Erweiterung der Optionen für TLS1.1 und TLS1.2
     (Bei den Skript-Befehlen HamFetchMail, HamSendMail und HamSendMailAuth
      wurde der Parameter <SSLMode> erweitert, um den jeweiligen SSL-Type
      zu erzwingen. Dafür ist der bisherige <SSLMode> um einen der folgenden
      Werte zu erhöhen:
        0 (= default)   : Auto-Mode
        0x100 (= 1*256) : erzwinge SSL-Type Version SSL3
        0x200 (= 2*256) : erzwinge SSL-Type Version TLS1.0
        0x300 (= 3*256) : erzwinge SSL-Type Version TLS1.1
        0x400 (= 4*256) : erzwinge SSL-Type Version TLS1.2)
     (Um die Verwendung des jeweiligen SSL-Types generell zu verhindern,
      kann man in der Hamster.ini, Sektion [SSL] die Optionen UseTLSv1_1=0
      bzw. UseTLSv1_2=0 setzen.)
   - Verbesserung der Thread-Sicherheit
- Bugfix: [config] {AP2}
   - Lesender und schreibender Zugriff auf die Hamster.ini erfolgt nun
     thread-sicher
- Bugfix: [server]
   - Es kam zu Verarbeitungsfehlern, wenn einzelne Zeilen in mehreren
     Datenpaketen übertragen wurden. {AP2}
- Change: [IMAP] {AP2}
   - Der Status ('status.dat') wird nun auch nach einem COPY gesichert.


V2.1.0.1523 (nightly snapshot {AP2})

- Bugfix: [IMAP][Server]
   Während des FETCH-Kommandos wurde das Mailbox-Objekt freigegeben. {AP2}

V2.1.0.1522 (nightly snapshot {AP2})

- Change: [SSL]
   - Per default abgeschalteter 'vulnerability workaround'
     (SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS) reaktiviert. {AP2}
- Change: [IMAP][Server][SSL]
   - Wartete der MUA beim Beenden der Verbindung nicht auf eine Antwort,
     loggte der Hamster eine Fehlermeldung. Diese wird nun unterdrückt. {AP2}
- [IMAP][Server]
   - Bugfix: Beim Auftreten von unerwarteten Exceptions, wurde die
     Verbindung nicht ordentlich gelöst. {AP2}
   - Bugfix: Bei APPEND wurde das /Recent-Flag nicht, wie in RFC3501
     verlangt, in jedem Fall gesetzt. {AP2}
   - Change: Schlägt das speichern der Statusdatei fehl, wird jetzt
     lediglich eine Fehlermeldung geloggt. {AP2}

V2.1.0.1521 (nightly snapshot {AP2})

- Bugfix: [Aktion:Vermischtes/Suche nach unbekannter Message-ID]
    Die Option "Auf das Ende des Programms bzw. der Skripteilen warten"
    war ohne Funktion. {AP2}
- Bugfix: [Client][POP3][SMTP]
    Beim Anlegen neuer Server kam es zu einer Fehlerhaften Konfiguration,
    wenn das Server-Verzeichnis nicht erzeugt werden konnte. {AP2}
- Bugfix: [NNTP] Ein temporär deaktivierter Server lies sich nur durch
    Neustart des Hamsters wieder aktivieren. {AP2}
- Bugfix: Während des Programmstarts wurde das Event "evtHamster.IsIdle"
    nicht gesetzt {AP2}
- Change: [HSC]
    Die HS2-Funktion "Execute()" hat zwei neue optionale Parameter, in denen
    der Interpreter eine HS2-Variable erwartet, um darin die Konsolenausgabe
    des gestarteten Programms zu speichern (<wait> MUSS TRUE sein):
    execute( [...], <wait>, <exitcode>, <stringOutput>, <stringError>)
    Wenn <stringError> verwendet wird, enthält die Variable die Fehler-
    Ausgaben, und <stringOutput>-Variable die Standard-Ausgaben. Andernfalls
    nimmt die <stringOutput>-Variable beide Ausgaben auf. {AP2}
- New: [Killfile/news]
    Einzelne Felder lassen sich, abhängig von zu konfigurierenden Regeln
    (Reg-Exp) farbig hervorheben [STRG-H]/Menü:Einträge->Highlight. {AP2}

V2.1.0.1520 (nightly snapshot {AP2})

- Experimentelle Erweiterung der HS2-Funktion "Execute()"
    rückgängig gemacht {AP2}

V2.1.0.1519 (nightly snapshot {AP2})

- New: [IMAP]
   Das IMAP-Kommando EXAMINE kann deaktiviert werden. Dazu in der Hamster.ini
   [Setup] local.imap.disable.EXAMINE=1
   setzen. {AP2}

V2.1.0.1518 (nightly snapshot {AP2})

 zusätzliche Log-Ausgaben in dEditDir

V2.1.0.1517 (nightly snapshot {AP2})

- New: [account] Einem lokaler User kann nun als Empfänger für alle an eine
   E-Mail Adressen einer bestimmten Domain ('Catch-All') eingerichtet werden.
   Dazu muss als anstelle einer E-Mail Adresse ein '@' gefolgt von der Domain
   (FQDN) eingetragen werden (z.B.: @example.com). {AP2}
   Hinweis: Alias-Regeln behalten den Vorrang.
   Hinweis: Wie bisher wird eine E-Mail dem Account zugeordnet, bei dem
      zuerst ein passender Eintrag für die Empfängeradresse gefunden wird.
- Changes: [IMAP] Beschleunigung des IMAP-Copy-Befehls und des Neuaufbaus der
   der Mails.dat durch verzögertes Speichern des Indexes. {AP2}
- [GUI]
   - Bugfix: "Newsgruppen - Zurücksetzen" löschte die Artikel aus der
     History aber nicht aus dem Datenfile, wenn die Haltedauer
     auf 0 (ewig) gesetzt war {AP2}
   - News-/Mail-Vorschau: Verschieben einer E-Mail in  einen anderen Ordner
     (Papierkorb) schlug fehl, wenn dieser bereits eine E-Mail gleichen
     Namens enthielt. {AP2}
- [Automatische Aktionen] Bugfix: Das Löschen von Dateien im Papierkorb nach
   <n> Tagen berücksichtigte nicht das Löschdatum sondern das Erstelldatum
   der Datei. {AP2}
- [Aktionen] Bugfix: "Warten auf Programmende" funktionierte nicht bei
   Konsolen-Programmen (wie z.Bsp.: Only_KN.exe) {AP2}
- [Performance] Durch eine unnötige Debug-Funktion kam es zum
   Performanceeinbruch beim Speichern von Artikeln {AP2}
- [NNTP-Client]
   - New: Workaround (2 Nachladeversuche) für Server, die Artikel nach dem
     XOVER verzögert bereitstellen. {AP2}
   - Bugfix: Artikel mit nur einer Body-Zeile wurden nicht gespeichert. {AP2}
   - Bugfix: Für über die GetMids.txt nachgeladene Artikel, wurde die
     news.in.nntp Aktion nicht aufgerufen. {AP2}
   - Bugfix: Für über die GetMids.txt nachgeladene Artikel, wurde der
     PATH Header nicht erweitert. {AP2}
- Bugfix: [Log] Die Optionen Hamster.ini [Setup] logfilter.ThreadByKey bzw.
   logfilter.ThreadByText waren ohne Funktion {AP2}
- [NNTP - Server]
   - New: Der XOVER ist nun erweiterbar {TGL/RW}
        ({AP2} - LIST OVERVIEW.FMT response erweitert)
     Hamster.ini: [Setup]
     local.nntp.XOVERExtraFields= Header1, Header2
   - New: "AUTHINFO SIMPLE" {RFC2980 & INN-Variante} wird akzeptiert.{AP2}
   - New: "CAPABILITY" {RFC3977} wird unterstützt.{AP2}
   - Bugfix: Über eine SSL-Verbindung war die Benutzung von "nntpdefault"
     nicht möglich. {AP2}
   - Bugfix: "LIST"/"LIST ACTIVE" berücksichtigte nicht die individuellen
     post-rechte (ro/rw) des Users. {AP2}
   - Bugfix: "LIST"/"LIST ACTIVE" lieferte ohne Anmeldung trotz gesetztem
     local.List.require.auth=0 eine leere Gruppenliste. {AP2}
   - Bugfix: Bei gesetztem 'local.news.xpatDecodeHeaderBeforeSearch=1'
     lieferte der Hamster den dekodierten Header aus. {AP2}
- New: [SMTP/NNTP-Client] Versendet der Hamster Daten Zeilenweise, werden
   diese jetzt Blockweise übertragen. Die Anzahl der gesammelten Zeilen kann
    in der Hamster.ini eingestellt werden (default=10 Zeilen / aus=0) {AP2}
    [Setup]
    nntp.client.collect.sendlines=10
    smtp.client.collect.sendlines=10
- New: [SMTP/NNTP-Client] Wartezeit in msec (default=100) bei
   gescheitertem Sendeversuch. {AP2}
    Hamster.ini:  [Setup]
    extern.timewait.sendfails=100
- New: [NNTP/SMTP/POP3/IMAP-Server] Versendet der Hamster Daten, werden diese
   jetzt Blockweise übertragen. Die Anzahl der gecacheten Zeilen kann in der
   Hamster.ini eingestellt werden (default=10 Zeilen / aus=0) {AP2}
    [Setup]
    nntp.server.collect.sendlines=10
    (dito smtp. / pop3. / imap.)
- Change: [RegEx-Engine]
   - Upgrade auf die Version 7.9 (siehe PCRE_LICENCE.txt /
     <http://www.pcre.org/>)
- New/Change: (Filter) Nebenfelder ('@') konnten bislang bei E-Mail
   garnicht, bzw. bei News nur dann dekodiert werden, wenn das Hauptfeld
   dekodiert wurde. Jetzt kann und muss diese Option durch die optionale
   Tilde ('~') vor dem Nebenfeld festgelegt werden. {AP2}
    Syntax-Übersicht MailFilter:
     MNebenfeld        =  [ "+" / "-" ] "@" [ "~" ] MEinzelfeld ":" Muster
    Syntax-Übersicht NewsFilter:
     ScoreMuster     = ["+"/"-"] [ "@" [ "~" ] ScoreFeld ":" ] Suchmuster
- New: (MailFilter) neue Filterfunktionen: {AP2}
  - appendheader(<headername>:<Text>) hängt <Text> an den Header an.
- New: (MailFilter) bei Filterfunktionen mit Parameter kann dieser über einen
   "benannten Subpattern" eines Regulären Ausdrucks gesetzt werden. {AP2}
   Bsp.: add(IMAPkonto/<localpart>) to:{<(?P<localpart>\S+)@example.com>}
    Speichert beispielsweise eine E-Mail an <mustermann@example.com> 
    (TO-Header) im Ordner "mustermann" vom IMAP-Konto "IMAPkonto".
    Achtung: Es findet keine Plausibilitätsprüfung des Ergebnisses statt!
- [HS2]
   - neue Scriptfunktionen {AP2}:
    <string> HamMainWindowGetLog( nTab [, logID] )
      Liefert den (gefilterten) Inhalt der Hamster Log-Fenster.
       nTab = 0: Thread-Tab   / nTab = 1: Job-Tab / nTab = 2: Protokoll-Tab
       nTab = 3: Warn/Err-Tab / nTab = 4: Protokoll-Tab Einzel-Thread
      Bei nTab 2-4 kann mit logID auf einzelne IDs gefiltert werden.
       LOGID_ERROR = 0x8000; / LOGID_WARN  = 0x4000; / LOGID_SYSTEM= 0x0800;
       LOGID_USER3 = 0x0400; / LOGID_USER2 = 0x0200; / LOGID_USER1 = 0x0100;
       LOGID_INFO  = 0x0080; / LOGID_DETAIL= 0x0040; / LOGID_DEBUG = 0x0008;
       LOGID_STATUS = 0x0004;
      Die Zahlen können addiert werden. Fehlt die Angabe, werden alle
      IDs geliefert.
    <utf8string> DecodeToUTF8(Text, Zeichensatz)
      Die Funktion gibt den vom übergebenen Zeichensatz nach UTF-8
      konvertierten Text zurück.
    <utf8string> DecodeMimeHeaderToUTF8(Text [, Zeichensatz])
      Liefert die dekodierte Version einer gemäß MIME base64 oder Quoted
      Printable kodierten Zeichenkette zurück. Die Variable <charset>
      liefert, falls vorhanden, den Zeichensatz zurück mit dem der String
      kodiert war.
      Der Rückgabewert ist UTF-8 kodiert.
      Der Zeichensatz, in dem der ursprüngliche Text kodiert war, wird in
      der Variablen des optionalen zweiten Parameters, gespeichert.
    <ucs-2string>UTF7toUCS2(utf7string) / <ucs-4string>UTF8toUCS4(utf8string)
      Dekodiert einen UTF-7 / UTF-8 String in einen 2-Byte bzw.
      4-Byte WideString.
    <string> charsetconvert( Text,  ZeichensatzFrom,  ZeichensatzTo)
      Ändert die Kodierung des Textes von ZeichensatzFrom nach
      ZeichensatzTo. Default-Wert ist jeweils der Standardzeichensatz.
   - Change: UTF-7 (De-)Kodierung:
      UTF-7 Sonderfälle gemäß RFC2152 werden nun berücksichtigt. {AP2}
   - Change: DecodeToLocalCharset(Text, Zeichensatz)
      Die Funktion kann jetzt auch UCS-2/UCS-4 Strings umwandeln. {AP2}
   - Change: encodeQP( <string>, <forHeader> ) {AP2}
      Wird der optionalen Parameter <forHeader> (default = 0) auf "1"
      gesetzt, kodiert die Funktion einige zusätzliche Zeichen (' '->'_').
   - HamFetchMail, HamSendMail und HamSendMailAuth
      - Change: Der default-Wert für die Parameter <SSLMode>, <SSLVerify> und
      <SSLCaFile> wird aus der Server.ini (wenn vorhanden) ausgelesen. {AP2}
      - New: Über den Parameter <SSLMode> läßt sich der SSL-Type festlegen.
      dafür erhöht sich der bisherige <SSLMode> um einen der folgenden Werte:
        0 (= default)   : Auto-Mode (wie bisher!)
        0x100 (= 1*256) : erzwinge SSL-Type Version SSL3
        0x200 (= 2*256) : erzwinge SSL-Type Version TLS1.0
   - Bugfix: DLLCall() {AP2}
      - Der Aufruf von Funktionen mit mereren Parametern und ohne Rückgabe-
        wert ('void') war nicht möglich.
      - Der Fehlerstatus für die Funktion DLLLastError() wurde nicht
        korrekt gesetzt.
      - Die Angabe der falschen Parameteranzahl konnte zu Fehlern
        im Programmablauf führen.
   - Bugfix: getEnvironment() generierte eine Exception, wenn die
      angeforderte Umgebungsvariable nicht existierte. {AP2}
   - HamScoreTest() {AP2}
      - Bugfix: Der Rückgabeparameter <matchlog> lieferte für <scope>=0 ein
         unvollständiges Ergebnis.
- [HS2/OLE]
   - Bugfix: HamChangePassword()/ControlChangePassword() war bei einem neuen
      User ohne Funktion {AP2}
   - Change: HamScoreTest( <scope> = 0 ) {AP2} / NewsScoreTest() {HR}
      Das Ergebnis entspricht nun dem realen Filterergebnis.
      Das heißt, der After-Load-Score wird nur berücksichtigt, wenn der
      Overview-Score-Wert größer/gleich 0 ist.
   - Bugfix: HamScoreTest() / NewsScoreTest() {AP2}
      Der Rückgabeparameter <matchlog> lieferte ggf. eine zusätzliche
      Leerzeile
- Change: (internal)
   - Die Meldungen über das Cachen der Zeichenübersetzungstabellen werden
      von Log-Level "System" nach "Debug" Verlegt. {HR/WJ}
   - Die Meldung über eine fehlende Übersetzungstabellen-Datei wird von
      Log-Level "System" nach "Warnung" Verlegt.
      Über den die Option [Setup] Ignore.Missing.Translationtables kann
      die Warnung für bestimmte Zeichensätze unterdrückt werden. {HR/AP2}
      default: Ignore.Missing.Translationtables=ASCII,US-ASCII
      GUI: Grundeinstellungen; Verschiedenes;
           "Bei fehlenden Tabellen nicht warnen für:"
- Change: Hauptfenster: {AP2}
   - Die Option der Hamster.ini: [main] ColoredTabs hat eine zusätzliche
     Einstellung ('2' = 'Farblos (einfache Darstellung)') bekommen.
     (GUI: Grundeinstellungen; Optik; Darstellung der Tabheader)
     (Diese Einstellung behebt Fehler in der Darstellung der Tabheader des
     Hauptfensters unter Windows Vista/Windows 7)
   - HS2-Shell: Breite des Labels an die Textgröße angepasst. {AP2}
   - Korrektur des Anzeigefehlers (Zeilenhöhe bei geänderter Schriftgröße)
     der Log-Listen im Hauptfenster. {AP2}
   - (Intern): Threadsicherheit beim Zugriff auf Zählervariablen
     hergestellt. {AP2}
- Change: [Client]
   über die jeweilige Server.ini kann für eine SSL-Verbindung der SSL-Type
   vorgegeben werden. Dafür wird "SSLMethod" in der jeweiligen Protokoll-
   Sektion [POP3]/[SMTP]/[NNTP] auf einen der folgenden Werte gesetzt: {AP2}
      SSLMethod=0  - (= default) Auto-Mode (wie bisher!)
      SSLMethod=1  - erzwinge SSL-Type Version SSL3
      SSLMethod=2  - erzwinge SSL-Type Version TLS1.0
   (GUI: Servereinstellungen; SSL-Einstellungen; SSL-Methode)
- Change: [Server]
   über die Hamster.ini kann für eine SSL-Verbindung des jeweiligen Servers
   der SSL-Type vorgegeben werden. {AP2}
    [Setup] 
    local.NNTP.Server.SSLMethod=<method>
    local.POP3.Server.SSLMethod=<method>
    local.IMAP.Server.SSLMethod=<method>
    local.SMTP.Server.SSLMethod=<method>
   <method> kann einen der folgenden Werte annehmen:
      0  - (= default) Auto-Mode (wie bisher!)
      1  - erzwinge SSL-Type Version SSL3
      2  - erzwinge SSL-Type Version TLS1.0
   (GUI: Lokale Server; <Protokoll>; SSL-Einstellungen; SSL-Methode)
- Change: [Server]
   Begrenzung der Datenmenge (in Bytes), die in einem Rutsch gesendet werden
   darf. Der Default-Wert wurde auf 0 (=keine Begrenzung) geändert. {AP2}
    Hamster.ini [Setup] local.limit.bytessend=1024
- Change: [IMAP - Filter]
   - Zielordner einer Filterregel werden falls nötig automatisch angelegt.
     Mit der Pref: Hamster.ini [Setup]  IMAP.ForceFolders=0
     kann das alte Verhalten wieder hergestellt werden. {AP2}
   - Ein IMAP-Konto kann jetzt über mehrere 'ADD'-Filter mehrere Kopien
     einer E-Mail erhalten, vorausgesetzt als Ziele sind verschiedene
     Folder angegeben. {AP2}
   - Der 'DEL'-Filter löscht nur das Ziel mit dem angegebenen Folder.
     Der pseudo-Folder '/*' löscht alle Ziele des Kontos. {AP2}
- Bugfix: [POP3-Client]
   - Bei Verwendung des Mailfilters: 'Log()' blieb das deaktivieren von
     "Bereits geladene E-Mails kein zweites Mal laden" 'mail.filterbyuidl'
     ohne Wirkung. {AP2}
   - Bei mehrere Konten auf einem Server wurden alle E-Mail gleich
     behandelt. Duplikate (UIDL) in verschiedenen Konten konnten nicht
     heruntergeladen werden, da sie bereits in der History
     eingetragen waren. {AP2}
     Neu: Nach setzen von: Hamster.ini [Setup] mail.historywithalias=1
          arbeitet die History 'Alias'-spezifisch. Dazu muss der
          Server-Adresse ein eigener Alias angehängt werden z.B.:
          "pop3.server.example" -> "pop3.server.example/1"
          Die History von Servern ohne Alias bleibt erhalten.
     Achtung: Auf dem Server belassene E-Mails werden nach dem Umschalten
              als neu erkannt und deshalb erneut geladen.
- Bugfix: [ServerBase;GUI] Beim Herunterfahren eines Servers konnte
   es zu einem Deadlock kommen. Dabei fror der Hamster (GUI) ein. {AP2}
- Bugfix: Artikelvorschau: Artikel mit unerlaubten Zeichen konnten
   Anzeigefehler verursachen. {AP2}
- Diverse Änderungen, um die Kompatibilität zwischen den Delphi-Versionen
   zu gewährleisten. {AP2}

V2.1.0.15 (enhanced {AP2})
- Change: [Log] Bei verwenden einer neuen Version wird der User-Loglevel
   automatisch einmalig aktiviert. {AP2}
- Bugfix: [RAS] Während des Aufbaus/der Trennung von Verbindungen durch
   den Hamster, kam es zu Script-Abbrüchen. {AP2}
- Bugfix: [IMAP] Der Subscribed-Status der INBOX wurde (bei 'LSUB') nicht
   korrekt zurück geliefert. {AP2}

V2.1.0.14 (enhanced {AP2})
- Bugfix: [SMTP] Der Hamster hat die Reihenfolge der "!RCPT TO" und
   "!MAIL FROM" Header falsch gesetzt.
- Change: TestCase: [Log] ('WMPowerbroadcast')
   'PBT_APMPOWERSTATUSCHANGE' wurde vom loggen ausgenommen.

V2.1.0.13 (enhanced {AP2})
- Bugfix: [Client][NNTP]
    Beim Anlegen neuer Server kam es zu einer Fehlerhaften Konfiguration,
    wenn das Server-Verzeichnis nicht erzeugt werden konnte. {AP2}
- New: Optional kann die Erzeugung von Cancel-Lock/-Key aktiviert werden.
   "Locale Server"->"NNTP"->"Header anpassen" (MID ist erforderlich) {AP2}
   http://tools.ietf.org/html/draft-ietf-usefor-cancel-lock-01/
- New: 3 neue (User-)Loglevel (ID: 8,9 & 10). Die Ausgabe der Script-Fkt.
   'Print' wurde auf Level 8 gelegt. Die anderen sind über
   'AddLog(<text>,<ID>)' erreichbar. Per Hamster.ini/[Main]/
   color.user1.text ... color.user3.brush ist nun individuelles einfärben
   der Script-Ausgabe möglich. {AP2}
- New: (MailFilter) neue Filterfunktionen: {AP2}
  - addheader(<headername>: <Text>) erzeugt einen zusätzlichen Header
  - clearheader(<headername>: )     löscht *alle* <headername> Header
  - setheader(<headername>: <Text>) = clearheader + addheader
- [HS2] neue Scriptfunktionen:
  - Change: digest( <typ> , <string> , <form> )
     <form> 2 = String mit Base64 kodiertem Inhalt.
  - New: encodeBase64( <string> )
  - New: encodeQP( <string> )
  - New: cancel_key( Secret, MessageID )
  - New: cancel_lock( Secret, MessageID )
  - New: cancel_verify( cancelKey, cancelLock )
- Change: (internal) Zwecks Performance-Steigerung wurde die Artikel-
   verarbeitung vereinheitlicht. {AP2}
- Change: [IMAP](internal) Zwecks Performance-Steigerung werden Artikel
   nur noch geparsed, wenn dieses erforderlich ist. {AP2}
- Change: Artikelvorschau {AP2}
   - Die bisher automatische entfernung der 'quoted-printable'-Codierung
   wurde optionalisiert (Menu). Zusätzlich wird nun auch 'base64'
   unterstützt.
   - New: "Ansicht"->"decodeHeader" führt die Header-Dekodierung auf den
   Markierten Text bzw. alle angezeigten Header aus.
- Change: E-Mailfilter:
   Benachrichtigungs-E-Mail 'KILL'/'IGNOR': Die Header werden nun ggf.
   zusätzlich dekodiert zitiert. {AP2}
- Bugfix: Fehler in der E-Mail Adressenerkennung (->'dummy') {HR}
- Bugfix: [Scorefile] Fehlerhafte nummerische Filter erzeugten eine
   unbehandelte Exception. {HR}
- Bugfix: [NNTP] Artikel, deren Message-ID Header überzählige Leerzeichen
   enthielt, wurden falsch in die History eingetragen. {AP2}
- Bugfix: Offen Verbindungen beim Beenden verursachten eine Exception,
   und führten dadurch ggf. zu nicht gespeicherten Einstellungen. {AP2}
- Zeichensatzkonvertierung / 'cnv'-Dateien {AP2}
  -Bugfix: Fehlerhafte Zeilen in den 'cnv'-Dateien wurden nicht erkannt.
  -Change: Zeichen <128 (US-ASCII) werden nicht mehr eingelesen, da sie
    in allen Zeichensätzen identisch sind. Alte 'cnv'-Dateien bleiben
    kompatibel.
- [NNTP]"XPAT" {AP2}
  - Bugfix: Ein "Character-Set" filterte immer auf ']'.
  - New: Hamster.ini [Setup] neue Schalter:
    'local.news.xpatDecodeHeaderBeforeSearch=1' dekodiert die Header vor
      dem Durchsuchen.
    'local.news.xpatUtf8DecodeSearchstringBeforeSearch=1' entfernt, falls
      vorhanden, die 'utf-8' Codierung vom XPAT Suchstring.
- Bugfix: [IMAP] Bei parallelem Zugriff des HamsterPop3Client und des
   HamsterIMAPServer auf die selbe Mailbox wurden teilweise falsche
   'RECENT'-Meldungen versandt. {AP2}
- Bugfix: [IMAP] Nach einem fehlgeschlagenen Versuch eine MailBox
   umzubenennen, blieb die Mailbox gesperrt. {AP2}
- Bugfix: [SSL lokal] Der Hamster bot ein Feature (SSL-Session-Cach) an,
   welches er aber nicht unterstützt. {AP2}
- Bugfix: [NNTP] Obwohl ein Artikel nicht gespeichert wurde, wenn
   der Datenbestand ('DATA.DAT') 2GB überschritt bzw. die Festplatte voll
   war, wurde der Artikel trotzdem in der 'History' eingetragen. {AP2}
- TestCase: [Log] Der Hamster loggt die Betriebssystem-Mitteilungen
   ('WMPowerbroadcast') für einen Wechsel im 'Energie'-Zustand
   (Standby/Ruhezustand).



Die Kürzel bedeuten:
~~~~~~~~~~~~~~~~~~~~
AH  = Andreas Heim
AP1 = Alexander Plas
AP2 = Alfred Peters
AS1 = Alessandro Sebastianutti
AS2 = Arne Schloh
GD  = Graham Drabble
GG  = Gerold Görke
GLG = Gildas Le Gouic
GW  = Günter Wukoutz
HB  = Hendrik Brummermann
HR  = Heiko Rost
HS  = Heiko Studt
JH  = Jürgen Haible
JW  = Jörn Weber
MB  = Michal Bartoszkiewicz
MG  = Martin Germann
MR  = Mathias Röllig
MS  = Max Sanzharov
MW  = Martin Winter
NBS = "NineBerry" Schwarz
OJB = Obbe-Jan Bakker
OZ  = Olivier Zolli
PW  = Philipp Wendler
RAY = 
SS  = Stefan Seth
TGL = Thomas G. Liesner

