PKWARE DCL Implode

From Just Solve the File Format Problem
(Difference between revisions)
Jump to: navigation, search
Line 9: Line 9:
 
== Disambiguation ==
 
== Disambiguation ==
 
DCL Implode is not the same format as [[ZIP]]'s old "implode" compression method (#6). It is unfortunate that there are two formats named "implode" associated with the same company. It ''can'' be used in ZIP, as compression method #10, but support for this is limited.
 
DCL Implode is not the same format as [[ZIP]]'s old "implode" compression method (#6). It is unfortunate that there are two formats named "implode" associated with the same company. It ''can'' be used in ZIP, as compression method #10, but support for this is limited.
 +
 +
== Format details ==
 +
DCL Implode is based on [[LZ77 with Huffman coding]]. It uses only predefined Huffman codebooks, so it is simpler than most compression methods of this type.
  
 
== Identification ==
 
== Identification ==
Line 21: Line 24:
  
 
Most common is {{magic|0x00 0x06}}, indicating binary compression and a 4K dictionary.
 
Most common is {{magic|0x00 0x06}}, indicating binary compression and a 4K dictionary.
 +
 +
Since the header bytes aren't very discriminating, it may be worth noting that the ''last'' 3 bytes of the datastream will match one of these 8 bit-patterns (assuming padding bits are 0, and there are no padding bytes):
 +
 +
... xxxxxxxx 0000000x 11111111
 +
... xxxxxxxx 10000000 01111111
 +
... 0xxxxxxx 11000000 00111111
 +
... 00xxxxxx 11100000 00011111
 +
... 000xxxxx 11110000 00001111
 +
... 0000xxxx 11111000 00000111
 +
... 00000xxx 11111100 00000011
 +
... 000000xx 11111110 00000001
  
 
== Related formats ==
 
== Related formats ==
Line 33: Line 47:
  
 
== Software ==
 
== Software ==
* [[zlib]] does not support it directly, but its source code includes a decoder (contrib/blast).
+
* [[zlib]] does not support it directly, but its source code includes a decoder: contrib/blast.
 
* [https://github.com/krisives/lawine/blob/master/lawine/misc/implode.c Lawine] (a Starcraft/Brood War Library)
 
* [https://github.com/krisives/lawine/blob/master/lawine/misc/implode.c Lawine] (a Starcraft/Brood War Library)
 
* [https://github.com/ladislav-zezula/StormLib/tree/master/src/pklib StormLib/pklib]
 
* [https://github.com/ladislav-zezula/StormLib/tree/master/src/pklib StormLib/pklib]
 
* https://github.com/JoshVarga/blast - An encoder/decoder written in Go
 
* https://github.com/JoshVarga/blast - An encoder/decoder written in Go
 
* [https://support.pkware.com/display/PKZIP/DCL PKWARE DCL]
 
* [https://support.pkware.com/display/PKZIP/DCL PKWARE DCL]
 +
 +
See also [[TTCOMP#Software]].
  
 
== Links ==
 
== Links ==
 
* [https://web.archive.org/web/20040811082907/http://www.pkware.com/products/developers/dcl/ 2004 archive of PKWARE DCL website]
 
* [https://web.archive.org/web/20040811082907/http://www.pkware.com/products/developers/dcl/ 2004 archive of PKWARE DCL website]
 
See also [[TTCOMP#Software]].
 
  
 
[[Category:PKWARE]]
 
[[Category:PKWARE]]

Revision as of 15:27, 20 July 2021

File Format
Name PKWARE DCL Implode
Ontology

PKWARE DCL Implode is a compressed data format associated with PKWARE Data Compression Library (DCL), a commercial data compression software product. It is not the only format supported by DCL, but it is possibly the most notable one.

The terms "blast" and "explode" are sometimes used in association with this format. When used as a file format, it may be identified as TTCOMP.

Contents

Disambiguation

DCL Implode is not the same format as ZIP's old "implode" compression method (#6). It is unfortunate that there are two formats named "implode" associated with the same company. It can be used in ZIP, as compression method #10, but support for this is limited.

Format details

DCL Implode is based on LZ77 with Huffman coding. It uses only predefined Huffman codebooks, so it is simpler than most compression methods of this type.

Identification

A DCL Implode datastream starts with a two-byte header. The first byte indicates the type of compression:

  • 0x00: binary compression
  • 0x01: ASCII compression (a method optimized for compressing text)

The second byte specifies the size of the dictionary:

  • 0x04: 1024 bytes
  • 0x05: 2048 bytes
  • 0x06: 4096 bytes

Most common is 0x00 0x06, indicating binary compression and a 4K dictionary.

Since the header bytes aren't very discriminating, it may be worth noting that the last 3 bytes of the datastream will match one of these 8 bit-patterns (assuming padding bits are 0, and there are no padding bytes):

... xxxxxxxx 0000000x 11111111
... xxxxxxxx 10000000 01111111
... 0xxxxxxx 11000000 00111111
... 00xxxxxx 11100000 00011111
... 000xxxxx 11110000 00001111
... 0000xxxx 11111000 00000111
... 00000xxx 11111100 00000011
... 000000xx 11111110 00000001

Related formats

Specifications

Software

See also TTCOMP#Software.

Links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox