File Compression in CP/M
Last revision of this page: February 7, 2025

If you work with old computers and old software for CP/M, then you cannot avoid the topic of file compression. Under the DOS operating system, this is usually relatively clear and simple, because almost everything is done with ZIP files (e.g. PKZIP & PKUNZIP).
But as soon as it comes to CP/M, it gets more complicated. The keywords here are: SQUEEZE, CRUNCH, ARK and LBR. And often two methods are combined, e.g. LBR + SQUEEZE or LBR + CRUNCH.
SQUEEZE
F I L E N A M E . ? Q ?
The middle letter in the file extension is a Q. Uses the Huffman Encoding to reduce the size of the target file.
The middle letter in the file extension is a Q. Uses the Huffman Encoding to reduce the size of the target file.
CRUNCH
F I L E N A M E . ? Z ?
The middle letter in the file extension is a Z. Uses the Lempel-Ziv-Welch (LZW) techniques to reduce the size of the target file.
The middle letter in the file extension is a Z. Uses the Lempel-Ziv-Welch (LZW) techniques to reduce the size of the target file.
LBR – Library Files
F I L E N A M E . L B R
There is no compression of the grouped files! If you compress a LBR file with SQUEEZE you will a file named FILENAME.LQR or FILENAME.LZR if you use CRUNCH.
There is no compression of the grouped files! If you compress a LBR file with SQUEEZE you will a file named FILENAME.LQR or FILENAME.LZR if you use CRUNCH.
A library is a group of files collected together into one file in such a way that the individual files may be recovered intact. A library file can be identified by the "LBR" as the extent of the file name. LU (Library Utility) is a CP/M utility used to maintain libraries of files. LU does not perform any compression. Because of this, most people will squeeze or crunch files before adding them to a library if they want to save space. If you want to remove the component files (members) from a LBR file, you should have a copy of LU310.COM, NULU152A.COM, or other LBR extractor utility. (LU and NULU are 8080/8085/Z80 compatible.)
[Keith Petersen, (former) Maintainer of the MSDOS, MISC and CP/M archives at SIMTEL20]
ARK – Archive Files
F I L E N A M E . A R K
Recently, popular CP/M Public Domain software files and information files are being distributed using ARCHIVE files. Archive files are similar to library (LBR) files, in that they take a logical group of files and put them together in a single file. The main difference, is that the members of the "ARC" or "ARK" file are automatically compressed. The compression algorithm chosen is one of three which will produce the smallest file.
Archive files have been available to the MS-DOS and PC-DOS areas, but, and been made useful in the CP/M environment with the introduction of the "UNARC" program. The current version is 1.6, and is available with extensive documentation, and two executable COM files, a 8080/8085 version and a Z80 version. The Z80 version takes advantage of the expanded Z80 (and equivalent) instruction set for speed and size, and therefore is machine dependent. There is also a modification overlay to adapt the program to non-standard CP/M 2.2 and 3.0 operating systems, such as CP/M68k and CP/M emulators. Programs are available on many machines to process "ARC" files, the Atari ST, systems running the UNIX, systems running MS-DOS, and CP/M.
[Keith Petersen, (former) Maintainer of the MSDOS, MISC and CP/M archives at SIMTEL20]
ZIP
There is a very recent „UNZIP“ project for CP/M Z80 computers on Github. This project or program is special in that it can handle both MS-DOS PKZIP 1.X and 2.04g files.