Die meisten Entpacker benötigen reichlich (bis zu 256kB) RAM um z.B. über die Huffman-Table die Daten wieder zu entpacken oder die Packrate erreicht nicht einmal 20%.
Das LZFG-Decompressor Modul benötigt gerade einmal 4kB RAM, die in Laufzeit dynamisch allokiert werden. Desweiteren ist der Code sehr kompakt und der Packer erreicht erstaunliche 40..55% beim Packen einer Applikation.
Als Übergabeparameter benötigt der Decompressor die Adresse des gepackten Datensatzes, die Länge dieses Datensatzes sowie zwei Zeiger für Adresse entpackter Datensatz (wird intern dynamisch allokiert) und Länge des Selben.
Innerhalb des Modules wird geprüft, ob es sich um einen kompatiblen LZFG-Datensatz handelt und ob die Länge und die CRC16 der entpackten Daten identisch den im LZFG-Datensatz hinterlegten Werten sind.
User-Functions:
LZFG-Decompressor: | |
LZFG_Decomp | Dekomprimiert den Datensatz |
Error-Codes:
Name | Decimal_Value | Description |
LZFG_SUCCESS | 0 | decompress successfully |
LZFG_noLZFG | 130 | Data are not in the necessary format |
LZFG_lenERR | 131 | length error |
LZFG_crcERR | 132 | CRC error |
LZFG_memERR | 133 | error in allocation of the window or destination memory |
pC/LZFG - Decompressor
LZFG_Decomp
Dekomprimiert den übergebenen Datensatz nach dem LZFG-Verfahren inclusive Prüfung der Erweiterungen CRC-16 und Länge des Originals.
Parameters
*source | pointer to compressed data |
source_l | lenght of compressed data |
**dest_pp | pointer to get the position of decompressed data |
*dest_l | pointer to get the lenght of decompressed data |
Return Value
LZFG_SUCCESS | erfolgreich dekomprimiert |
LZFG_noLZFG | Daten sind nicht im erforderlichen Format |
LZFG_lenERR | Längenfehler |
LZFG_crcERR | CRC-Fehler |
LZFG_memERR | Fehler bei Allokation des Window- oder Zielspeichers |
Example