Example 1 contains the sample program compressexample.c (located in the Examples folder), which shows how to use the Compression folio. This program loads itself into a memory buffer, compresses the data, decompresses it, and finally compares the original data with the decompressed data to make sure the compression process was successful.
Example 1: Example of compressing and decompressing data (compressexample.c).
#include "types.h" #include "filestream.h" #include "filestreamfunctions.h" #include "stdio.h" #include "mem.h" #include "compression.h" /*****************************************************************************/ int main(int argc, char **argv) { Stream *stream; Err err; bool same; uint32 i; int32 fileSize; uint32 *originalData; uint32 *compressedData; uint32 *finalData; int32 numFinalWords; int32 numCompWords; err = OpenCompressionFolio(); if (err >= 0) { stream = OpenDiskStream(argv[0],0); if (stream) { fileSize = stream->st_FileLength & 0xfffffffc; originalData = (uint32 *)malloc(fileSize); compressedData = (uint32 *)malloc(fileSize); finalData = (uint32 *)malloc(fileSize); if (originalData && compressedData && finalData) { if (ReadDiskStream(stream,(char *)originalData,fileSize) == fileSize) { err = Compress(originalData, fileSize / sizeof(uint32), compressedData, fileSize / sizeof(uint32)); if (err >= 0) { numCompWords = err; err = Decompress(compressedData, numCompWords, finalData, fileSize / sizeof(uint32)); if (err >= 0) { numFinalWords = err; printf("Original data size : %d\n",fileSize / sizeof(uint32)); printf("Compressed data size : %d\n",numCompWords); printf("Uncompressed data size: %d\n",numFinalWords); same = TRUE; for (i = 0; i < fileSize / sizeof(uint32); i++) { if (originalData[i] != finalData[i]) { same = FALSE; break; } } if (same) { printf("Uncompressed data matched original\n"); } else { printf("Uncompressed data differed with original!\n"); for (i = 0; i < 10; i++) { printf("orig $%08x, final $%08x, comp $%08x\n", originalData[i], finalData[i], compressedData[i]); } } } else { PrintError(NULL,"decompress data",NULL,err); } } else { PrintError(NULL,"compress data",NULL,err); } } else { printf("Could not read whole file\n"); } } else { printf("Could not allocate memory buffers\n"); } free(originalData); free(compressedData); free(finalData); CloseDiskStream(stream); } else { printf("Could not open '%s' as an input file\n",argv[0]); } CloseCompressionFolio(); } else { PrintError(NULL,"open the compression folio",NULL,err); } return (0); }