Eremey Valetov 7c832ac7dd Identify multi-file extraction root cause: SuperMaster path hangs
Compared raw cdir bytes between original UC2 Pro and UC2 v3 archives
(using fixed bitdump.py match decoder). Key finding: the original
NEVER uses SuperMaster (masterPrefix=0) in file COMPRESS records —
it always assigns custom master indices (>= 2). UC2 v3 uses
SuperMaster for ungrouped files.

The original's ExtractFiles() processes SuperMaster files through
ToToWalk(TTefl, SUPERMASTER, ...) which hangs. Custom master files
go through the masroot chain walk, which works correctly.

Fix: always assign custom master indices to all files, generating at
least one custom master block even for archives without dedup groups.
This matches the original's behavior.

Other differences found: original uses hidden=0xDE (sentinel), tag=0
(no EXTMETA), method=3, and csize=8 (much smaller due to custom
master compression).
2026-03-29 14:59:24 -04:00

UC2 v3.0.0 — UltraCompressor II

A cross-platform revival of UltraCompressor II, the DOS-era archiver by Nico de Vries (1992--1996). UC2 was notable for its advanced deduplication ("master blocks"), file versioning, and competitive compression ratios on the hardware of its day.

This project brings UC2 back as a modern, portable C99 tool. Phase 1 (current) provides decompression and archive listing, built on Jan Bobrowski's clean-room portable decompressor (unuc2/libunuc2). Phase 2 will add compression using the original algorithms.

Building

Requires CMake >= 3.16 and a C99 compiler (GCC, Clang, or MSVC).

cmake -B build
cmake --build build

The binary is at build/cli/uc2.

Usage

uc2 archive.uc2                       # Extract all files
uc2 -l archive.uc2                    # List contents
uc2 -t archive.uc2                    # Test archive integrity
uc2 -d /tmp/out archive.uc2           # Extract to directory
uc2 -l archive.uc2 '*.txt'            # List matching files
uc2 -p archive.uc2 readme.txt         # Extract to stdout

Options

Flag Description
-l List archive contents
-t Test archive integrity
-a Include all file versions (not just latest)
-d path Extract to specified directory
-f Overwrite existing files
-p Extract to stdout
-D Skip directory metadata; -DD also skips file metadata
-T Tab-separated output (for scripting)

Project Structure

UC2/
  lib/            libuc2 decompression library
  cli/            uc2 command-line tool
  original/       preserved original sources (reference only)
  cmake/          build system modules
  tests/          test archives and test programs

History

  • v1.0--v2.3 (1992--1996) Original DOS releases by Nico de Vries
  • 2015 Source code released under LGPL-3.0 by Danny Bezemer
  • 2020--2021 Jan Bobrowski writes unuc2/libunuc2 (portable decompressor)
  • 2026 UC2 v3.0.0: cross-platform revival

License

GPL-3.0. See LICENSE and CREDITS.md for full attribution.

Description
Cross-platform revival of UltraCompressor II (Nico de Vries, 1992-1996). C99, GPL-3.0.
Readme GPL-3.0 2.1 MiB
Languages
C++ 49.1%
C 41.8%
Batchfile 3.6%
CMake 2.3%
Python 1.6%
Other 1.6%