Squeeze


 * Distinct from Squeeze It (SQZ). See the disambiguation section for more similarly-named formats.

Squeeze was a method of compressing single files popular on CP/M, devised by Richard Greenlaw circa 1981. It was superseded by Crunch and later CrLZH. Squeezed files were common in LBR archives. It uses Huffman coding combined with run-length encoding.

Squeezed files were signified in CP/M's 8.3 filename format by replacing the middle letter of the extension with Q (.?Q? -- so FOO.TXT became FOO.TQT), with the extension .QQQ used for corner cases such as a blank extension. Some software for other platforms (e.g. squprt33.ark) appends a .SQ extension instead.

The /usr/share/misc/magic file on Linux systems suggests that it was perhaps also in use on the Apple ][ platform, and in fact Binary II files are often found squeezed (as .bqy instead of .bny). Versions for PC/MS-DOS were also in use in the early 1980s before ARC caught on as the dominant archiver.

Disambiguation
Not to be confused with:
 * Squeeze It (SQZ) - A compression-and-archival format for DOS released around 1992.
 * SQUEEZE (AJP Systems) - A Windows 3.x file compression program and format.
 * squeeze (Daniel Bernstein) - A compressed file format
 * Squeez - A compression/archiving application for 32-bit Windows, with internal support for several standard formats. By Sven Ritter and SpeedProject.
 * Squeez, UnSqueez - Terms used for software and technology associated with SQX format, by Sven Ritter and SpeedProject.
 * SQWEZ - Compressed archive format and software for DOS, with an emphasis on self-extracting archives.
 * Vidfern Squeezer - Executable compression software for 32-bit Windows. (Maybe also transparent file compression for Mac?)
 * ARC "squeezed" compression - Related, but distinct

Format details
Note:
 * Multi-byte integers are little-endian.
 * Some Squeeze software limits the length of a Huffman code to at most 16 bits.

Compressed data section
The "compressed data" section. This part is equivalent to ARC compression method 4.

A table node contains two encoded values. Each is a signed 16-bit integer interpreted as follows:

Timestamp extension
Format of timestamp extension, taken from SQDATE.DOC (see below). It starts at the first byte boundary after the Stop code. It is present if the signature and checksum are correct.

Identification
Files begin with bytes.

Note that this does not distinguish them from CODEC (Telvox).

Specifications

 * See the SQUSQ directory on CP/M archives for various source code and documentation (much of it, unfortunately, itself squeezed/crunched).
 * - Information about the timestamp extension

Tools

 * CFX (DOS/Unix)
 * lbrate by Russell Marks, c. 2001 (Unix, GPL2)
 * The Unarchiver
 * On CP/M (or emulators):
 * The original tools were SQ/USQ. See for instance the SQUSQ directory of the Oakland CP/M archive.
 * The later LT31 deals with extracting from all of Squeeze, Crunch, CrLZH and LBR formats. Widely available in CP/M archives, e.g. LT31.LBR
 * squprt33.ark - Portable sq/usq, version "3.3 10/29/86"
 * - Contains NUSQ v1.10 (1984-10-21; By Dave Rand, Paul Homchick and Cliff Sharp) and NSQ v2.01 (1984-10-20; "Originally by Richard Greenlaw") (DOS Software)
 * - SQPC v1.31 (1986-03-02) and UNSQPC v1.36, by Vernon D. Buerg (DOS Software)
 * - ALUSQ v1.1 (1985-03-04) by Alan Losoff (DOS software, decompression only)
 * - ALUSQ v1.1 (1985-03-04) by Alan Losoff (DOS software, decompression only)

Sample files

 * OAK CP/M archive → .../*.?q?
 * Found in many LBR files. Note that you may have to tell your LBR utility not to decompress them (e.g. ).
 * https://telparia.com/fileFormatSamples/archive/squeeze/