An open API service indexing awesome lists of open source software.

https://github.com/dfgordon/retrocompressor

compress and expand using retro formats
https://github.com/dfgordon/retrocompressor

Last synced: 6 months ago
JSON representation

compress and expand using retro formats

Awesome Lists containing this project

README

          

# retrocompressor

![unit tests](https://github.com/dfgordon/retrocompressor/actions/workflows/rust.yml/badge.svg)

The starting motivation for this project is to provide a library that aids in the handling of TD0 files (Teledisk-compatible disk images). It is envisioned that the scope will expand over time.

* `direct_ports::lzhuf` - nearly a direct port of the classic `LZHUF` of Okumura et al.
* `lzss_huff` - signficant rewrite of `LZHUF` with flexible parameters
* `lzw` - LZW with fixed code width, other parameters flexible
* `td0` - convert normal Teledisk to advanced Teledisk, or vice-versa

## Size Limits

This is not optimized for large files. Some 32-bit integers used to describe file sizes have been retained since they are part of the format. The maximum size, beyond which an error is returned, defaults to 3 MB for TD0 files, 1 GB otherwise.

## Executable

The executable can be used to compress or expand files from the command line. For example, to compress or expand a file using LZSS with adaptive Huffman coding:

`retrocompressor compress -m lzss_huff -i -o `

`retrocompressor expand -m lzss_huff -i -o `

To get the general help

`retrocompressor --help`

## Library

This crate can be used as a library. For an example of how to use the library see `main.rs` (which calls into `lib.rs` per the usual rust arrangement). Also see the [crate documentation](https://docs.rs/retrocompressor/latest/retrocompressor).

## Teledisk

Teledisk images come in an "advanced" variety that uses LZW (v1.x) or LZSS/Huffman (v2.x) compression. Module `lzw` handles the former case, while module `lzss_huff` handles the latter. However, options need to be set correctly, and the Teledisk header needs to be modified whenever advanced compression is added or subtracted. As a convenience there is a module `td0` that handles all known cases transparently. This can also be accessed from the command line:

`retrocompressor compress -m td0 -i -o `

`retrocompressor expand -m td0 -i -o `

### Important

Advanced TD0 images in v2.x do not record the length of the expanded data. As a result, some decoders have trouble decoding the last symbol. The workaround is to pad the *expanded* TD0 with several disparate-valued bytes *before* compression. Teledisk evidently did this, so normally there is no problem, but if you are a creator of TD0 images, it is a good idea to include the padding.