JCALG1 r5.21
(c)1999,2000 Jeremy Collake
All Rights Reserved.
http://www.collakesoftware.com
jeremy@collakesoftware.com

 


This software is provided as-is, without warranty of ANY KIND, either expressed or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose. The author shall NOT be held liable for ANY damage to you, your computer, or to anyone or anything else, that may result from its use, or misuse. Basically, you use it at YOUR OWN RISK.

License
This library may be used freely in any applications as long as the following to criteria are met:
(a). Notify the author of JCALG1's use and in what application.
(b). Show notification of JCALG1's usage in your program or program documentation along with a link to the authors webpage.

Credits
First of all, I would like to credit Joergen Ibsen, author of apLib, for many suggestions and help with my development of JCALG1. You may notice similarities between the JCALG1 decompressor and that of apLib. The reason for this is because I could not come up with a better encoding scheme than Joergen Ibsen's. So, I must, rightfully, give him credit to developing much of the encoding scheme that JCALG1 uses.

Synopsis
JCALG1 is a fast and tight compression library that can easily be integrated into any application. Written in 100% assembly, compression is fairly fast, and decompression is rapid.


Documentation
This is where I tell you what you need to know, ever-so-briefly ;). I decided to document all functions in C, since most people are familar with it. All functions use the STDCALL calling convention (parameters pushed onto stack, called function adjusts stack before return).
DWORD JCALG1_Compress(
void *Source,
DWORD Length,
void *Destination,
DWORD WindowSize,
AllocFunc *pAlloc,
DeAllocFunc *pDealloc,
CallbackFunc *pCallback);
Returns: Size of the compressed data, or NULL if the data could not be compressed. 


DWORD JCALG1_Decompress_Fast(
void *Source,
void *Destination);
DWORD JCALG1_Decompress_Small(
void *Source,
void *Destination);
Returns: Size of the uncompressed data or 0 if the block of data was not compressed by JCALG1.


DWORD JCALG1_GetUncompressedSizeOfCompressedBlock(
void *pBlock)
Returns: Size of the uncompressed block, in bytes.

 


DWORD JCALG1_GetNeededBufferSize(
DWORD n Size);
Returns: The minimum destination buffer size (currently nSize+4).

 


void JCALG1_GetInfo(
_JCALG1_Info *JCALG1_Info);
typedef struct __JCALG1_Info {
DWORD MajorRev;
DWORD MinorRev;
DWORD FastDecompressorSize;
DWORD SmallDecompressorSize;
} _JCALG1_Info;
 

BOOL CallbackFunc(
DWORD pCurrentSrc,
DWORD pCurrentDest);
Return: FALSE to stop compression, TRUE to continue compression.

 


void *AllocFunc(
DWORD Size);
Returns: Pointer to allocated memory block.

 


BOOL DeallocFunc(
void *pMemory)
Returns: FALSE if failure.