+- UUZ_ENH.TXT ----------------------------------------------+
|                                                            |
|  Vollständige Dokumentation aller Änderungen               |
|  des "Enhanced UUZ" seit dem 28.04.2002                    |
|  (c) 2003 FreeXP                                           |
|                                                30.08.2003  |
+------------------------------------------------------------+

+-------------------------+
|  09.07.2002-24.05.2003  |
+-------------------------+

MY:
- Umfassendes Redesign und zu wesentlichen Teilen Rewrite des
  RFC-Konvertierers UUZ (=> "Enhanced UUZ")
=============================================================

  1.   Euro-Support
  -----------------

  1.1. Eingehende Nachrichten  (RFC => ZConnect)
  ----------------------------------------------

  JG+MY:
  - Bei Nachrichten, die ein Euro-Symbol enthalten, wird dieses in
    Headern und Body jetzt in das CP437-Zeichen "ε" (kleines griechi-
    sches Epsilon, #238) konvertiert, statt wie bisher als Zeichenwert
    1:1 durchgereicht zu werden (wodurch man je nach Zeichensatz ein
    "ñ", "Ç", "╒" oder "x" beim Lesen im Lister sah).
    Dabei werden die folgenden Euro-fähigen Zeichensätze bzw.
    Codierungen unterstützt:
      ISO-8859-15   (Euro-Symbol auf Pos. #164)
      Windows-1252  (Euro-Symbol auf Pos. #128)
      CP858         (Euro-Symbol auf Pos. #213)
      UTF-7         (Unicode-Zeichen)
      UTF-8         (Unicode-Zeichen)

  JG+MY:
  - Manche Mail-/Newsreader (speziell Outlook Express) deklarieren
    mitunter gar keinen oder den Zeichensatz ISO-8859-1, verwenden in
    Wirklichkeit aber den Zeichensatz Windows-1252 und daher den Euro
    dort auch auf Pos. 128. Daher wird auch bei Nachrichten ohne
    Zeichensatzdeklaration oder im Zeichensatz ISO-8859-1 das dort
    eigentlich reservierte Zeichen #128 in das griechische Epsilon
    konvertiert, obwohl dieses Vorgehen strenggenommen nicht 100%ig
    korrekt ist. UUZ hatte aber im Sinne der Fehlertoleranz schon immer
    "OjE-Fixes" dieser Art, insofern ist dieses Vorgehen nur konsequent.

  In allen nach diesem "Enhanced UUZ" erscheinenden FreeXP-Versionen
  wird das griechische Epsilon im Vollbild und im DOS-Fenster optional
  als echtes Euro-Symbol dargestellt werden können. Selbst wenn man
  diese Option nicht aktiviert oder den UUZ gar nicht zusammen mit XP
  einsetzt, ist das griechische Epsilon einem Euro-Symbol (das auf Basis
  eben dieses Epsilon entwickelt wurde) sehr viel ähnlicher als ein "ñ",
  "Ç", "╒" oder "x" und diese geänderte Konvertierung des Euro-Symbols
  im Sinne einer korrekteren Transliteration daher letztlich als Bugfix
  zu werten.

  1.2. Ausgehende Nachrichten  (ZConnect => RFC)
  ----------------------------------------------

  JG+MY:
  - Das Zeichen #238 in CP437 (kleines griechisches Epsilon) wird als
    Euro-Symbol interpretiert und in das Zeichen #164 im Zeichensatz
    ISO-8859-15 konvertiert; der Zeichensatz wird mittels des von XP
    erzeugten Headers "X-Charset: ISO-8859-15" automatisch korrekt im
    entsprechenden MIME-Header "Content-Type:" deklariert.

  MY:
  - Da dies bei einer "extern" (= nicht im Betrieb mit XP) stattfinden-
    den Konvertierung von Nachrichten, die nicht von XP erzeugt wurden
    und bei denen mangels eines "X-Charset:"-Headers auch eine fehler-
    hafte Zeichensatz-Deklaration erfolgen würde, evtl. nicht gewünscht
    ist, kann diese Euro-Unterstützung mit dem neuen Schalter "-noEuro"
    deaktiviert werden. Das kleine Epsilon wird dann entsprechend der
    IBM=>ISO1-Tabelle in ein "e" konvertiert. Dabei wird auch ein
    "falsch" deklarierter Zeichensatz ISO-8859-15 in einem eventuellen
    "X-Charset:"-Header nach ISO-8859-1 korrigiert.
    Wenn die Euro-Unterstützung für ausgehende Nachrichten im Extern-
    betrieb jedoch gewünscht ist, sollte unbedingt der Schalter "-gate"
    gesetzt werden (siehe weiter unten). Nur dann ist sichergestellt,
    daß der Zeichensatz auch dann korrekt deklariert wird, wenn die
    Nachricht das als Euro-Symbol interpretierte Epsilon "ε" enthält.
    Hinweis: Der Schalter "-noEuro" kann nicht von XP aus gesetzt werden
             und ist daher nur im Externbetrieb nutzbar.

  2.   Allgemeine Änderungen und Korrekturen
  ------------------------------------------

  2.1. Eingehende Nachrichten  (RFC => ZConnect)
  ----------------------------------------------

  MY:
  - Fix: Zeichensatz-Konvertiertabellen ISO=>IBM komplett überarbeitet,
    Änderungen und Korrekturen bei fast 50 Zeichen vorgenommen (siehe
    Tabellen in MIMEDEC.PAS):
    1. Prinzipiell werden Zeichen, die im IBM-Zeichensatz nicht existie-
       ren, statt nach optischen Kriterien jetzt danach konvertiert, wie
       sie ausgesprochen werden bzw. welche Bedeutung ein Symbol hat. So
       werden z.B. die Zeichen #222 und #254 in ISO-8859-1 (großer und
       kleiner Buchstabe "Thorn") nicht mehr in ein "P" bzw. "p" konver-
       tiert, nur weil das mit viel Phantasie halbwegs ähnlich aussieht,
       sondern in ein "T" bzw. "t".
    2. Unkonvertierbare Zeichen, für die es keine sinnvolle Translitera-
       tion im IBM-Zeichensatz gibt, werden jetzt in das Blockgrafik-
       zeichen #177 konvertiert, statt als Zeichenwert 1:1 durchgereicht
       zu werden. So muß man nicht mehr rätseln, ob es sich bei dem
       Zeichen, das man sieht, wirklich um ein korrekt konvertiertes
       oder doch nur um ein nicht konvertierbares Zeichen handelt.
    ToDo: "Multichar-Konvertierung" für bestimmte Zeichen und Symbole
    ----- implementieren (z.B. Trademark-Symbol => "tm", Thorn => "Th")

  JG:
  - Unicode-Unterstützung (UTF-7 und UTF-8) für den von XP lokal verwen-
    deten Zeichensatz CP437 erweitert: Alle 75 Zeichen, die in CP437,
    nicht aber in ISO-8859-1 existieren (z.B. Block- und Rahmengrafik-
    zeichen), werden jetzt von UTF-7/8 direkt in das entsprechende
    Zeichen aus CP437 korrekt konvertiert, statt wie bisher durch ein
    Fragezeichen repräsentiert zu werden.

  JG+MY:
  - Unterstützung des Zeichensatzes ISO-8859-15 (ISO-8859-1 mit Euro-
    Symbol und einigen anderen Abweichungen) implementiert.

  MY:
  - Unterstützung weiterer Zeichensätze implementiert:
      ISO-8859-2 (osteuropäische Variante von ISO-8859-1)
      ISO-8859-9 (türkische Variante von ISO-8859-1)
      CP850      (DOS-Codepage 850)
      CP858      (DOS-Codepage 850 mit Euro-Symbol)
    Es werden alle bei der IANA registrierten Aliasnamen dieser Zeichen-
    sätze unterstützt.

  MY:
  - Einige IANA-Aliasnamen für die vom UUZ unterstützten Zeichensätze
    ergänzt und auf den neuesten Stand gebracht.

  MY:
  - Fix: Header mit einer Länge von mehr als 253 Zeichen, die kein Leer-
    zeichen und kein anderes Trennzeichen (Komma, Semikolon) enthalten,
    werden nicht mehr vernichtet (bisher erzeugte UUZ dann einen leeren
    Header!).

  MY:
  - Unterstützung des Envelope-Headers "Delivered-To:" verbessert und an
    qmail-Praxis angepaßt: Es wird nicht mehr zwingend der letzte
    "Delivered-To:"-Header als Envelope-Empfänger betrachtet, sondern
    entweder der erste, der eine Adresse enthält, die mit "alias-"
    beginnt, oder, falls eine solche Adresse nicht vorkommt, der zweite
    von allen "Delivered-To:"-Headern (falls mehrere existieren). Bei
    nur einem "Delivered-To:"-Header wird dieser genommen (logisch).

  MY:
  - Fix: Der Envelope-Header "Delivered-To:" wird jetzt auch bei Mails
    im UUCP-Format beachtet (bisher nur bei Mails im SMTP-Format).

  MY:
  - Wie schon bisher bei Mails im SMTP-Format, werden Envelope-Header
    ("Envelope-To:", "X-Envelope-To:", "Delivered-To:") jetzt auch bei
    Mails im UUCP-Format nicht mehr zwangsweise ausgewertet, sondern nur
    noch dann, wenn der Kommandozeilenschalter "-UseEnvTo" gesetzt ist.
    ToDo: Entsprechenden Schalter im UUCP-Boxen-Dialog von XP
    ----- nachrüsten.

  MY:
  - Der Schalter "-UseEnvTo" räumt bei gleichzeitigem Vorhandensein
    eines "(X-)Envelope-To:"-Headers und eines "Delivered-To:"-Headers
    dem "(X-)Envelope-To:"-Header höhere Priorität ein und ignoriert den
    "Delivered-To:"-Header.

  MY:
  - Fix: Die Umwandlung der sog. "Bang-Adressierung" in eine nach
    heutigen Regeln RFC-konforme Adresse erfolgt jetzt bei *allen*
    Adressen (bisher nur beim "To:"-Header). Dieser Fix ist eher von
    akademischem Nutzen, weil Bang-Adressierung so gut wie nicht mehr
    vorkommt.

  MY:
  - Das Lo-ASCII-Zeichen #26 (Ctrl-Z) wird beim Einlesen des RFC-Puffers
    jetzt durch ein ">" (statt durch ein Fragezeichen) ersetzt.

  MY:
  - Auswertung folgender zusätzlicher/alternativer RFC-Header
    implementiert:
      "Mailer:"              (RFC2076)
      "Mail-System-Version:" (RFC2076)
      "Originating-Client:"  (RFC2076)
      "X-Reader:"            (offenbar Mozilla-Praxis)
      "Obsoletes:"           (RFC2076, Äquivalent zu "Supersedes:")
      "Organisation:"        (RFC2076, US-Schreibweise von
                              "Organization:")
      "Importance:"          (RFC2076/1327/1911, Äquivalent zu
                              "Priority:")

  MY:
  - Bei "Priority:" bzw. "Importance:" wird jetzt "non-urgent"
    (= niedrig) als weiterer möglicher Wert interpretiert
    (RFC2076/1327).

  MY:
  - Fix: Ein Envelope-Empfänger wird jetzt mit *allen* EMP:-Headern
    abgeglichen (bisher nur mit dem ersten). Konkrete Folge: Nur wenn
    sich der Envelope-Empfänger in *keinem* der EMP:-Header befindet
    (z.B. bei BCCs), werden die Empfänger in den EMP:-Headern nach OEM:
    geschrieben. Bisher passierte das auch dann, wenn sich der Envelope-
    Empfänger zwar nicht im ersten, dafür aber in einem der folgenden
    EMP:-Header befand.

  MY:
  - Der RFC-Header "Sender:" hat jetzt Priorität vor einem evtl. aus den
    SMTP/UUCP-Protokoll-Headern herausoperierten "Envelope-Absender".
    Es wird daher jetzt immer der "Sender:"-Header statt des Envelope-
    Absenders nach WAB: geschrieben, sofern vorhanden.

  MY:
  - Bei "Reply-To:"- und "Sender:"-Headern wird ein evtl. vorhandener
    Realname jetzt nicht mehr vernichtet, sondern in den Antwort-an:-
    bzw. WAB:-Header geschrieben.
    ToDo: Realname in Antwort-an:-Headern im XP-Listerkopf anzeigen.
    -----
    (Eine entsprechende Änderung für Realnames in To:- und Envelope-
    Headern ist geplant, scheitert aber momentan noch daran, daß dafür
    eine Änderung in XP selbst erforderlich ist, da im Moment PM-Bretter
    mit Namen angelegt würden, die ebenfalls den Realname enthalten).

  MY:
  - Fix: Bei eingehenden Nachrichten mit einem Content-Type-Header
    *ohne* Charset-Parameter geht der UUZ jetzt genau wie bei Nach-
    richten, die gar keinen Content-Type-Header haben, vom Zeichensatz
    ISO-8859-1 aus und führt eine entsprechende Konvertierung in den
    IBM-Zeichensatz durch (bisher wurde der Zeichensatz als US-ASCII
    gewertet und die Nachricht daher nicht konvertiert).

  MY:
  - Folgende RFC-Header werden jetzt mit dem Prefix "X-Orig-" als
    Backup-Header im unveränderten (d.h. auch undecodierten) Original-
    RFC-Format und in voller Länge in den ZC-Header geschrieben:
      "From:"        => "X-Orig-From:"
      "Sender:"      => "X-Orig-Sender:"
      "Reply-To:"    => "X-Orig-Reply-To:"
      "To:"          => "X-Orig-To:"
      "Cc:"          => "X-Orig-Cc:"
      "Newsgroups:"  => "X-Orig-Newsgroups:"
      "Followup-To:" => "X-Orig-Followup-To:"
      "Subject:"     => "X-Orig-Subject:" (nur wenn MIME-codiert)
    Die einzigen Änderungen, die UUZ an diesen Headern vornimmt, sind,
    gefaltete Header zu entfalten und Mehrfach-Leerzeichen gemäß RFC2822
    durch ein Leerzeichen zu ersetzen (letzteres nicht bei "Subject:").
    Das Schreiben dieser Header dient im Moment primär dem Zweck, die
    Möglichkeit der Kontrolle darüber zu haben, ob bzw. wie diese Header
    in das ZConnect-Format konvertiert wurden, auch wenn die originale
    RFC-Nachricht nicht mehr vorliegt.
    Ob das Schreiben dieser Header auf Dauer beibehalten wird, wird die
    Praxis und die Reaktion der XP-User ergeben.

  MY:
  - Workaround: Der Header LEN: wird jetzt immer als letzter ZConnect-
    Header geschrieben, weil sich empirisch erwiesen hat, daß das
    Programm "PktXCode" häufiger Probleme hat, Dateien korrekt aus der
    Mail zu extrahieren, wenn danach noch weitere Header folgen.

  MH[+MY]:
  - Neuen Schalter "-bBoxname" implementiert (Vorbereitung für eine
    evtl. Kompatibilität des FreeXP-UUZ mit XP2 und eine spätere
    Verwendung auch in FreeXP). Der übergebene Boxname wird in den
    ZC-Header "X-XP-BOX:" geschrieben.

  RB[+MY]:
  - Unterstützung des Headers "X-XP-Mode:" implementiert (Vorbereitung
    für eine evtl. Kompatibilität des FreeXP-UUZ mit XP2 sowie die
    spätere Implementierung von "HdrOnly" in FreeXP).

  2.2. Ausgehende Nachrichten  (ZConnect => RFC)
  ----------------------------------------------

  MY:
  - Fix: MIME-Singlepart-Nachrichten mit einem anderen Zeichensatz als
    ISO-8859-1 (z.B. ISO-8859-15) im X-Charset-Header und ohne ZConnect-
    Charset-Header "ISOx" (x=1-15) wurden nach der Konvertierung durch
    den UUZ häufig dennoch mit der Zeichensatzdeklaration ISO-8859-1
    versandt. Variable 'convibm' wurde in der Routine 'SetMimeData'
    geprüft, bevor sie gesetzt wurde und hatte dadurch einen zufälligen
    Wert - als Folge dieses Fixes mußte das Setzen der Variable 'mpart'
    bei ausgehenden Nachrichten nach 'SetMimeData' verlegt werden, weil
    ansonsten Multipart-Nachrichten einer Zeichensatzkonvertierung
    unterzogen worden wären.

  MY:
  - Vorbereitung für zukünftige ZConnect-Zeichensatzerweiterungen:
    Beim Betrieb eines externen Clients in einer ZConnect-Box wird bei
    der Konvertierung von ISO-Nachrichten jetzt nicht mehr stur der
    Zeichensatz ISO-8859-1 deklariert, sondern die Deklaration richtet
    sich nach der jeweiligen Bezeichnung im ZConnect-Charset-Header
    ("ISO15" wird zu "ISO-8859-15"). Die Existenz eines ZConnect-Headers
    "CHARSET: ISOx" (x=1-15) verhindert nach wie vor eine (nochmalige)
    Zeichensatzkonvertierung (die Nachricht liegt bereits in einem
    ISO-Zeichensatz vor).

  MY:
  - Fix: Zeichensatz-Konvertiertabellen IBM=>ISO komplett überarbeitet,
    Änderungen und Korrekturen bei fast 20 Zeichen vorgenommen (siehe
    Tabellen in MIMEDEC.PAS):
    1. Prinzipiell werden Zeichen, die im ISO-Zeichensatz nicht existie-
       ren, statt nach optischen Kriterien jetzt danach konvertiert, wie
       sie ausgesprochen werden bzw. welche Bedeutung ein Symbol hat. So
       wird z.B. das Zeichen #233 in CP437 (großer Buchstabe "Theta")
       nicht mehr in ein "O" konvertiert, nur weil das mit viel
       Phantasie halbwegs ähnlich aussieht, sondern in ein "T".
    2. Unkonvertierbare Zeichen, für die es keine sinnvolle Translitera-
       tion im ISO-Zeichensatz gibt, werden jetzt in einen Punkt (#46)
       statt wie bisher in ein Leerzeichen konvertiert, damit keine
       unsinnigen Zeilenumbrüche entstehen.
    3. Steuerzeichen im Bereich #0-#31 werden entweder ebenfalls in
       einen Punkt oder in ein sinnvolles Ersetzungszeichen konvertiert,
       mit Ausnahme der Zeichen #9 (HT), #10 (LF), #12 (FF) und #13
       (CR), die unverändert durchgereicht werden, sowie dem Zeichen #0,
       das in ein Leerzeichen konvertiert wird. (Anmerkung: Es ist zu
       überlegen, Steuerzeichen 1:1 durchzureichen, da sie im Unter-
       schied zu ZConnect bei RFC prinzipiell erlaubt sind.)
    4. Eine "Multichar-Konvertierung" für bestimmte Zeichen und Symbole
       (z.B. Peseten-Symbol "₧" => "ESP") führt der UUZ nicht durch,
       weil diese bereits in XP stattfindet, bevor die Nachricht an den
       UUZ übergeben wird.

  MY:
  - Der Schalter "-client" impliziert jetzt den Schalter "-SMTP", so daß
    die zusätzliche Angabe von "-SMTP" bei "-client" nicht mehr erfor-
    derlich ist (es werden bei "-client" also jetzt *immer* Nachrichten
    im SMTP-Format erstellt).

  MY:
  - Neuer Schalter "-gate" für die ZC=>RFC-Konvertierung von Nachrich-
    ten, die nicht von einer RFC-Box in XP erzeugt wurden und daher
    nicht zwingend über einen "X-Charset:"-Header verfügen, in dem
    bereits der korrekte Zeichensatz deklariert ist:
    UUZ prüft bei Verwendung dieses Schalters den Body darauf, ob dieser
    *nach* einer Konvertierung in den ISO1-Zeichensatz noch 8bit-Zeichen
    enthalten würde. In Abhängigkeit vom Ergebnis dieser Prüfung werden
    dann automatisch der Zeichensatz und die Transportcodierung in den
    entsprechenden RFC-Headern "Content-Type:" und "Content-Transfer-
    Encoding:" korrekt deklariert:
    1. Nachrichten, deren Body keine 8bit-Zeichen enthalten, werden
       ausnahmslos mit dem Zeichensatz "US-ASCII" und der Transport-
       codierung "7bit" deklariert.
    2. Nachrichten mit 8bit-Zeichen im Body werden nach ISO konvertiert
       und mit dem entsprechenden Zeichensatz (i.d.R. "ISO-8859-1")
       sowie der gewählten Transportcodierung ("8bit" oder "quoted-
       printable") deklariert. Ein evtl. vorhandener Header "X-Charset:"
       wird ignoriert. Wenn die Nachricht das als Euro-Symbol interpre-
       tierte Zeichen #238 ("ε") in CP437 enthält und der Schalter
       "-noEuro" nicht gesetzt ist, wird automatisch der Zeichensatz
       "ISO-8859-15" deklariert und das Zeichen nach #164 (Euro-Symbol
       in ISO15) konvertiert (siehe auch "Euro-Support" weiter oben).
    3. Bei Nachrichten, die bereits im ISO-Zeichensatz vorliegen und die
       8bit-Zeichen enthalten, wird der ZConnect-Header "CHARSET: ISOx"
       beachtet und der ZConnect-spezifische Name des Zeichensatzes
       (z.B. "ISO9") in die offizielle Bezeichnung (in diesem Fall
       "ISO-8859-9") umgewandelt.
    4. MIME-Multipart-Nachrichten werden - genau wie bisher - weder
       geprüft noch konvertiert.
    UUZ ist mit dem Schalter "-gate" auch als universeller externer RFC-
    Konvertierer einsetzbar. Er ist aber auch für User interessant und
    von Bedeutung, die einen externen Client wie UKA_PPP oder eine der
    älteren UKAW-Versionen in einer ZConnect-Box einsetzen, weil dadurch
    der Aufruf des Hilfsprogramms "X_SPOOL.EXE" mit dem Schalter "/xc"
    unmittelbar vor der UUZ-Konvertierung entbehrlich wird. Dieser
    Aufruf erzeugte bisher eine oft fehlerhafte Deklaration von Zeichen-
    satz und Codierung, da X_SPOOL.EXE keine Prüfung des Nachrichten-
    textes durchführt, blind "8bit" und "ISO-8859-1" deklariert und auch
    keine Rücksicht auf andere in einem eventuellen CHARSET:-Header
    deklarierten Zeichensätze nimmt.
    (Der Einsatzbereich von X_SPOOL.EXE an anderen Stellen in den
    Script- und Batch-Dateien ist hiervon nicht betroffen und kann auch
    nicht durch den UUZ abgedeckt werden.)
    Hinweis: Der Schalter "-gate" kann nicht von XP aus gesetzt werden
             und ist daher nur im Externbetrieb nutzbar.

  MY:
  - Fix: Bei der ZC=>RFC-Konvertierung wird ein evtl. vorhandener Header
    "U-Content-Transfer-Encoding:" jetzt ignoriert. Bisher wurde
    *sowohl* ein neuer Header "Content-Transfer-Encoding:" generiert
    *als auch* durch das Entfernen des Prefixes "U-" bei einem evtl.
    bereits vorhandenen Header mit ansonsten identischer Bezeichnung ein
    unzulässiges Duplikat dieses Headers (mit u.U. abweichendem Inhalt)
    erzeugt.

  MY:
  - Fix: Bei Singlepart-Nachrichten im Zeichensatz "US-ASCII" werden
    jetzt Zeichensatz und Transportcodierung korrekt mit "US-ASCII" und
    "7bit" deklariert (bisher: "iso-8859-1" und "8bit").

  MY:
  - Fix: Bei MIME-Multipart-Nachrichten wird im Top-Level-Header jetzt
    immer eine Transportcodierung im Header "Content-Transfer-Encoding:"
    deklariert, und zwar generell "8bit". Bisher wurde im Top-Level-
    Header gar keine Transportcodierung deklariert, was gleichbedeutend
    mit "7bit" ist und daher bei Text-Anhängen mit 8bit-Zeichen dazu
    führte, daß manche Mail-/Newsreader diese Zeichen nicht richtig
    darstellen konnten.
    Zwar wäre es technisch möglich, den Body der Nachricht auf das
    Vorkommen von 8bit-Zeichen zu prüfen und im Top-Level-Header ggf.
    auch "7bit" zu deklarieren, dies würde aber bei großen Attachments
    mit mehreren MB die Performance bei der Konvertierung zu drastisch
    beeinträchtigen.

  MY:
  - Die ZConnect-Header "Post:" und "Telefon:" werden jetzt (und mangels
    "echter" RFC-Header für diese Informationen) in die experimentellen
    RFC-Header "X-ZC-Post:" und "X-ZC-Telefon:" geschrieben und kommen
    zumindest bei XP-Anwendern daher jetzt auch verlustfrei an.

  MY:
  - Im "Subject:"-Header werden "falsche" Prefixe wie "RE: ", "re:",
    "AW: " und "Sv: " sowie alle Inkarnationen davon jetzt durch das
    korrekte "Re: " ersetzt.

  MY:
  - Fix: Der "Lines:"-Header enthält jetzt auch dann die korrekte
    Zeilenanzahl, wenn die Nachricht "quoted-printable"-codiert wird und
    durch den dabei evtl. erforderlichen Zeilenumbruch nach 76 Zeichen
    zusätzliche Zeilen erzeugt werden müssen.

  MY:
  - Fix: Es werden jetzt auch bei ausgehenden Nachrichten bis zu 160
    Zeichen lange Message-IDs verarbeitet (bisher 120 Zeichen ausgehend
    und 160 Zeichen eingehend, relevant für MID:- und BEZ:-Header).

  MY:
  - Temporär-Fix: Bei "gemischten" Nachrichten (Mail- und Brettempfänger
    gleichzeitig, kann im Betrieb mit XP nicht auftreten und ist daher
    nur für den Externbetrieb relevant) werden keine Brettempfänger mehr
    in "RCPT TO:"- und "Cc:"-Header geschrieben - die Brettnachricht
    geht also verloren. Anderenfalls würde die Nachricht aber gar nicht
    versandt werden, weil sie ungültige Mail-Adressen enthält.

  MY:
  - Es wird jetzt ein Header "X-RFC-Converter:" erzeugt, der Dateidatum
    und -uhrzeit der verwendeten UUZ-Version enthält.

  MY:
  - Am Ende der Verarbeitung gibt der UUZ jetzt eine Art Performance-
    Statistik aus (verarbeitete Daten in Kilobyte, Dauer der Verarbei-
    tung, Kilobyte/Sekunde und Nachrichten/Sekunde).


  3.   Korrekturen, Änderungen und Erweiterungen im Zusammenhang mit der
       Anpassung an aktuell gültige RFC-Standards
       ((son-of-)1036/2045/2047/2822)
  ----------------------------------------------------------------------

  3.1.  Eingehende Nachrichten  (RFC => ZConnect)
  -----------------------------------------------

  MY:
  - Das Lo-ASCII-Zeichen #0 wird beim Einlesen des RFC-Puffers jetzt
    durch ein Leerzeichen ersetzt (ASCII #0 ist gemäß RFC2822 nicht mehr
    erlaubt).

  MY:
  - Fix: Unterstützung mehrerer Adressen im "From:"-Header.
    Gemäß RFC2822 kann der "From:"-Header mehrere Adressen enthalten (es
    muß dann ein "Sender:"-Header vorhanden sein). Dies war XP bisher
    nicht bekannt, deshalb hat es die komplette komma-separierte Liste
    der Adressen im "From:"-Header bisher als einen einzigen Absender
    betrachtet, diese auch so in den ABS:-Header übernommen und einen
    entsprechenden User angelegt ("abs1@test.de, abs2@test.de,
    abs3@test.de") - argh...
    Die neue Vorgehensweise ist wie folgt:
    1. Zunächst werden evtl. vorhandene Dupes aus dem "From:"-Header
       entfernt.
    2. Danach wird die erste nicht-leere Adresse im "From:"-Header in
       den ABS:-Header übernommen. Existiert nach dem Entfernen von
       Dupes keine nicht-leere Adresse im "From:"-Header mehr, wird
       anders als bisher ein evtl. vorhandener "Envelope-Absender" (WAB)
       *nicht* mehr in den ABS:-Header übernommen. Dies dient der
       Vermeidung der "Fälschung" von Headerinformationen.
    3. Leeren Adressen wird die Adresse "unknown@sender" verpaßt, ein
       evtl. vorhandener Realname wird beibehalten (Absender wie
       "Theo Tester <>" kommen in der Tat vor).
    4. Da ZConnect mehrere ABS:-Header nicht zuläßt, werden die übrigen
       Absender in ANTWORT-AN:-Header geschrieben, damit sie nicht ganz
       verlorengehen. Die Großschreibung von "ANTWORT-AN:" dient einer
       späteren möglichen Unterscheidung in XP von "echten" Antwort-an:-
       Headern in Groß-/Kleinschreibung (= "Reply-To:").
    ToDo: Unterstützung mehrerer Antwort-an:-Header in XP selbst,
    ----- speziell bei RTA und Anzeige im Listerkopf.

  MY:
  - Fix: Unterstützung mehrerer Adressen im "Reply-To:"-Header. Es wird
    jetzt für jede im "Reply-To:"-Header vorhandene Adresse ein
    Antwort-an:-Header erzeugt. Bisher wurden wie beim "From:"-Header
    mehrere Adressen im "Reply-To:"-Header als eine einzige Adresse
    betrachtet und auch so in den Antwort-an:-Header übernommen. Beim
    Beantworten wurde der gesamte Header dann vollständig verworfen,
    weil "reply1@test.de, reply2@test.de" als ungültige Adresse erkannt
    wurde.
    ToDo: Unterstützung mehrerer Antwort-an:-Header in XP selbst,
    ----- speziell bei RTA und Anzeige im Listerkopf.

  MY:
  - Fix: Beim Schreiben der Antwort-an:-Header wird ein Dupeabgleich
    jetzt mit *allen* Absenderadressen vorgenommen und daher nur für die
    Adressen ein Antwort-an:-Header erzeugt, die nicht auch gleichzeitig
    Absender sind.

  MY:
  - Fix: Ein WAB:-Header (Weiterleiter/Envelope-Absender) wird entfernt,
    wenn er mit einer der Absenderadressen identisch ist. Bei mehreren
    Absenderadressen ist der mit dem WAB: identische Absender dann in
    jedem Fall derjenige, der in den ABS:-Header übernommen wird, die
    übrigen Absender werden in ANTWORT-AN:-Header geschrieben (s.o.).

  MY:
  - RFC-Parser (MIME-Decodierung, Erkennung/Unterscheidung/Behandlung
    von Adressen, Realnames und Message-IDs sowie darin enthaltenen
    Kommentaren, Phrasen, quoted-strings und quoted-pairs) komplett
    neugeschrieben. Details:
     1. Die MIME-Decodierung ist im Sinne des "robustness principle"
        jetzt extrem fehlertolerant und decodiert anders als bisher z.B.
        auch 'encoded words', die Leerzeichen enthalten (was laut
        RFC2047 unzulässig ist, in der Praxis aber vorkommt), oder die
        anderweitig und RFC-widrig verunstaltet sind.
     2. Mit dem neuen Kommandozeilenschalter "-rfcMime" kann man das
        "robustness principle" in sein Gegenteil verkehren und eine
        MIME-Decodierung erzwingen, die streng nach RFC2047 decodiert,
        und so den UUZ als "Checkbot" benutzen: Was dann nicht decodiert
        wird, ist nicht korrekt codiert. :-)
        UUZ berücksichtigt in Headerzeilen dann die im jeweiligen
        Kontext (strukturierter/unstrukturierter Header, quoted-string,
        Kommentar) geltenden unterschiedlichen Regeln und decodiert nur
        noch Zeichenfolgen, die im jeweiligen Kontext auch ein gültiges
        'encoded word' bilden. Zeichenfolgen, die nur so ähnlich
        aussehen wie ein 'encoded word' (weil sie vom Absender bewußt so
        gestaltet oder weil sie von fehlerhafter Software fehlerhaft
        codiert wurden), werden dann nicht mehr decodiert.
        Hinweis: Der Schalter "-rfcMime" kann derzeit nicht von XP aus
                 gesetzt werden und ist daher nur im Externbetrieb
                 nutzbar.
     3. Fix: Nachrichtentexte und Header, die in einem ungültigen oder
        von XP nicht unterstützten Zeichensatz vorliegen (ISO-8859-5
        Kyrillisch, ISO-8859-6 Arabisch o.a.), werden jetzt nicht mehr
        blind auf Basis der in diesen Fällen unzutreffenden ISO1-Tabelle
        "kaputtkonvertiert", sondern im Originalzustand belassen. So
        können sie notfalls noch manuell dechiffriert werden (bei
        Headern war bisher nicht einmal mehr erkennbar, welcher Zeichen-
        satz vom Autor ursprünglich verwendet wurde).
     4. Fix: Die gesamte Prüfung auf gültige 'encoded words', gültige
        bzw. unterstützte Zeichensätze usw. findet jetzt statt, *bevor*
        die Decodierroutine den Header verändert. Bisher wurden generell
        zuerst sämtliche Merkmale eines codierten Headers (MIME-
        Delimiter, Zeichensatz-/Codierungsdeklaration) entfernt, und
        erst anschließend stellte sich u.U. heraus, daß eine Decodierung
        gar nicht möglich bzw. sinnvoll ist.
     5. Fix: Nach erfolgter MIME-Decodierung eines Headers werden im
        decodierten String nicht mehr alle vorhandenen Lo-ASCII-Zeichen
        ersetzt, sondern nur noch #0, #9 (<TAB>), #10 (LF) und #13 (CR)
        durch Leerzeichen sowie #26 (<Ctrl-Z>) durch ">".
     6. Fix: Die Regeln für das Entfernen bzw. Nicht-Entfernen von
        Leerzeichen zwischen mehreren 'encoded words' bzw. zwischen
        'encoded words' und uncodiertem Text werden jetzt in allen
        Fällen korrekt beachtet. Des weiteren werden nicht codierte
        Mehrfach-Leerzeichen nur noch dort durch eines ersetzt, wo dies
        auch zulässig bzw. Pflicht ist (nämlich in strukturierten
        Headern wie "From:" und "To:", nicht aber in unstrukturierten
        Headern wie "Subject:" und "Summary:").
     7. Workaround: Wenn der "In-Reply-To:"-Header mehrere Message-IDs
        enthält, wird jetzt die letzte (statt bisher der ersten)
        Message-ID in den BEZ:-Header übernommen. Diese Maßnahme
        kompensiert das Verhalten der von ZConnect<=>RFC-Gates häufig
        eingesetzten Software "DUUCP", mehrere BEZ:-Header bei ausgehen-
        den Mails nicht nach "References:", sondern in eine komma-
        separierte Liste nach "In-Reply-To:" zu übernehmen, sowie das
        dadurch verursachte Problem, daß bei einem Reply auf eine Mail
        in einem AM-Brett mit eingetragenem PM-Vertreter - häufige
        Konstellation bei Mailinglisten - bisher eine falsche Bezugs-
        verkettung beim Empfänger des Replies hergestellt wird.
     8. Fix: Bei allen Headern, die Adressen enthalten, findet die
        Erkennung von bzw. die Aufteilung in Adresse und Realname jetzt
        *vor* der MIME-Decodierung statt. Bisher konnte es in besonders
        trickreich gelagerten Fällen sogar zu einer Verwechslung von
        Absender und Realname kommen.
        (Beispiel: "=?UTF-8?B?PGdvdEBjaGE+?= <an@other.example>")
     9. Fix: Adressen werden generell nicht mehr MIME-decodiert, weil
        sie per RFC-Definition gar nicht MIME-codiert sein können/dürfen
        und daher jede einer MIME-Codierung ähnliche Zeichenfolge in
        einer Adresse nicht als solche interpretiert werden darf.
    10. Fix: Group-Adressierung ("A Group: a@b.de, c@d.de;") wird jetzt
        erkannt und die Group-Bezeichnung entfernt. Leere Groups wie
        "Undisclosed Recipients:;" werden dabei aufgelöst zu
        "!Empty_group@Undisclosed_Recipients" und sind daher zukünftig
        allesamt an einer zentralen Stelle unter "!Empty_group@..." in
        der User-Übersicht aufzufinden und können dort bequem gelöscht
        werden, falls sie durch die automatische User-Aufnahme angelegt
        worden sein sollten.
    11. Fix: Route-Adressierung ("<@pc1.tld,@pc2.tld:theo@test.de>")
        wird jetzt in allen Fällen korrekt erkannt und entfernt (beim
        obigen Beispiel lautet die aufgelöste Adresse somit
        "theo@test.de"). Bisher wurden z.B. Mehrfach-Routes nicht
        korrekt aufgelöst.
    12. Fix: Behandlung von Kommentaren, quoted-pairs/strings und
        Leerzeichen in Adressen und Realnames deutlich verbessert und
        jetzt RFC-konform implementiert:
        - Kommentare in Adressen werden jetzt korrekt erkannt und
          entfernt. Bisher hielt XP alles, was hinter der ersten
          öffnenden Klammer folgte, für einen Realname, und zerstörte
          damit Adresse wie Realname.
        - Kommentare, Anführungszeichen und quoted-pairs im Realname
          werden jetzt korrekt und vollständig erkannt und den Regeln
          entsprechend (!) entfernt (d.h., sie werden jetzt dort auch
          nicht entfernt, wo sie den Regeln nach nicht entfernt werden
          dürfen).
        - Bei Adressen, deren local part unnötigerweise als quoted-
          string vorliegt und/oder überflüssige quoted-pairs enthält,
          werden diese jetzt entfernt. Korrekt gesetzte und notwendige
          quoted-pairs/strings bleiben erhalten.
        - Leerzeichen in Adressen werden jetzt entfernt, sofern sie sich
          nicht im quoted-string eines local part befinden (dort sind
          sie zulässig).
        Drei Beispiele für die obigen Fälle mit RFC-konformen Headern:
        a) Der Header    : From: theo(ah!)@test(oh!).de
           - wurde bisher:  ABS: theo (ah!)@test(oh!).d)
           - wird  jetzt :  ABS: theo@test.de
        b) Der Header    : From: t. "te\st"@test.de (T. \("T"\) Tester)
           - wurde bisher:  ABS: t. "te\st"@test.de (T. \("T"\) Tester)
           - wird  jetzt :  ABS: t.test@test.de (T. ("T") Tester)
        c) Der Header    : From: "Theo Tes\ter"@test.de
           - wurde bisher:  ABS: "Theo Tes\ter"@test.de
           - wird  jetzt :  ABS: "Theo Tester"@test.de
    13. Fix: Adressen in Envelope-Headern werden jetzt derselben
        Prozedur unterzogen wie Adressen in allen anderen Headern auch
        (spitze Klammern, Kommentare, quoted-pairs/strings usw.
        behandeln).
    14. Alle oben beschriebenen Verfahren funktionieren sowohl mit der
        "neuen" Form der Adressierung ("Real Name <user@do.main>") als
        auch mit der "alten" Form ("user@do.main (Real Name)").
    15. Fix: Innerhalb jeder einzelnen und zwischen mehreren Message-IDs
        (wie bei "In-Reply-To:" und "References:") werden Kommentare,
        Phrasen, quoted-pairs/strings und Leerzeichen jetzt (korrekt)
        entfernt. Damit ist sichergestellt, daß syntaktisch unterschied-
        liche, aber semantisch identische Message-IDs in XP auch iden-
        tisch behandelt werden (diese Form der Message-ID-Behandlung
        sollte langfristig allerdings besser in XP selbst stattfinden,
        da die Syntax von Message-IDs idealerweise nicht verändert
        werden sollte).
        Gleichzeitig ist dadurch jetzt gewährleistet, daß keine Phrasen
        bzw. quoted-strings zwischen mehreren Message-IDs mehr fälsch-
        licherweise als Message-ID interpretiert werden. Bei nicht RFC-
        konformen Message-IDs wie "In-Reply-To: mid1@fqdn, mid2@fqdn"
        (spitze Klammern fehlen, Liste ist komma-separiert) wird per
        Brute-Force-Methode die letzte Message-ID korrekt erkannt statt
        entweder den gesamten Header fälschlicherweise als eine einzige
        Message-ID zu interpretieren oder ihn alternativ vollständig zu
        vernichten.
    16. Fix: Bei der Konvertierung des "Keywords:"-Headers (RFC) in
        mehrere "Stichwort:"-Header (ZC) werden jetzt sowohl Phrasen
        (mehrere Worte mit Leerzeichen) und quoted-strings korrekt
        behandelt (bisher: gar nicht) sowie quoted-pairs korrekt
        entfernt (bisher: gar nicht).
        Des weiteren wird der Header jetzt *zuerst* in einzelne Keywords
        bzw. Phrasen zerlegt und erst *dann* MIME-decodiert, so daß als
        Bestandteil einer Phrase bewußt codierte Kommata nicht mehr als
        Trennzeichen zwischen mehreren Keywords fehlinterpretiert
        werden.
    17. Fix: Bei der Auswertung der Header "References:" und
        "In-Reply-To:" hat "References:" jetzt immer Priorität, sofern
        vorhanden. Bisher konnten sowohl bei News als auch bei Mail
        Mehrfach-Bezüge verlorengehen, wenn ein "In-Reply-To:"-Header
        vorhanden war.
    18. Workaround: Da manche Mailreader (speziell Eudora) sowohl
        doppelte Message-IDs in Headern als auch inkonsistente
        "In-Reply-To:"- und "References:"-Header erzeugen (die
        Message-ID aus "In-Reply-To:" fehlt in "References:"), wird der
        "References:"-Header jetzt auf Dupes geprüft und die letzte
        Message-ID aus dem "In-Reply-To:"-Header in den letzten BEZ:-
        Header geschrieben, sofern sie nicht bereits in einem anderen
        BEZ:-Header vorkommt.
    Sämtliche Korrekturen und Änderungen hinsichtlich der damit jetzt
    RFC-konformen Behandlung bzw. Entfernung von Kommentaren, Phrasen
    und quoted-pairs/strings schlagen, soweit im Einzelfall zutreffend,
    auch auf alle übrigen - und hier nicht ausdrücklich erwähnten -
    strukturierten Header durch.

  MK:
  - Fix: News-Batches, deren Zeilenenden (EOL) aus CRLF statt nur aus
    CR bzw. LF bestehen und deren "rnews"-Header eine RFC-konforme
    Längenangabe enthält (ein EOL wird gemäß (son-of)RFC1036 unabhängig
    von der tatsächlichen Länge als 1 Byte gezählt), werden jetzt
    korrekt und verlustfrei konvertiert. Bisher zählte der UUZ ein CRLF
    (oder jedes andere EOL wie CRCRLF) mit exakt soviel Bytes wie das
    EOL tatsächlich Bytes hatte, was zu Datenverlust bei solchen RFC-
    konformen Postings mit CRLF-Zeilenabschlüssen geführt hat.
    Warnung: Umgekehrt werden durch diesen Fix jetzt User, die einen
    -------- Client einsetzen, der RFC-widrige Längenangaben im "rnews"-
             Header erzeugt, von Datenverlust betroffen sein! Es wird
             daher dringend empfohlen, nur Clients einzusetzen, die RFC-
             konforme Längenangaben erzeugen (was am einfachsten und
             sinnvollsten durch reine LF-Zeilenabschlüsse gewährleistet
             ist). RFC-widrige Längenangaben erzeugen alle XPNews-
             Versionen bis v1.2.2 sowie einige ältere UKAW-Versionen
             (z.B. v1.37g). Um Datenverlust zu vermeiden, müssen XPNews-
             User auf die inzwischen zur Verfügung stehende Version
             1.2.3 oder höher updaten, bei den betroffenen UKAW-
             Versionen ist in der Datei <Server>.RC der Defaulteintrag
             "$newline: crlf" in "$newline: lf" zu ändern.
             Nicht negativ betroffen von diesem Fix sind hingegen
             aktuelle UKAW/UKAD-Versionen oder UKA_PPP, da diese ohnehin
             reine LF-Zeilenenden erzeugen.

  3.2. Ausgehende Nachrichten  (ZConnect => RFC)
  ----------------------------------------------

  MY:
  - Fix: Die Erzeugung RFC-widriger Header mit uncodierten Sonderzeichen
    ist jetzt nicht mehr möglich: Die UUZ-Schalter "-MIME" und "-1522"
    (entsprechen den Optionen "MIME in News" und "MIME in Headerzeilen
    verwenden" unter C/O/E/V) sind ersatzlos gestrichen. Der UUZ codiert
    Headerzeilen jetzt bei Mail *und* News *immer* nach RFC2047 (dem
    Nachfolger von RFC1522). Durch den Wegfall wird das Erzeugen fehler-
    hafter Mails und Postings bei Usern verhindert, die lediglich
    vergessen haben, diese Schalter zu aktivieren und/oder sich über
    ihre Bedeutung nicht im klaren waren.

  MY:
  - Alle "U-Header" werden bei Bedarf nach den Regeln für strukturierte
    Header MIME-codiert (weil das auch bei unstrukturierten Headern nie
    falsch sein kann und wir bei U-Headern nicht wissen, ob es sich um
    einen strukturierten oder unstrukturierten Header handelt). Bisher
    wurden U-Header nicht MIME-codiert und damit u.U. RFC-widrige Header
    mit 8bit-Zeichen erzeugt.

  MY:
  - MIME-Codierung, "Folden" (Falten) und "Quoten" von Headern durch
    neue Routine 'EncodeFoldQuote' drastisch optimiert/korrigiert/erwei-
    tert und an RFC2045/2047 angepaßt:
     1. Die Codierung erfolgt jetzt prinzipiell "minimal invasiv", d.h.
        es werden nur noch die Worte codiert, die im jeweiligen Kontext
        auch zu codierende Zeichen enthalten (bisher wurde alles vom
        ersten bis zum letzten Wort, das zu codierende Zeichen enthält,
        codiert). Dabei wird für jedes zu codierende Wort der zu verwen-
        dende Zeichensatz separat ermittelt. Mehrere zu codierende Worte
        hintereinander, auf die derselbe Zeichensatz angewandt werden
        kann, werden zusammengefaßt und gemeinsam codiert.
     2. Fix: Strukturierte Header bzw. Teile davon, die Zeichen enthal-
        ten, die als quoted-string dargestellt werden müssen, werden
        jetzt "gequotet" (d.h. in Anführungszeichen eingeschlossen und
        darin enthaltene Anführungszeichen als "quoted-pairs" darge-
        stellt). Wenn ein Header MIME-codiert werden muß, werden solche
        eigentlich zu quotenden Zeichen codiert und folgerichtig nicht
        zusätzlich gequotet.
     3. Fix: Der jeweilige Kontext (strukturierter/unstrukturierter
        Header) und die sich daraus ergebenden unterschiedlichen Regeln
        für die MIME-Codierung werden jetzt beachtet (bisher wurden alle
        Header nach den Regeln für unstrukturierte Header codiert und
        somit u.U. fehlerhafte und RFC-widrige Header erzeugt).
     4. Fix: 'encoded words', die im Zeichensatz "US-ASCII" codiert
        werden (das kann bei strukturierten Headern, die bestimmte
        Zeichen enthalten, vorkommen) werden jetzt auch mit diesem
        Zeichensatz deklariert (statt mit "ISO-8859-1").
     5. Fix: Es werden jetzt die max. zulässigen Längen (75 Zeichen für
        'encoded words' und 76 Zeichen für codierte Zeilen) beachtet.
        Bisher konnten u.U. auch längere 'encoded words' und/oder
        codierte Zeilen erzeugt werden. Codierte Header, die länger sind
        als 76 Zeichen, werden bei Mails (und jetzt auch korrekt, s.u.)
        gefaltet.
     6. Bei Mails wird jetzt die SOLL-Bestimmung, daß auch eine
        uncodierte Headerzeile generell nicht länger als 78 Zeichen sein
        soll, bei allen relevanten Headern beachtet und entsprechend
        gefaltet (bisher wurden nur die Header "Summary:" und einige vom
        UUZ selbst erzeugte Header wie "Received:" - und speziell bei
        Postings noch "References:" - gefaltet, nicht aber z.B. der
        "Subject:"-Header).
     7. Im Unterschied zu Mails werden bei Postings/Artikeln (AMs) nur
        noch Header gefaltet, die länger als 998 Zeichen sind. Einer-
        seits ist Folding bei News immer noch nicht üblich und erwünscht
        und kann zu Problemen bei bestimmten Funktionen ("NOV") mit
        manchen News-Servern und -Clients führen, andererseits ist bei
        Zeilen, die länger als 998 Zeichen sind, u.U. der sichere
        Transport nicht mehr gewährleistet.
     8. Fix: Beim Falten von langen unstrukturierten Headern
        ("Subject:", "Summary:") bleiben Mehrfach-Leerzeichen jetzt
        in allen Fällen und in der richtigen Anzahl erhalten (bisher
        wurden sie mitunter ganz oder teilweise vernichtet).
     9. Fix: Mehrfach-Leerzeichen in strukturierten Headern (also fast
        allen außer "Subject:" und "Summary:") werden jetzt im ganzen
        String durch ein Leerzeichen ersetzt (statt wie bisher nur an
        der Stelle, an der der Header ggf. gefaltet wurde).
    10. Fix: Der Header "Keywords:" ("Stichwort:") wird jetzt korrekt
        codiert und ggf. gequotet (bisher: gar nicht) und es werden
        jetzt auch "Phrasen" (mehrere Worte mit Leerzeichen und ggf.
        Kommata) korrekt behandelt (bisher: gar nicht).
    Die neue Routine 'EncodeFoldQuote' wird aktuell bei folgenden
    RFC-Headern verwendet:
      "From:"           (ZConnect: "ABS:")
      "Sender:"         (ZConnect: "WAB:")
      "Cc:"             (ZConnect: "EMP:")
      "Keywords:"       (ZConnect: "Stichwort:")
      "Subject:"        (ZConnect: "BET:")
      "Summary:"        (ZConnect: "Zusammenfassung:")
      "X-Mailer:"       (ZConnect: "MAILER:")
      "X-Newsreader:"   (ZConnect: "MAILER:")
      "Organization:"   (ZConnect: "Organisation:")
      "X-ZC-Post:"      (ZConnect: "Post:")
      "X-ZC-Telefon:"   (ZConnect: "Telefon:")
      "X-XP-Version:"   (ZConnect: "X-XP-Version:")
      Alle 'U'-Header (z.B. "U-Received:", "U-Comments:")

  MY:
  - Fix: Bei allen Headern, die Adressen und evtl. zusätzlich Realnames
    enthalten, werden diese jetzt im "neuen" (seit mindestens 1982
    definierten und seit 2001 strikt empfohlenen) RFC-Format "Real Name
    <local.part@do.main>" erzeugt. Dabei greifen in vollem Umfang die
    oben beschriebenen Korrekturen, Änderungen und Erweiterungen für
    MIME-Codierung und Quoting (relevant für Realname!) sowie das Falten
    von Headern.

  MY:
  - Fix: Wenn eine Mail mehrere Kopienempfänger hat, werden diese jetzt
    komma-separiert in einen einzigen "Cc:"-Header geschrieben (und ggf.
    gefaltet). Bisher wurde für jeden Kopienempfänger ein eigener "Cc:"-
    Header erzeugt, was laut RFC2822 nicht mehr zulässig ist.

  MY:
  - Fix: Bei Mails werden jetzt immer der Header "In-Reply-To:" *und*
    der Header "References:" erzeugt, wenn die Nachricht einen oder
    mehrere Bezüge hat. In "In-Reply-To:" steht die Message-ID des
    letzten oder einzigen BEZ:-Headers, in "References:" stehen wie
    bisher die erste und die letzten drei Message-IDs aller BEZ:-Header.
    Dadurch bleiben Mehrfachbezüge - z.B. bei Mailinglisten - jetzt
    erhalten.
    ToDo: In XP bei mehr als vier BEZ:-Headern das Kürzen auf die erste
    ----- und die letzten drei Message-IDs evtl. verhindern.

  MY:
  - Fix: Bei News wird der Header "References:" nicht mehr gefaltet
    (manche News-Server und -Reader haben damit u.U. Probleme) und bei
    Bedarf jetzt auf max. 998 (statt wie bisher auf max. 980) Zeichen
    gekürzt. Beim Kürzen werden - wie bisher - keine Message-IDs
    abgeschnitten, sondern solange vollständige Message-IDs aus dem
    Header entfernt, bis die max. Länge unterschritten ist.

  MY:
  - Fix: Wenn die Nachricht einen leeren Betreff enthält, wird nur noch
    bei Postings (AMs) ein leerer "Subject:"-Header erzeugt (bei Mails
    ist er nicht Pflicht).


  4.   Unterstützung langer Zeilen > 253 Zeichen in Header und Body
       Diverse Variablen vergrößert
  -----------------------------------------------------------------

  4.1. Eingehende Nachrichten  (RFC => ZConnect)
  ----------------------------------------------

  Prinzipiell werden jetzt alle Headerzeilen in voller Länge ("volle
  Länge" bedeutet: 65500 Zeichen) lesend und in vielen Fällen auch
  schreibend verarbeitet:

  MY:
  - Die gesamte Behandlung eines Headers nach RFC1036/2045/2047/2822
    (MIME-Decodierung, Erkennung von Adresse/Realname/Newsgroup und
    Message-IDs, Entfernen von Kommentaren, Behandlung von quoted-
    pairs/strings und Leerzeichen) erfolgt bei *allen* Headern jetzt
    über die gesamte eingelesene Länge von 65500 Zeichen.
    Selbst wenn ein Header bei der weiteren UUZ- oder XP-internen
    Verarbeitung in seiner Länge nach wie vor auf eine bestimmte Länge
    begrenzt sein sollte, wird damit verhindert, daß Verluste nur
    deswegen entstehen, weil der Header schon von vorneherein nicht
    vollständig gelesen und interpretiert wird. Ein MIME-codierter
    Header konnte bisher mitunter nicht vollständig decodiert werden,
    wenn sich das Ende der Codierung jenseits einer je nach Header
    unterschiedlich definierten Grenze zwischen 253 und 3825 Zeichen
    befand, und/oder der Header wurde unnötig gekürzt:
    1. Bei einem unstrukturierten Header wie z.B. "Subject:", der aus
       248 MIME-codierten "ä" besteht (wofür in codierter Form 995
       Zeichen benötigt werden) und der im UUZ auch auf 248 Zeichen
       begrenzt ist, wurden bisher trotzdem nur 54 decodierte "ä" an den
       BET:-Header zurückgegeben, weil der Header "gefaltet" war
       (gefaltet sein mußte) und nur die ersten drei gefalteten Zeilen
       interpretiert wurden. Jetzt würden alle 248 "ä" an den BET:-
       Header zurückgegeben werden (wobei in diesem Fall selbst bei noch
       längeren "Subject:"-Headern ohnehin die *volle* Länge geschrieben
       wird, Näheres dazu weiter unten).
    2. Strukturierte Header, die z.B. Empfänger ("Newsgroups:", "To:",
       "Cc:"), Message-IDs ("References:", "In-Reply-To:") oder sonstige
       wesentliche Informationen enthalten, wurden bisher je nach Header
       irgendwo zwischen Zeichen 254 und 3825 vernichtet. Jetzt wird
       auch eine Adresse oder Message-ID, die z.B. erst an Pos. 65347 im
       Header beginnt, korrekt erkannt und kann weiterverarbeitet und
       z.B. in einen BEZ:- oder EMP:-Header geschrieben werden.
    3. Die MIME-Decodierung verarbeitet jetzt beliebig lange 'encoded
       words', obwohl diese gemäß RFC2047 nur 75 Zeichen lang sein
       dürfen. Manche Mail-/Newsreader erzeugen jedoch unter bestimmten
       Umständen auch längere und somit RFC-widrige 'encoded words'
       (z.B. OpenXP/32 und bisher auch alle 16bit-Versionen von XP).

  MY:
  - Folgende unstrukturierte Header werden nicht nur in voller Länge
    interpretiert, sondern auch in voller Länge in den ZConnect-Puffer
    geschrieben:
      BET:             (RFC: "Subject:")
      ROT:             (RFC: "Path:" bei News bzw. bei Mail der aus den
                        einzelnen "Received:"-Headern herausoperierte
                        und zusammengesetzte Pfad)
      MAILER:          (RFC: verschiedene Header, z.B. "X-Mailer:" oder
                        "X-Newsreader:"
      ORG:             (RFC: "Organization:")
      Post:            (RFC: "X-Z-Post:", "X-ZC-Post:")
      Telefon:         (RFC: "X-Z-Telefon:", "X-ZC-Telefon:")
      U-X-Homepage:    (RFC: "X-Homepage:")
      Stichwort:       (RFC: "Keywords:")
      Zusammenfassung: (RFC: "Summary:")
      X-Gateway:       (RFC: "X-Gateway:")
    Bei den übrigen ZConnect-Headern wie z.B. EDA: (Erstellungsdatum)
    stellt sich das Problem langer Header meist nicht, daher wurden sie
    hier nicht einbezogen. Eine Erweiterung dieser Liste ist evtl. noch
    geplant für File: und X-XP-Boundary:, sowie für Header, die Message-
    IDs enthalten (letztere sind momentan auf 160 Zeichen je Message-ID
    begrenzt, was in der Praxis ausreicht).

  MY:
  - RFC-Header, die mit dem Prefix "U-" oder "X-" im ZConnect-Header
    abgelegt werden (z.B. "U-Received:", "X-Orig-To:"), werden jetzt
    ebenfalls immer mit der vollen Länge geschrieben. Die Anzahl ist
    nicht mehr wie bisher auf 60 Zeilen begrenzt, sondern nur noch durch
    den verfügbaren Speicher. Ein "Backdoor" für diese Header existiert
    nicht, da weder notwendig noch sinnvoll.

  MY:
  - Da bei extrem vielen extrem langen Headern theoretisch der Speicher
    knapp werden könnte (100 Header mit je 6500 Zeichen z.B. passen
    nicht mehr in den verfügbaren unteren Speicher) und somit Header-
    verlust drohen würde, existiert für jeden der obigen Header, der mit
    voller Länge geschrieben wird, für den Fall von Speichermangel ein
    "Backdoor": Der Header wird dann wie bisher in der Länge geschrie-
    ben, wie sie in der Variablendeklaration im Header-Record für den
    jeweiligen Header definiert ist (max. 253 Zeichen inkl. Bezeichner).
    Bei Headern, die gekürzt werden mußten, weil sie länger als 65500
    Zeichen sind (oder die wegen Speichermangels ohnehin gekürzt werden
    mußten), wird dies durch das Anhängen der Zeichenfolge "[...]"
    kenntlich gemacht.

  MY:
  - Für alle Header, die in voller Länge geschrieben werden, sowie für
    die Adressen-Header wird der Speicher dynamisch und in genau der
    Menge angefordert und belegt, die jeweils benötigt wird (Ausnahme:
    für die Absender wird immer die maximal definierte Länge belegt).
    Dadurch wird es in der Realität so gut wie nie passieren, daß Header
    gekürzt werden müssen oder (im Falle von U/X-Headern) wegen
    Speichermangel verlorengehen.

  MY:
  - Für alle Adressen-Header wird beim UUZ-Start ein Speicherminimum
    reserviert, durch das garantiert ist, daß für eine definierte
    Mindestanzahl von Adressen mit max. theoretisch möglicher Länge
    immer ausreichend Speicher zur Verfügung steht:
      EMP:           20 Adressen/Newsgroups
      OEM:            1 Adresse
      KOP:           20 Adressen + 20 Realnames
      ABS:            5 Adressen +  5 Realnames
      WAB:            1 Adresse  +  1 Realname
      Antwort-an:     5 Adressen +  5 Realnames
      Diskussion-in: 20 Adressen/Newsgroups
    Steht dieses Speicherminimum (derzeit 26.480 Bytes) schon beim
    Programmstart nicht zur Verfügung, bricht der UUZ die Verarbeitung
    unmittelbar ab.

  MY:
  - Folgende Variablenwerte wurden geändert:
      AdrLen     (Länge Adressen)             : 238 (bisher: 120)
      RealnLen   (Länge Realnames)            : 160 (bisher: 120)
      MaxEmp     (max. Anzahl Empfänger)      : 125 (bisher:  50)
      MaxKop     (max. Anzahl Kopienempfänger): 125 (bisher:  60)
      MaxAbs     (max. Anzahl Absender)       :  50 (bisher:   1)
      MaxReplyTo (max. Anzahl Antwort-an)     :  50 (bisher:   1)
      MaxFollow  (max. Anzahl Followup-NGs)   :  50 (bisher:  10)
      Keywords   (Länge Stichworte)           : 242 (bisher:  60)
      Summary    (Länge Zusammenfassung)      : 236 (bisher: 200)
      BetreffLen (Länge Betreff)              : 248 (bisher: 250)
    Die Werte für Keywords, Summary und BetreffLen spielen bei ein-
    gehenden Nachrichten allerdings keine Rolle, da diese Header ohnehin
    in voller Länge geschrieben werden (siehe oben).

  4.2. Ausgehende Nachrichten  (ZConnect => RFC)
  ----------------------------------------------

  MY:
  - Fix: Beim Schreiben von Headern, bei denen durch MIME-Codierung oder
    Quoting und die damit verbundene Verlängerung der Headerzeile die
    bisherige Längenbeschränkung von 254 Zeichen zwangsläufig zu einem
    Zeichenverlust und/oder defekten Headern geführt hat, ist die aus
    der Codierung bzw. dem Quoten resultierende Länge jetzt nicht mehr
    begrenzt (ein Betreff aus z.B. 200 "ä" erzeugt jetzt über die neue
    Routine 'EncodeFoldQuote einen 806 Zeichen langen und korrekt
    codierten/gefalteten "Subject:"-Header).
    Damit ist jetzt gewährleistet, daß keine von XP erzeugten Header
    mehr gekürzt oder defekte MIME-Header produziert werden.

  MY:
  - Umfassende Änderungen und Korrekturen bzgl. der Erstellung des
    Nachrichten-Body:
    1. Fix: Lange Zeilen mit mehr als 253 Zeichen in uncodierten Nach-
       richten werden jetzt nicht mehr willkürlich nach 253 Zeichen
       umbrochen, sondern bis 998 Zeichen in voller Länge geschrieben
       (998 Zeichen ist die RFC-seitig und in der Praxis definierte
       Zeilenlänge, bis zu der ein sicherer Transport der Nachricht
       sichergestellt ist).
       Zeilen mit mehr als 998 Zeichen werden an Position 998 bzw. vor
       dem letzten davor befindlichen "white space" sinnvoll umbrochen
       ("sinnvoll" heißt: Wenn das nächste Wort so lang ist, daß es
       mangels Leerzeichen nicht vollständig in die nächste Zeile paßt
       und daher ohnehin auseinandergerissen werden muß, dann wird der
       Anfang dieses Worts noch an das Ende der aktuellen Zeile
       angehängt und an Position 998 umbrochen).
    2. Fix: Bei "quoted-printable"-codierten Nachrichten entsteht jetzt
       kein Zeichenverlust mehr, wenn die codierte Zeile länger als 254
       Zeichen wird (bisher wurden Zeichen jenseits dieser Grenze durch
       die qp-Codierung und die damit verbundene Verlängerung der Zeile
       nach rechts ins Nirwana rausgeschoben und damit vernichtet).
    3. Fix: Wenn in SMTP-Mails eine uncodierte Zeile mit mehr als 998
       Zeichen umbrochen oder eine qp-codierte Zeile mit mehr als 76
       Zeichen nach einem "soft line break" in der nächsten Zeile fort-
       gesetzt wird, wird jetzt auch in diesen Fällen der erforderliche
       zusätzliche Punkt "." am Zeilenanfang der folgenden Zeile hinzu-
       gefügt, wenn diese mit einem Punkt beginnt. Bisher geschah das
       nicht, der einzelne Punkt am Zeilenanfang wurde beim Empfänger
       RFC-konform entfernt und fehlte somit dann dort (blöd z.B. bei
       URLs).
       Bei via NNTP versandten Postings gelten diesbezüglich zwar
       dieselben Regeln wie bei SMTP-Mails, dort wird das Hinzufügen
       bzw. Entfernen von Punkten am Zeilenanfang aber vom Client
       übernommen. Deshalb fügt der UUZ dort zwar keinen Punkt hinzu,
       berücksichtigt das nachträgliche Hinzufügen seitens des Clients
       aber insofern, als daß er in den jeweiligen Fällen eine um ein
       Zeichen kürzere Zeile erzeugt, damit keine unzulässig langen
       Zeilen (mit -qp max. 76 Zeichen, ohne -qp max. 998 Zeichen)
       entstehen können.
    4. Fix: Bei "quoted-printable"-codierten Nachrichten wird das Leer-
       zeichen hinter dem Signaturtrenner "--" jetzt gemäß RFC2045 als
       "=20" codiert und dadurch beim Empfänger nicht mehr vernichtet.
    5. Fix: Lo-ASCIIs in "quoted-printable"-codierten Nachrichten werden
       jetzt gemäß RFC2045 ebenfalls codiert.
    6. Wenn schon quoted-printable, dann richtig: Die EBCDIC-kritischen
       Zeichen !"#$@[\]^`{|}~ werden jetzt gemäß RFC2045 ebenfalls
       codiert.
    7. Fix: Außer bei Signaturtrennern werden die XP-typischen Leer-
       zeichen am Zeilenende (entstehen durch den internen XP-Editor und
       kennzeichnen dort einen "fortlaufend umbrochenen" Absatz) jetzt
       bei allen Nachrichten entfernt, weil sie schlicht überflüssig
       sind und bei "quoted-printable"-codierten Nachrichten außerdem
       codiert werden müßten (was bisher entgegen der qp-Definition in
       RFC2045 nicht der Fall war). Nebenbei wird damit auch vermieden,
       daß beim Quoten von XP-Nachrichten zusätzliche Leerzeichen
       entstehen können.


  5.   Beteiligte Entwickler und geänderte Dateien
  ------------------------------------------------

  MY - Michael Heydekamp (Redesign/Rewrite des UUZ)
  SV - Stefan Vinke      (Anlaufstelle für programmiertechnische
                          Detailfragen während der Entwicklung)
  JM - Joachim Merkel    (Profiling / Performance-Optimierung)
  JG - Jochen Gehring    (Euro-Support, erweiterter Unicode-Support)

  Des weiteren wurden der EOL-Bugfix für News-Batches von MK (Markus
  Kämmerer) aus OpenXP/32 sowie die Unterstützung des Parameters
  "-bBoxname" von MH (Max Huckenbeck) und des Headers "X-XP-Mode:" von
  RB (Robert Böck) aus XP2 übernommen.

  UUZ.PAS, UUZ0.PAS (neue Unit mit ausgelagerten Routinen wegen
  Überschreitung der Codesegment-Grenzen in UUZ.PAS), MIMEDEC.PAS,
  XP0.PAS, XPMAKEHD.INC, XPOVL.PAS


  6.   Credits
  ------------

  Die oben beschriebenen Arbeiten am "Enhanced UUZ" hätten ohne die
  wertvolle Hilfe folgender direkt oder indirekt Beteiligter nicht
  erfolgreich abgeschlossen werden können (Reihenfolge alphabetisch und
  ohne Anspruch auf Vollständigkeit):

  Johann Addicks   - Tests, ZC/Gate-Konformität
  Frank Ellermann  - RFC-Recherche und -Interpretation (Mail)
  Urs Janßen       - RFC-Recherche und -Interpretation (News)
  Joachim Merkel   - RFC/ZC-Konformität, Tests, Designfragen
  Dirk Nimmich     - RFC-Recherche und -Interpretation (Mail/News)
  Sebastian Weiser - RFC-Recherche und -Interpretation (Mail)

  FreeXP bedankt sich bei allen genannten und nicht genannten
  Beteiligten.


+--------------+
|  30.08.2003  |
+--------------+

MY:
- Versionsmeldung auf "FreeXP" geändert und mit aktuellen Units
  neu compiliert. Keine weiteren inhaltlichen Änderungen.