Selecione o idioma / Select language:
Português (BR) |
English (US)
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:
-
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. - 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/econfig/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,ManualeNota de Lançamentopela 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_sdkesource/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/econfig/) 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ãomingw_64oumsvc2022_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 --parallelExecutá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 --parallelExecutá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
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:
-
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. - 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/andconfig/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, andRelease Notesdialogs 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, andsource/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/andconfig/) 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_64ormsvc2022_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 --parallelBinary 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 --parallelBinary 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