diff options
Diffstat (limited to 'libs/Compress/decompress.c')
-rw-r--r-- | libs/Compress/decompress.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/libs/Compress/decompress.c b/libs/Compress/decompress.c index 286e3a0..886ed7e 100644 --- a/libs/Compress/decompress.c +++ b/libs/Compress/decompress.c @@ -43,39 +43,38 @@ //////////////////////////////////////////////////////////////////////////////// #include <Compress.h> - #include <stdio.h> -#define DICTIONARY_INIT_0x20 (0x20) -#define DICTIONARY_INIT_0x00 (0x00) -#define DICTIONARY_INIT_INDEX (2014) -#define DICTIONARY_SIZE (2048) +#define DICTIONARY_INIT_0x20 (0x20) +#define DICTIONARY_INIT_0x00 (0x00) +#define DICTIONARY_INIT_INDEX (2014) +#define DICTIONARY_SIZE (2048) #define LITERAL_TYPE (1) #define REFERENCE_TYPE (0) -static struct { +static struct +{ uint8_t dictionary[DICTIONARY_SIZE]; uint32_t cursor; - const uint8_t* inBuffer; + const uint8_t *inBuffer; int32_t inBytes; - uint8_t* outBuffer; + uint8_t *outBuffer; int32_t outRemaining; int32_t outSent; } g_DecompressorState; - -static void state_init(const uint8_t* inBuffer, int32_t inBytes) +static void state_init(const uint8_t *inBuffer, int32_t inBytes) { g_DecompressorState.cursor = DICTIONARY_INIT_INDEX; int i = 0; - for(; i < g_DecompressorState.cursor; i++) + for (; i < g_DecompressorState.cursor; i++) { g_DecompressorState.dictionary[i] = DICTIONARY_INIT_0x20; } - for(; i < DICTIONARY_SIZE; i++) + for (; i < DICTIONARY_SIZE; i++) { g_DecompressorState.dictionary[i] = DICTIONARY_INIT_0x00; } @@ -88,7 +87,8 @@ static void state_insert(uint8_t byte) { g_DecompressorState.dictionary[g_DecompressorState.cursor] = byte; // Increment and wrap. - g_DecompressorState.cursor = (g_DecompressorState.cursor + 1) % DICTIONARY_SIZE; + g_DecompressorState.cursor = + (g_DecompressorState.cursor + 1) % DICTIONARY_SIZE; } static uint8_t state_get_dictionary(uint16_t offset) @@ -103,9 +103,9 @@ static uint8_t state_get_byte(void) uint8_t byte = 0; // if(bytesLeft > 0) // { - byte = *g_DecompressorState.inBuffer; - g_DecompressorState.inBuffer++; - g_DecompressorState.inBytes--; + byte = *g_DecompressorState.inBuffer; + g_DecompressorState.inBuffer++; + g_DecompressorState.inBytes--; // } return byte; @@ -116,24 +116,24 @@ int32_t state_bytes_left(void) return g_DecompressorState.inBytes; } -int32_t decompress(uint8_t* outBuffer, int32_t outBytes, - const uint8_t* inBuffer, int32_t inBytes) +int32_t decompress(uint8_t *outBuffer, int32_t outBytes, + const uint8_t *inBuffer, int32_t inBytes) { int32_t actualSize = 0; state_init(inBuffer, inBytes); - while(state_bytes_left() > 0) + while (state_bytes_left() > 0) { uint8_t control = state_get_byte(); - for(int i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { - if(actualSize >= outBytes || !state_bytes_left()) + if (actualSize >= outBytes || !state_bytes_left()) { // We have no bytes left, or we've filled up the output buffer break; } - if((control & (1 << i)) == REFERENCE_TYPE) + if ((control & (1 << i)) == REFERENCE_TYPE) { // Read in two reference bytes uint8_t B0 = state_get_byte(); @@ -142,7 +142,7 @@ int32_t decompress(uint8_t* outBuffer, int32_t outBytes, uint16_t offset = (((uint16_t)B1 & 0xE0u) << 3u) | B0; uint16_t length = (B1 & 0x1Fu) + 3u; - while(length && actualSize < outBytes) + while (length && actualSize < outBytes) { uint8_t literal = state_get_dictionary(offset); state_insert(literal); @@ -154,18 +154,15 @@ int32_t decompress(uint8_t* outBuffer, int32_t outBytes, } else /* LITERAL_TYPE */ { - uint8_t literal = state_get_byte();; + uint8_t literal = state_get_byte(); + ; state_insert(literal); // Output outBuffer[actualSize++] = literal; - } } } - // printf("inBytes: %d (%d left), outBytes: %d, actualSize: %d\n", inBytes, state_bytes_left(), outBytes, actualSize); - // while(1); - return actualSize; } |