Skip to content

Repository files navigation

Selecione o idioma / Select language:
Português (BR) | English (US)


Português (BR)

Clique para expandir / recolher o README em português

Sliding Window LZ77 & LZMA Visualizer

Um aplicativo gráfico moderno em C++17 e Qt 6 desenvolvido para descompressão em tempo real e visualização interativa do algoritmo de compressão de janela deslizante (Sliding Window LZ77) e cadeias de Markov LZMA em toda a gama de arquivos suportados pelo projeto 7-Zip (ip7z/7zip).


🌟 Visão Geral

O Sliding Window LZ77 & LZMA Visualizer permite abrir, inspecionar e descompactar arquivos comprimidos de diversos formatos — abrangendo .7z, .zip, .rar, .tar, .wim, .xz, .gz, .bz2, .cab, .iso, .lzma, .zst, .dmg, .vhd, .vhdx, .vdi, .vmdk, .fat, .ntfs, .ext e outros contêineres suportados pelo ecossistema 7-Zip — interceptando e reconstruindo em tempo real o fluxo de referências de repetição e literais.

O projeto combina duas abordagens de desconstrução:

  1. Núcleo Nativo em C com Ganchos (Hooks) para .7z: Decodificação direta no código oficial do LZMA SDK (Igor Pavlov), interceptando o Range Coder e probabilidades Markovianas no laço mais interno de descompressão.
  2. Motor de Análise Deslizante Multi-formato: Extração contínua e análise de janela deslizante LZ77 em tempo real para os demais contêineres de arquivo através da integração com o backend 7-Zip.

Durante o processamento, são capturados e exibidos:

  • Ponteiros de Repetição (Matches): Distância no histórico da janela deslizante ($d$) e comprimento da repetição ($l$), representados pela referência curta (d, l).
  • Símbolos Literais (Literals): Bytes emitidos diretamente sem histórico de repetição na janela.
  • Métricas Globais: Total de repetições, total de literais, tamanho descomprimido acumulado e tempo de execução.

🚀 Principais Funcionalidades

  • Suporte Amplo a Arquivos Compactados: Compatibilidade com toda a gama de contêineres suportados pelo 7-Zip (.7z, .zip, .rar, .tar, .wim, .xz, .gz, .bz2, .cab, .iso, .lzma, .zst, etc.).
  • Visualização em Tempo Real de Ponteiros: Tabela interativa com offset de saída, distância ($d$), comprimento ($l$) e par de referência curta (d, l).
  • Persistência de Dados no Diretório do Usuário: Armazenamento automático de logs e configurações em %LOCALAPPDATA%\LZ77_SlidingWindow\ (logs/ e config/language.json).
  • Internacionalização Dinâmica (i18n): Alternância instantânea de idioma entre Português (Brasil) e English (US) pela barra de menus (Configurações > Idioma), sem reiniciar.
  • Visualizador Integrado de Documentação: Leitura direta de Sobre, Leia-me, Manual e Nota de Lançamento pela barra de menus (Sobre > ...).
  • Execução Nativa GUI sem Janela de Terminal: Subsistema Windows GUI puro configurado em MinGW e MSVC.
  • Arquitetura Modular em C++17: Separação estrita em módulos source/config, source/interface, source/locale, source/logs, source/lzma_sdk e source/assets/RELEASES.

🛠️ Tecnologias Utilizadas

  • Linguagens: C++17 (Frontend e Lógica Qt) e C11 (Núcleo LZMA SDK)
  • Framework de GUI: Qt 6.11 (Módulos: Core, Gui, Widgets, Concurrent, LinguistTools)
  • Compiladores Homologados:
    • MinGW 13.10 (GCC/G++ 64-bit)
    • Microsoft Visual C++ 2022 (MSVC Build Tools 18 / 14.51 x64)
  • Sistema de Build: CMake 3.24+ e Ninja Build System
  • Ambiente de Desenvolvimento: Visual Studio Code com CMake Tools e C/C++ Extensions

📂 Estrutura de Diretórios do Projeto

SlidingWindowLZ77_cpp/
├── .vscode/                     # Configurações do VS Code (tasks.json, c_cpp_properties.json, etc.)
├── cmake/                       # Scripts auxiliares do CMake (ícones Windows e windeployqt)
├── mocks/                       # Ferramentas auxiliares isoladas (compilador de traduções, version editor)
├── source/
│   ├── assets/                  # Ícones, licenças e notas de lançamento (RELEASES)
│   ├── config/                  # Worker assíncrono de extração e hooks (LzmaExtractor)
│   ├── docs/                    # Documentação bilíngue integrada (pt_BR e en_US)
│   ├── interface/               # Janela principal e diálogos da interface gráfica (MainWindow, DocumentViewerDialog)
│   ├── locale/                  # Gerenciador de traduções dinâmicas e arquivos .ts / .qm
│   ├── logs/                    # Gerenciador de logs thread-safe (LogManager)
│   └── lzma_sdk/                # Código-fonte oficial do LZMA SDK (C puro) com injeção de hooks
├── CMakeLists.txt               # Script de compilação CMake da aplicação principal
├── CMakePresets.json            # Presets de configuração e build para MinGW e MSVC
├── main.cpp                     # Ponto de entrada da aplicação
├── README.md                    # Este arquivo multilíngue unificado
├── ABOUT.md                     # Detalhes teóricos e arquiteturais multilíngue unificado
└── MANUAL.md                    # Manual de instruções multilíngue unificado

[!NOTE] Os diretórios de execução e persistência de dados (logs/ e config/) são gerados no caminho de dados do usuário:
C:\Users\<usuario>\AppData\Local\LZ77_SlidingWindow\


⚙️ Compilação e Execução

Pré-requisitos

  • Qt 6.11 instalado em C:/Qt/6.11.1 (versão mingw_64 ou msvc2022_64).
  • Ninja Build instalado e disponível no PATH.
  • CMake 3.24 ou superior.

1. Compilação via VS Code (Tarefas Rápidas)

Pressione Ctrl+Shift+P > Tasks: Run Task e escolha:

  • Qt6: Compilar e Executar LZ77Visualizer (MinGW) para compilar com GCC e rodar.
  • Qt6: Compilar e Executar LZ77Visualizer (MSVC) para compilar com MSVC e rodar.
  • Qt6: Compilar e Executar Mocks (MinGW) ou (MSVC) para compilar e executar os utilitários gráficos de apoio.

2. Compilação via Linha de Comando (PowerShell)

Compilação com MinGW (Release):

$env:Path = 'C:\Qt\Tools\Ninja;C:\Qt\6.11.1\mingw_64\bin;C:\Qt\Tools\mingw1310_64\bin;' + $env:Path
cmake --preset host-qt6-mingw-release
cmake --build --preset host-qt6-mingw-release --target LZ77Visualizer --parallel

Executável: build/build_LZ77Visualizer_mingw/LZ77Visualizer.exe.

Compilação com MSVC 2022 (Release):

cmake --preset host-qt6-msvc-release
cmake --build --preset host-qt6-msvc-release --target LZ77Visualizer --parallel

Executável: build/build_LZ77Visualizer_msvc_ninja/Release/LZ77Visualizer.exe.


📄 Licença e Créditos

  • LZMA SDK: Domínio público / LGPL (Igor Pavlov).
  • Interface e Visualizador: Desenvolvido em C++17 e Qt 6 sob licença MIT.

Versão: v2026.8.21.0
Data técnica desta revisão: 21 de agosto de 2026
Autor: Fernando Nillsson Cidade


English (US)

Click to expand / collapse the README in English

Sliding Window LZ77 & LZMA Visualizer

A modern graphical application written in C++17 and Qt 6 developed for real-time decompression and interactive visualization of the Sliding Window LZ77 compression algorithm and LZMA Markov models across the full range of archive formats supported by the 7-Zip (ip7z/7zip) project.


🌟 Overview

The Sliding Window LZ77 & LZMA Visualizer allows opening, inspecting, and extracting compressed archives in various formats — including .7z, .zip, .rar, .tar, .wim, .xz, .gz, .bz2, .cab, .iso, .lzma, .zst, .dmg, .vhd, .vhdx, .vdi, .vmdk, .fat, .ntfs, .ext, and other containers supported by the 7-Zip ecosystem — intercepting and reconstructing the repetition reference and literal stream in real time.

The project combines two deconstruction approaches:

  1. Native C Core with Hooks for .7z: Direct decoding inside the official LZMA SDK (Igor Pavlov) C codebase, intercepting the Range Coder and Markovian probabilities inside the innermost decompression loop.
  2. Multi-Format Sliding Analysis Engine: Continuous extraction and real-time LZ77 sliding window matching for other archive containers via 7-Zip backend integration.

During processing, the application captures and displays:

  • Match Repetition Pointers: Distance in the sliding window history ($d$) and match length ($l$), represented as the short reference (d, l).
  • Literal Symbols: Raw bytes emitted directly without previous matching history in the window.
  • Global Metrics: Total matches, total literals, accumulated uncompressed size, and elapsed decompression time.

🚀 Key Features

  • Wide Archive Format Support: Full compatibility with all archive formats supported by 7-Zip (.7z, .zip, .rar, .tar, .wim, .xz, .gz, .bz2, .cab, .iso, .lzma, .zst, etc.).
  • Real-Time Pointer Visualization: Interactive table displaying output offset, distance ($d$), length ($l$), and short reference pair (d, l).
  • Data Persistence in User Local AppData: Automatic storage of logs and configuration in %LOCALAPPDATA%\LZ77_SlidingWindow\ (logs/ and config/language.json).
  • Dynamic Internationalization (i18n): Instant runtime language switching between Portuguese (Brazil) and English (US) from the menu bar (Settings > Language), without restarting.
  • Integrated Documentation Viewer: Direct reading of About, Readme, Manual, and Release Notes dialogs from the menu bar (About > ...).
  • Native GUI Execution without Terminal Window: Pure Windows GUI subsystem configured for both MinGW and MSVC toolchains.
  • Modular C++17 Architecture: Strict separation into source/config, source/interface, source/locale, source/logs, source/lzma_sdk, and source/assets/RELEASES.

🛠️ Technologies Used

  • Languages: C++17 (Frontend & Qt Logic) and C11 (LZMA SDK Core)
  • GUI Framework: Qt 6.11 (Modules: Core, Gui, Widgets, Concurrent, LinguistTools)
  • Supported Compilers:
    • MinGW 13.10 (GCC/G++ 64-bit)
    • Microsoft Visual C++ 2022 (MSVC Build Tools 18 / 14.51 x64)
  • Build System: CMake 3.24+ and Ninja Build System
  • Development Environment: Visual Studio Code with CMake Tools and C/C++ Extensions

📂 Project Directory Structure

SlidingWindowLZ77_cpp/
├── .vscode/                     # VS Code workspace settings (tasks.json, c_cpp_properties.json, etc.)
├── cmake/                       # Auxiliary CMake scripts (Windows icons and windeployqt)
├── mocks/                       # Isolated auxiliary mock tools (translation compiler, version editor)
├── source/
│   ├── assets/                  # Icons, licenses, and release notes (RELEASES)
│   ├── config/                  # Asynchronous extractor worker and hooks (LzmaExtractor)
│   ├── docs/                    # Integrated bilingual documentation (pt_BR and en_US)
│   ├── interface/               # Main window and GUI dialogs (MainWindow, DocumentViewerDialog)
│   ├── locale/                  # Dynamic translation manager and .ts / .qm files
│   ├── logs/                    # Thread-safe logging manager (LogManager)
│   └── lzma_sdk/                # Official LZMA SDK source code (pure C) with injected hooks
├── CMakeLists.txt               # Main application CMake build script
├── CMakePresets.json            # Configuration and build presets for MinGW and MSVC
├── main.cpp                     # Application entry point
├── README.md                    # This unified multilanguage file
├── ABOUT.md                     # Theoretical and architectural details (unified multilanguage)
└── MANUAL.md                    # User Manual (unified multilanguage)

[!NOTE] Runtime data and persistence folders (logs/ and config/) are created in the user data path:
C:\Users\<user>\AppData\Local\LZ77_SlidingWindow\


⚙️ Building and Running

Prerequisites

  • Qt 6.11 installed at C:/Qt/6.11.1 (mingw_64 or msvc2022_64).
  • Ninja Build installed and available in PATH.
  • CMake 3.24 or higher.

1. Build via VS Code (Quick Tasks)

Press Ctrl+Shift+P > Tasks: Run Task and select:

  • Qt6: Compilar e Executar LZ77Visualizer (MinGW) to build with GCC and run.
  • Qt6: Compilar e Executar LZ77Visualizer (MSVC) to build with MSVC and run.
  • Qt6: Compilar e Executar Mocks (MinGW) or (MSVC) to build and run auxiliary GUI tools.

2. Build via Command Line (PowerShell)

MinGW Build (Release):

$env:Path = 'C:\Qt\Tools\Ninja;C:\Qt\6.11.1\mingw_64\bin;C:\Qt\Tools\mingw1310_64\bin;' + $env:Path
cmake --preset host-qt6-mingw-release
cmake --build --preset host-qt6-mingw-release --target LZ77Visualizer --parallel

Binary output: build/build_LZ77Visualizer_mingw/LZ77Visualizer.exe.

MSVC 2022 Build (Release):

cmake --preset host-qt6-msvc-release
cmake --build --preset host-qt6-msvc-release --target LZ77Visualizer --parallel

Binary output: build/build_LZ77Visualizer_msvc_ninja/Release/LZ77Visualizer.exe.


📄 License & Credits

  • LZMA SDK: Public Domain / LGPL (Igor Pavlov).
  • Interface & Visualizer: Developed in C++17 and Qt 6 under MIT License.

Version: v2026.8.21.0
Technical revision date: August 21, 2026
Author: Fernando Nillsson Cidade

About

O Sliding Window LZ77 & LZMA Visualizer é uma ferramenta de engenharia reversa, análise de dados e visualização educacional que desmistifica o funcionamento interno da compressão sem perdas baseada em dicionário histórico e modelos estatísticos de Markov, suportados pelo ecossistema [7-Zip](https://github.com/ip7z/7zip).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages