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);
}