Dieses Modul bietet eine libiconv-kompatible Schnittstelle für die Memory-to-Memory Zeichenkonvertierung. Alle Features des FLUC Zeichenwandlungsmoduls sind über die TO und FROM strings der Funktion fliconv_open() nutzbar.
Es folgt ein Beispiel, das ein Kommandozeilenprogramm für die Zeichenkonvertierung auf Basis dieser Bibliothek in C implementiert (fliconv), welches dem aus Linux bekannten iconv Programm sehr ähnlich ist. Die DLL kann auf der Mainframe auch von COBOL aus genutzt werden. Wie dies geht, haben wir in einem COBOL-Beispielprogramm veranschaulicht, welche einen PS-FB80 Dataset in IBM1141 liest und die Zeichen in UTF-8 wandelt, wobei die Records in einen PS-VB244 weggeschreiben werden.
Wenn Sie eine weitere Code-Page benötigen (wie zum Beispiel DIN-66003, welche wir mit der Vesion 5.1.2 als CCSID 66003 und mit dem Alias DE-ASCII bereitgestellt haben), dann stellen Sie uns einfach ein Issue ein. Die Zeichensatzkonvertierung mit allen Featuren und Encodings steht auf allen von uns unterstützten Plattformen gleichermaßen zur Verfügung. Es gibt keine Unterschiede, weder in den unterstützten Zeichensätzen noch im Verhalten.
Wenn der Compiler-Schalter FICONV definiert ist, dann sind alle fliconv* Funktionen auch als iconv* Funktionen verfügbar. D.h. um ihren bestehenden Code von der libiconv auf FLCICV umzustellen, müssen Sie lediglich folgende Ersetzung durchführen:
Nach der Ersetzung müssen Sie lediglich neu kompilieren und mit unserer DLL linken. Um unsere Features zu nutzen, müssen Sie eine oder mehrere der im Folgenden beschriebenen Erweiterungen an Ihren Encoding String anhängen.
Erweiterungen für den Input Encoding String:
//BOM - Reagiert auf den Wechsel der Byte Order (z.B. bei konkatinierten Dateien)
//ENL2LF - Konvertiert EBCDIC New Line (0x15) nach Line Feed (0x0A)
Erweiterungen für den Output Encoding String:
//BOM - Schreibt die Byte Order Mark (BOM) an den Anfang der Daten
//ELF2NL - Konvertiert EBCDIC Line Feed (0x0A) to New Line (0x15)
//TOUPPER - Upper Case Mapping
//TOLOWER - Lower Case Mapping
//TOSUPPER - Special Upper Case Mapping
//TOSLOWER - Special Lower Case Mapping
//TOFOLD - Special Case Folding
//TOUSER - Case Mapping laut der/des User Table/Module (^CP=cp_list)
//IGNORE - Ignoriere invalide Zeichen (Substitution durch nichts)
//USRMOD'('module_name')' - Verwende ein User Table Module
//USRTAB'('file_name')' - Verwende ein User Table Text File
//REPORT['('[file_name]')'] - Erzeuge ein Report File [STDERR]
//NFD Normalisation Form D (Canonical Decomposition)
//NFC Normalisation Form D (Canonical Decomposition, followed by Canonical Composition)
//COMBINED Character conversion with combined character support
Derzeit unterstütze System Transliteration Tables:
ICONV - Transliteration Table der libiconv
Derzeit unterstützte User Table Modules:
CCUTNPAS - UCS subset for String-Latin (XOEV/NPA, with best fit mapping and case folding)
CCUTSPEA - UCS subset for SEPA (all valid UTF-8 character < 128, with transliteration)
CCUTDELA - UCS subset of IBM1141, CP1252 and ISO8859-15 (only CP check)
CCUTDLAX - UCS Subset of IBM1141, CP1252, ISO8859-15 and XÖV (only CP check)
Für genauere Informationen über User Table Text Files (wie zum Beispiel CCUTNPAS.txt) schauen Sie bitte in das FLCL User Manual. Sie können ganze Subsets oder Manipulationen an den systemeigenen Tabellen über ein eigenes User Table Text File definieren und wenn alles soweit funktioniert über unseren Support ein vorberechnetes Lademodul, DLL oder Shard Object (so) im Rahmen der Wartung dafür bestellen. Wir haben ein Tool, welches das Textfile in ausführbaren Code umwandelt. Hierdurch müssen diese Berechnungen nicht mehr bei jedem Open getan werden, was vorallem die Abarbeitung von vielen kleinen Dateien beschleunigt. Die Mitgelieferten Beispieldateien CCUTNPAS/SEPA/DELA/DLAX entsprechen 1 zu 1 den dazugehörigen Lademodulen. Des weiteren kann man mit einer USRTAB die angegebene USRMOD manipulieren bzw. ergänzen.
Verbesserungen im Vergleich zu gewöhnlichen iconv-Implementierungen:
Support von Encoding Strings und CCSIDs
Auflistung unterstützter CCSIDs, Encoding Strings und Charsets
EBCDIC New Line (0x15) zu Line Feed (0x0A) Umwandlung
Subset Support (String.Latin, SEPA, ...) und benutzerdefinierter User Tables
Rekursives N zu M Mapping und Transliteration ('Ü' -> 'U:' -> 'UE')
Combined character support
Tagging und Eingabehilfe
NFD/NFC Mappings
Case mapping, umfangreiches Reporting, Byte Order Change Handling
Liest 5 und 6 Bytes lange UTF-8 Zeichen (Zeichenwerte mit vorangestellten Nullen)
Schneller und geringerer Speicher- sowie CPU-Konsum
Unterschiede zu gewöhnlichen iconv-Implementierungen:
Unterstützt weitere errno Werte (hauptsächlich fürs User Table Parsing, nicht für die Konvertierung selbst (hier bleiben wir vollkommen kompatible zur libiconv))
E2BIG wird gesetzt, wenn der Output Puffer kleiner ist als die Eingabedaten multipliziert mit dem maximalen Expansionsfaktor. In diesem Fall werden keine Daten konvertiert. Sprich erst wenn der Ausgabepuffer groß genug ist, wird der Block transformiert, was die Performance signifikant steigert.
Zusätzliche Funktionen für das Abrufen von About-, Versions-, Lizenz-, Statistik, Fehler- und anderer Informationen
Das Byte Order Mark wird nur geschrieben, wenn das BOM Schlüsselwort im TO-String angegeben ist, die CCSID bzw. der Encoding string haben hier keinen Enfluß.
Die List-Funktion ruft verfügbare Encoding Strings, ihre CCSIDs und zugehörige Zeichensatzinformationen (UTF/ASCII/EBCDIC) ab.